syncipcclient.pp 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. program syncipcclient;
  2. {$mode objfpc}{$H+}
  3. uses
  4. {$IFDEF UNIX}
  5. cthreads,
  6. {$ENDIF}
  7. Classes, SysUtils, CustApp,
  8. simpleipc, syncipc;
  9. const
  10. TEST_SERVER_NAME = 'TestSyncIPCServer';
  11. MSG_TEST_STOP = 101;
  12. type
  13. { TTestSyncIPCClientApp }
  14. TTestSyncIPCClientApp = class(TCustomApplication)
  15. protected
  16. CommsClient: TSyncIPCClient;
  17. procedure DoRun; override;
  18. procedure btStopClick;
  19. procedure btStringClick;
  20. procedure btRectVarClick;
  21. procedure btIntClick;
  22. procedure btStreamClick;
  23. procedure btPRectClick;
  24. procedure btStopAClick;
  25. procedure btStringAClick;
  26. procedure btRectVarAClick;
  27. procedure btIntAClick;
  28. procedure btStreamAClick;
  29. procedure btPRectAClick;
  30. public
  31. constructor Create(TheOwner: TComponent); override;
  32. destructor Destroy; override;
  33. end;
  34. { TTestSyncIPCServerApp }
  35. procedure TTestSyncIPCClientApp.DoRun;
  36. var
  37. uSel:Char;
  38. begin
  39. try
  40. CommsClient :=TSyncIPCClient.Create(nil);
  41. CommsClient.ServerID:=TEST_SERVER_NAME {$ifdef UNIX} + '-' + GetEnvironmentVariable('USER'){$endif};
  42. CommsClient.Connect;
  43. if CommsClient.ServerRunning then
  44. begin
  45. repeat
  46. Writeln; Writeln('Select what to send :');
  47. Writeln(' 0 (String)');
  48. Writeln(' 1 (TRect)');
  49. Writeln(' 2 (Int)');
  50. Writeln(' 3 (Stream)');
  51. Writeln(' 4 (PRect)');
  52. Writeln(' 5 (Async String)');
  53. Writeln(' 6 (Async TRect)');
  54. Writeln(' 7 (Async Int)');
  55. Writeln(' 8 (Async Stream)');
  56. Writeln(' 9 (Async PRect)');
  57. Writeln(' x STOP(null)');
  58. Writeln(' y STOP(Async null)');
  59. Readln(uSel);
  60. Case uSel of
  61. '0': btStringClick;
  62. '1': btRectVarClick;
  63. '2': btIntClick;
  64. '3': btStreamClick;
  65. '4': btPRectClick;
  66. '5': btStringAClick;
  67. '6': btRectVarAClick;
  68. '7': btIntAClick;
  69. '8': btStreamAClick;
  70. '9': btPRectAClick;
  71. 'x': btStopClick;
  72. 'y': btStopAClick;
  73. end;
  74. until (uSel='x') or (uSel='y');
  75. CommsClient.Free;
  76. Terminate;
  77. Exit;
  78. end;
  79. except
  80. On E:Exception do begin
  81. ShowException(E);
  82. CommsClient.Free;
  83. Terminate;
  84. Exit;
  85. end;
  86. end;
  87. end;
  88. procedure TTestSyncIPCClientApp.btStopClick;
  89. Var
  90. recSize, recBuf:Longint;
  91. resType:TMessageType;
  92. begin
  93. Writeln('SendSyncMessage STOP (mtData_Null):');
  94. resType :=CommsClient.SendSyncMessage(30000, MSG_TEST_STOP, mtData_Null, recBuf, 0, recBuf, recSize);
  95. Writeln('SendSyncMessage STOP Return ('+TMessageTypeToStr(resType)+' '+IntToStr(recSize)+' bytes)');
  96. if (resType=mtData_Integer) then
  97. begin
  98. Writeln(' :'+IntToHex(recBuf));
  99. end;
  100. end;
  101. procedure TTestSyncIPCClientApp.btStringClick;
  102. Var
  103. recStr:String;
  104. resType:TMessageType;
  105. begin
  106. Writeln('SendSyncMessage 1 (mtData_String):Ciao SyncMsg1');
  107. resType :=CommsClient.SendSyncMessage(30000, 1, 'Ciao SyncMsg1', recStr);
  108. Writeln('SendSyncMessage 1 Return ('+TMessageTypeToStr(resType)+'):'+recStr);
  109. end;
  110. procedure TTestSyncIPCClientApp.btRectVarClick;
  111. Var
  112. recBuf:TRect;
  113. recSize:Integer;
  114. resType:TMessageType;
  115. begin
  116. recBuf.Top:=666;
  117. recBuf.Left:=999;
  118. recBuf.Bottom:=789;
  119. recBuf.Right:=456;
  120. recSize:=sizeof(TRect);
  121. Writeln('SendSyncMessage 2 (mtData_Var '+IntToStr(recSize)+' bytes):'+
  122. IntToStr(recBuf.Top)+'-'+IntToStr(recBuf.Left)+'-'+IntToStr(recBuf.Bottom)+'-'+IntToStr(recBuf.Right));
  123. resType :=CommsClient.SendSyncMessage(30000, 2, mtData_Var, recBuf, recSize, recBuf, recSize);
  124. Writeln('SendSyncMessage 2 Return ('+TMessageTypeToStr(resType)+' '+IntToStr(recSize)+' bytes)');
  125. if (resType=mtData_Var) then
  126. begin
  127. Writeln(' :'+IntToStr(recBuf.Top)+'-'+IntToStr(recBuf.Left)+'-'+IntToStr(recBuf.Bottom)+'-'+IntToStr(recBuf.Right));
  128. end;
  129. end;
  130. procedure TTestSyncIPCClientApp.btIntClick;
  131. Var
  132. recSize, recBuf, msg:Longint;
  133. resType:TMessageType;
  134. begin
  135. msg:=$1BCDEF23;
  136. Writeln('SendSyncMessage 3 (mtData_Integer):'+IntToHex(msg));
  137. resType :=CommsClient.SendSyncMessage(30000, 3, mtData_Integer, msg, 0, recBuf, recSize);
  138. Writeln('SendSyncMessage 3 Return ('+TMessageTypeToStr(resType)+' '+IntToStr(recSize)+' bytes)');
  139. if (resType=mtData_Integer) then
  140. begin
  141. Writeln(' :'+IntToHex(recBuf));
  142. end;
  143. end;
  144. procedure TTestSyncIPCClientApp.btStreamClick;
  145. Var
  146. recSize:Integer;
  147. recBuf:TMemoryStream;
  148. res:TMemoryStream=nil;
  149. resType:TMessageType;
  150. retStr:String;
  151. begin
  152. recBuf:=TMemoryStream.Create;
  153. recBuf.WriteAnsiString('SyncMessage 4 as Stream25');
  154. recSize:=recBuf.Size;
  155. Writeln('SendSyncMessage 4 (mtData_Stream '+IntToStr(recSize)+' bytes):SyncMessage 4 as Stream25');
  156. (* //Test with Result on a new Stream
  157. resType :=CommsClient.SendSyncMessage(30000, 4, mtData_Stream, recBuf, 0, res, recSize);
  158. if (resType=mtData_Stream) then
  159. begin
  160. res.Position:=0;
  161. retStr:=res.ReadAnsiString;
  162. Writeln('SendSyncMessage 4 Return ('+IntToStr(resType)+' - '+IntToStr(recSize)+'):'+retStr+' - '+IntToStr(Integer(res.Size)));
  163. end;
  164. *)
  165. //Test with Result on the same stream
  166. resType :=CommsClient.SendSyncMessage(30000, 4, mtData_Stream, recBuf, 0, recBuf, recSize);
  167. Writeln('SendSyncMessage 4 Return ('+TMessageTypeToStr(resType)+' '+IntToStr(recSize)+' bytes)');
  168. if (resType=mtData_Stream) then
  169. begin
  170. retStr:=recBuf.ReadAnsiString;
  171. retStr:=recBuf.ReadAnsiString;
  172. Writeln(' :'+retStr);
  173. end;
  174. recBuf.Free;
  175. if res<>nil then res.Free;
  176. end;
  177. procedure TTestSyncIPCClientApp.btPRectClick;
  178. Var
  179. recBuf:^TRect;
  180. recSize, msg:Integer;
  181. resType:TMessageType;
  182. begin
  183. GetMem(recBuf, SizeOf(TRect));
  184. recBuf^.Top:=666;
  185. recBuf^.Left:=999;
  186. recBuf^.Bottom:=789;
  187. recBuf^.Right:=456;
  188. recSize:=sizeof(TRect);
  189. Writeln('SendSyncMessage 5 (mtData_Pointer '+IntToStr(recSize)+' bytes):'+
  190. IntToStr(recBuf^.Top)+'-'+IntToStr(recBuf^.Left)+'-'+IntToStr(recBuf^.Bottom)+'-'+IntToStr(recBuf^.Right));
  191. resType :=CommsClient.SendSyncMessage(30000, 5, mtData_Pointer, recBuf, recSize, recBuf, recSize);
  192. Writeln('SendSyncMessage 5 Return ('+TMessageTypeToStr(resType)+' '+IntToStr(recSize)+' bytes)');
  193. if (resType=mtData_Pointer) then
  194. begin
  195. Writeln(' :'+IntToStr(recBuf^.Top)+'-'+IntToStr(recBuf^.Left)+'-'+IntToStr(recBuf^.Bottom)+'-'+IntToStr(recBuf^.Right));
  196. end;
  197. FreeMem(recBuf, recSize);
  198. end;
  199. procedure TTestSyncIPCClientApp.btStopAClick;
  200. Var
  201. recBuf:Longint;
  202. begin
  203. Writeln('SendMessage Async STOP (mtData_Null):');
  204. CommsClient.SendMessage(MSG_TEST_STOP, mtData_Null, recBuf);
  205. end;
  206. procedure TTestSyncIPCClientApp.btStringAClick;
  207. begin
  208. Writeln('SendMessage Async 1 (mtData_String):Ciao SyncMsg1');
  209. CommsClient.SendMessage(1, 'Ciao SyncMsg1');
  210. end;
  211. procedure TTestSyncIPCClientApp.btRectVarAClick;
  212. Var
  213. recBuf:TRect;
  214. recSize:Integer;
  215. begin
  216. recBuf.Top:=666;
  217. recBuf.Left:=999;
  218. recBuf.Bottom:=789;
  219. recBuf.Right:=456;
  220. recSize:=sizeof(TRect);
  221. Writeln('SendMessage Async 2 (mtData_Var '+IntToStr(recSize)+' bytes):'+
  222. IntToStr(recBuf.Top)+'-'+IntToStr(recBuf.Left)+'-'+IntToStr(recBuf.Bottom)+'-'+IntToStr(recBuf.Right));
  223. CommsClient.SendMessage(2, mtData_Var, recBuf, recSize);
  224. end;
  225. procedure TTestSyncIPCClientApp.btIntAClick;
  226. Var
  227. msg:Longint;
  228. begin
  229. msg:=$1BCDEF23;
  230. Writeln('SendMessage Async 3 (mtData_Integer):'+IntToHex(msg));
  231. CommsClient.SendMessage(3, mtData_Integer, msg);
  232. end;
  233. procedure TTestSyncIPCClientApp.btStreamAClick;
  234. Var
  235. recSize:Integer;
  236. recBuf:TMemoryStream;
  237. begin
  238. recBuf:=TMemoryStream.Create;
  239. recBuf.WriteAnsiString('SyncMessage 4 as Stream25');
  240. recSize:=recBuf.Size;
  241. Writeln('SendMessage Async 4 (mtData_Stream '+IntToStr(recSize)+' bytes):SyncMessage 4 as Stream25');
  242. CommsClient.SendMessage(4, mtData_Stream, recBuf);
  243. recBuf.Free;
  244. end;
  245. procedure TTestSyncIPCClientApp.btPRectAClick;
  246. Var
  247. recBuf:^TRect;
  248. recSize, msg:Integer;
  249. resType:TMessageType;
  250. begin
  251. GetMem(recBuf, SizeOf(TRect));
  252. recBuf^.Top:=666;
  253. recBuf^.Left:=999;
  254. recBuf^.Bottom:=789;
  255. recBuf^.Right:=456;
  256. recSize:=sizeof(TRect);
  257. Writeln('SendMessage Async 5 (mtData_Pointer '+IntToStr(recSize)+' bytes):'+
  258. IntToStr(recBuf^.Top)+'-'+IntToStr(recBuf^.Left)+'-'+IntToStr(recBuf^.Bottom)+'-'+IntToStr(recBuf^.Right));
  259. CommsClient.SendMessage(5, mtData_Pointer, recBuf, recSize);
  260. FreeMem(recBuf, recSize);
  261. end;
  262. constructor TTestSyncIPCClientApp.Create(TheOwner: TComponent);
  263. begin
  264. inherited Create(TheOwner);
  265. StopOnException:=True;
  266. end;
  267. destructor TTestSyncIPCClientApp.Destroy;
  268. begin
  269. inherited Destroy;
  270. end;
  271. var
  272. Application: TTestSyncIPCClientApp;
  273. begin
  274. Application:=TTestSyncIPCClientApp.Create(nil);
  275. Application.Title:='Test SyncIPC Client';
  276. Application.Run;
  277. Application.Free;
  278. end.