QuickStart
Een server en een client, in ongeveer twintig regels
Start de server, start de client, verstuur een string. Het servertabblad luistert op een poort; het clienttabblad maakt er verbinding mee en schrijft één bericht.
uses
Classes, SysUtils,
sgcWebSocket, sgcWebSocket_Classes;
procedure TfrmServerChat.btnStartClick(Sender: TObject);
begin
WSServer.Port := 5418;
WSServer.Active := True;
memoLog.Lines.Add('#started');
end;
procedure TfrmServerChat.WSServerConnect(Connection: TsgcWSConnection);
begin
memoLog.Lines.Add('Connected: ' + Connection.IP);
end;
procedure TfrmServerChat.WSServerDisconnect(Connection: TsgcWSConnection;
Code: Integer);
begin
memoLog.Lines.Add('Disconnected (' + IntToStr(Code) + '): ' + Connection.IP);
end;
procedure TfrmServerChat.WSServerMessage(Connection: TsgcWSConnection;
const Text: string);
begin
memoLog.Lines.Add(Text);
Connection.WriteData('echo: ' + Text);
end;
Plaats TsgcWebSocketServer op het formulier, geef het de naam WSServer en laat de IDE de vier handlers genereren vanuit de Object Inspector. Connection.IP en Connection.WriteData komen allebei uit TsgcWSConnection, en daarom staat sgcWebSocket_Classes in de uses-clausule.
uses
Classes, SysUtils,
sgcWebSocket, sgcWebSocket_Classes;
procedure TfrmClientChat.btnStartClick(Sender: TObject);
begin
WSClient.Host := 'localhost';
WSClient.Port := 5418;
WSClient.TLS := False;
WSClient.Active := True;
end;
procedure TfrmClientChat.btnSendClick(Sender: TObject);
begin
if WSClient.Active then
WSClient.WriteData('Hello from Delphi')
else
raise Exception.Create('Not connected');
end;
procedure TfrmClientChat.WSClientConnect(Connection: TsgcWSConnection);
begin
memoLog.Lines.Add('#connected');
end;
procedure TfrmClientChat.WSClientMessage(Connection: TsgcWSConnection;
const Text: string);
begin
memoLog.Lines.Add(Text);
end;
Draai eerst het serverproject en daarna dit project. #connected verschijnt in het clientlogboek en echo: Hello from Delphi komt terug op OnMessage. Die heen-en-terugreis is de hele snelstart.
program WSConsoleClient;
uses
Classes, SysUtils,
sgcWebSocket, sgcWebSocket_Classes;
type
TChatHandler = class
procedure DoConnect(Connection: TsgcWSConnection);
procedure DoMessage(Connection: TsgcWSConnection; const Text: string);
end;
procedure TChatHandler.DoConnect(Connection: TsgcWSConnection);
begin
Writeln('#connected');
end;
procedure TChatHandler.DoMessage(Connection: TsgcWSConnection;
const Text: string);
begin
Writeln('Server says: ', Text);
end;
var
oClient: TsgcWebSocketClient;
oHandler: TChatHandler;
begin
oHandler := TChatHandler.Create;
oClient := TsgcWebSocketClient.Create(nil);
try
oClient.Host := 'localhost';
oClient.Port := 5418;
oClient.WatchDog.Enabled := True;
oClient.OnConnect := oHandler.DoConnect;
oClient.OnMessage := oHandler.DoMessage;
oClient.Active := True;
oClient.WriteData('Hello from Delphi');
Readln;
finally
oClient.Free;
oHandler.Free;
end;
end.
De client draait in een eigen thread, dus een consoleprogramma moet de hoofdthread in leven houden. Daar dient de Readln voor.