TbeCbTCPServer
TbeCbTCPServer
Eine Komponente die einen TCP Server bereitstellt. Für Codeblock Umgebungen ohne Formular muss der Codeblock persistent ausgeführt werden.
Andernfalls wird das Objekt nach Beendigung des Codeblocks zerstört.
In beas Umgebungen muss das Programm per CallResident() aufgerufen werden und das Objekt mit Persistent und ohne Owner (siehe Beispiel) erzeugt werden, da andernfalls der Codeblock nach Ausführung zerstört wird.
Eigenschaften
Achtung: Die Verdingungs-Eigenschaften müssen eingestellt werden bevor CbActive gesetzt wird.
Eigenschaft | Beschreibung |
---|---|
CbActive:L | Startet den TCP Server |
CbPort:N | Port auf dem der TCP Server Verbindungen akzeptiert (default) 0 |
CbTimeout:N | Timeout für TCP Kommunikation (default) 0 = unendlich |
CbDataTerminator:C | User Agent der bei Anfragen übermittelt wird (default) LF (Linefeed = ASCII 10) |
CbMaxConnections:N | Anzahl der max. gleichzeitig verbundenen Clients (default) 0 = unendlich (durch Windows/Netzwerk Stack begrenzt) |
Verfügbare Ereignisse
Ereignis | Beschreibung |
---|---|
OnException | Wird ausgelöst wenn ein interner Fehler ausgelöst wird. |
OnClientConnect | Wird ausgelöst wenn sich eine Client das erste mal verbindet Signatur: function(oSender:O, oContext:O) |
OnClientDisconnect | Wird ausgelöst wenn die Verbindung zu einem Client getrennt wird Signatur: function(oSender:O, oContext:O) |
OnData | Wird ausgelöst wenn Daten empfangen wurden Signatur: function(oSender:O, oContext:O) |
Beispiel
| oTCPServer:O, lPersistent:L |
//******************************************************************************
// Ereignis wenn Daten empfangen wurden
// Die Daten können über Context.CbData ausgelesen werden
// Die Rückgabe kann über Context.CbResponse gesetzt werden
//******************************************************************************
function DoData(Sender, Context)
Context.CbResponse := Context.CbData + ' OK' + oTCPServer.CbDataTerminator,
Log(ClassName(Sender) + ' DoData', llTrace),
end,
//******************************************************************************
// Ereignis wenn sich ein Client verbindet
// Ip / Port können über Contex.CbClientIp / Context.CbClientPort ausgelesen werden
//******************************************************************************
function DoOnClientConnect(Sender, Context)
Log(ClassName(Sender) + ' DoOnClientConnect', llTrace),
end,
//******************************************************************************
// Ereignis wenn die Verbindung zu einem Client getrennt wird
//******************************************************************************
function DoClientDisconnect(Sender, Context)
Log(ClassName(Sender) + ' DoClientDisconnect', llTrace),
end,
//******************************************************************************
// Ereignis wenn eine interne Exception auftritt
// Das Exception Objekt kann über Context.CbException ausgelesen werden
//******************************************************************************
function DoException(Sender, Context)
Log(ClassName(Sender) + ' Fehler:' + GetErrorText(Context.CbException), llError),
end,
// Der Codeblock muss persistent ausgeführt werden, andernfalls wird der
// TCP Server am Ende des Codeblocks wieder zerstört und ist dann nicht mehr
// verfügbar/aktiv
lPersistent := LoadedModule = belmBeas,
startseq
oTCPServer := CreateObject('TbeCbTCPServer', 'TCPServer',,, lPersistent),
startseq
AssignEvent(oTCPServer, "OnException", "DoException"),
AssignEvent(oTCPServer, "OnClientConnect", "DoOnClientConnect"),
AssignEvent(oTCPServer, "OnClientDisconnect", "DoClientDisconnect"),
AssignEvent(oTCPServer, "OnData", "DoData"),
oTCPServer.CbPort := 81,
oTCPServer.CbActive := true,
writeln(oTCPServer.CbActive),
always
if not lPersistent then
DestroyObject(oTCPServer),
endif,
stopseq,
onerror
Log(GetErrorText(GetErrorObj()), llError),
writeln('Allgemeiner Fehler: ' + GetErrorText(GetErrorObj())),
stopseq,