QuickStart
A server and a client, in about twenty lines
Start the server, start the client, send a string. The server tab listens on a port; the client tab connects to it and writes one message.
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;
Drop TsgcWebSocketServer on the form, name it WSServer, and let the IDE generate the four handlers from the Object Inspector. Connection.IP and Connection.WriteData both come from TsgcWSConnection, which is why sgcWebSocket_Classes is in the uses clause.
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;
Run the server project first, then this one. #connected appears in the client log and echo: Hello from Delphi comes back on OnMessage. That round trip is the whole quick start.
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.
The client runs its own thread, so a console program has to keep the main thread alive. That is what the Readln is for.