wsserver.lpr 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. program wsserver;
  2. uses
  3. {$ifdef unix} cthreads, cwstring, {$endif}
  4. custapp, sysutils, jsonparser, fpjson, syncobjs, classes,
  5. fpwebsocket, fpwebsocketclient, fpwebsocketserver, fpcustwsserver, wschat;
  6. Type
  7. { TWSApp }
  8. TWSApp = class(TCustomApplication)
  9. private
  10. FSrv : TWebSocketServer;
  11. FChat : TWebsocketChat;
  12. procedure DoChatLog(Sender: TObject; const Msg: String);
  13. Public
  14. constructor create(aOwner : TComponent); override;
  15. destructor destroy; override;
  16. procedure DoRun; override;
  17. end;
  18. { TWSApp }
  19. procedure TWSApp.DoChatLog(Sender: TObject; const Msg: String);
  20. begin
  21. Writeln(Msg);
  22. end;
  23. constructor TWSApp.create(aOwner: TComponent);
  24. begin
  25. inherited create(aOwner);
  26. FSrv:=TWebSocketServer.Create(Self);
  27. FChat:=TWebsocketChat.Create(Self);
  28. FChat.WebsocketServer:=FSrv;
  29. FChat.OnLog:=@DoChatLog;
  30. // Must do this here, because the events are protected
  31. FSrv.OnMessageReceived:[email protected];
  32. FSrv.OnControlReceived:[email protected];
  33. FSrv.OnDisconnect:[email protected];
  34. end;
  35. destructor TWSApp.destroy;
  36. begin
  37. FreeAndNil(FChat);
  38. FreeAndNil(FSrv);
  39. inherited destroy;
  40. end;
  41. procedure TWSApp.DoRun;
  42. begin
  43. CheckOptions('p:t:ahw:i:m:',['port:','threadmode','accept-threaded','wait:','idle:','mask:']);
  44. case GetOptionValue('t','threadmode') of
  45. 'pool' : FSrv.ThreadMode:=wtmThreadPool;
  46. 'thread' : FSrv.ThreadMode:=wtmThread;
  47. 'none' : FSrv.ThreadMode:=wtmNone;
  48. else
  49. FSrv.ThreadMode:=wtmThread;
  50. end;
  51. // Will not return till stopped.
  52. FSrv.ThreadedAccept:=HasOption('a','accept-threaded');
  53. if HasOption('w','wait') then
  54. FSrv.MessageWaitTime:=StrToIntDef(GetOptionValue('w','wait'),DefaultWaitTime);
  55. if HasOption('i','idle') then
  56. FSrv.AcceptIdleTimeout:=StrToIntDef(GetOptionValue('i','idle'),DefaultAcceptTimeout);
  57. FSrv.Active:=True;
  58. FSrv.OutgoingFrameMask:=StrToIntDef(GetOptionValue('m','mask'),0);
  59. if Not FSrv.ThreadedAccept then
  60. Terminate
  61. else
  62. While Not Terminated do
  63. Sleep(10);
  64. end;
  65. begin
  66. With TWSApp.Create(Nil) do
  67. try
  68. Initialize;
  69. Run;
  70. finally
  71. Free;
  72. end;
  73. end.