S vydáním verze 4D 20 R8 se objevila funkce, která mění pravidla hry: třída TCPConnection. Tato moderní třída využívá objektově orientovanou syntaxi a podporuje asynchronní obsluhu síťového připojení, čímž poskytuje novou a výkonnou alternativu k příkazům 4D Internet Commands. Pomocí třídy TCPConnection se můžete připojit prakticky k čemukoli – ať už jde o servery, tiskárny, pokladny nebo průmyslová zařízení, což z ní činí univerzální nástroj pro řešení jedinečných síťových požadavků.
V této verzi je k dispozici funkce klienta TCP, která umožňuje připojení k externím serverům a bezproblémovou výměnu dat.
Abychom demonstrovali potenciál TCPConnection, provedeme vás v tomto příspěvku jednoduchou implementací pomocí singletonové třídy, která zjednodušuje komunikaci TCP.
Výukový program s jednoduchou singletonovou třídou
Použijeme sdílenou singletonovou třídu s názvem „ConnectionToTheServer“, která je zjednodušením třídy používané v HDI:
Shared Singleton Class constructor()
//Connect to a server
Function connect($address : Text; $port : Integer)
This.connection:=4D.TCPConnection.new($address; $port; This)
//Disconnect from the server
Function disconnect()
This.connection.shutdown()
This.connection:=Null
//Send a text to the server
Function sendText($text : Text)
var $blob : Blob
TEXT TO BLOB($text; $blob; UTF8 text without length)
This.sendBlob($blob)
//Send a blob to the server
Function sendBlob($blob : Blob)
This.connection.send($blob)
//Callback called when the connection is successfully established
Function onConnection($connection : 4D.TCPConnection; $event : 4D.TCPEvent)
ALERT("Connection established")
//Callback called when the connection is properly closed
Function onShutdown($connection : 4D.TCPConnection; $event : 4D.TCPEvent)
ALERT("Connection closed")
//Callback called when receiving data. The simple servers always send a sentence to show to the user
Function onData($connection : 4D.TCPConnection; $event : 4D.TCPEvent)
ALERT(BLOB to text($event.data; UTF8 text without length))
//Callback called when the connection is closed unexpectedly
Function onError($connection : 4D.TCPConnection; $event : 4D.TCPEvent)
ALERT("Connection error")
Použití této třídy je velmi jednoduché. Nejprve se funkce connect připojí k serveru:
cs.ConnectionToTheServer.me.connect("server IP address or domain name";1234/*server port*/)
Funkce connect instancuje objekt TCPConnection a také se připojí k serveru. Přijímá také třetí parametr, kterým je objekt option. Tento objekt je důležitý, protože musí implementovat všechna zpětná volání. V tomto příkladu a pro zjednodušení je použit přímo singleton, protože implementuje všechna zpětná volání.
Po zavolání connect lze data odeslat na server buď voláním sendText, nebo sendBlob:
cs.ConnectionToTheServer.me.sendText("The text to send to the server")
TCPConnection odesílá pouze bloby dat. Chcete-li odeslat text, je třeba jej nejprve převést na blob podobně jako ve funkci sendText.
Pro získání dat ze serveru je třeba použít zpětná volání. První volané zpětné volání je onConnection. onConnection se volá, když je skutečně navázáno spojení se serverem. Data je možné odeslat i před voláním onConnection, v takovém případě se data uchovávají a odešlou se při navázání spojení. Dokonce je možné se připojit, odeslat data a ukončit spojení bez čekání: V takovém případě se naváže spojení, odešlou se data a po odeslání všech dat se spojení uzavře.
Dalším důležitým zpětným voláním je onData: Je voláno pokaždé, když TCPConnection obdrží data ze serveru. Přijatá data jsou přístupná v blobu $event.data, který lze použít tak, jak je, nebo jej lze převést na text pomocí příkazu BLOB to text jako v příkladu.
V neposlední řadě: Po připojení, odeslání a přijetí je poslední důležitou částí spojení jeho uzavření. Existují tři způsoby, jak spojení uzavřít: Buď spojení uzavře server, nebo klient, nebo dojde k chybě spojení a dojde k odpojení.
Když server spojení uzavře, zavolá se zpětné volání onShutdown.
Chcete-li ukončit spojení na straně klienta, můžete zavolat:
cs.ConnectionToTheServer.me.disconnect()
Volání pro odpojení zavolá také zpětné volání onShutdown (když se spojení uzavírá).
A konečně, pokud dojde k chybě spojení, která si vynutí jeho uzavření, zavolá se zpětné volání onError. Zpětné volání onError se zavolá také v případě, že se spojení se serverem nepodaří navázat.
Závěr
Jak vidíte, třída TCPConnection se neuvěřitelně snadno používá a zároveň poskytuje robustní funkčnost. Ať už odesíláte nebo přijímáte data, zajišťuje spolehlivou komunikaci s externími zařízeními nebo servery.
Pokud máte dotazy nebo potřebujete další podporu, neváhejte se obrátit na fórum 4D.