// Verbindung aufnehmen - wird durch einen Timer geprüft und evtl. aufgerufen.
procedure TdmCommunication.ReconnectVQDB;
begin
VQDBSocket.Host := '
localhost';
VQDBSocket.Port := VQDB_port;
//
VQDBconnected := _connecting_;
VQDBSocket.Open;
end;
// Ereignis Connect eingetreten.
// Es wird eine Registrierung an die Serveranwendung gesendet.
procedure TdmCommunication.VQDBSocketConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
VQDBConnected := _connected_;
Socket.SendText('
PT|CM$$|RIDB,RE' + eorec);
Logout('
[VQDB] connected.');
// set keep alive option
if setsockopt(Socket.SocketHandle, SOL_SOCKET, SO_KEEPALIVE,
@bOptVal, bOptLen) = SOCKET_ERROR
then
Logout('
Error, can not set socket options. ' +
SysErrorMessage(WSAGetLastError()));
end;
// Ereignis Disconnet eingetreten. Timer wird den Connect wieder einleiten.
procedure TdmCommunication.VQDBSocketDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
VQDBConnected := _disconnected_;
Logout('
[VQDB] disconnected.');
end;
// Error aufgetreten - Timer wird den Connect wieder einleiten.
procedure TdmCommunication.VQDBSocketError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
VQDBSocket.Close;
VQDBConnected := _disconnected_;
LogOut('
[VQDB] socket error ' + IntToStr(ErrorCode) + '
' +
SysErrorMessage(ErrorCode));
Errorcode := 0;
end;
// Daten lesen und an den Buffer anhängen.
// Es wird für die Lesende Task ein Ereignis ausgelöst zum abholen der Daten.
procedure TdmCommunication.VQDBSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
var
s:
string;
begin
s := '
';
while Socket.ReceiveLength > 0
do
s := s + Socket.ReceiveText;
if Assigned(FOnVQDBDataAvailable)
then
begin
FVQDBBuffer := FVQDBBuffer + s;
FOnVQDBDataAvailable(self, length(FVQDBBuffer));
end
else
Logout('
discarded: ' + s);
end;