testipc_client.pp 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. program testipc_client;
  2. {$MODE ObjFPC}
  3. {$H+}
  4. uses
  5. Classes, SysUtils, AdvancedIPC;
  6. const
  7. STRINGMESSAGE_WANTS_RESPONSE = 3;
  8. STRINGMESSAGE_NO_RESPONSE = 2;
  9. MESSAGE_STOP = 4;
  10. var
  11. xClient, xClientNotRunning: TIPCClient;
  12. xStream, xResponseStream: TStringStream;
  13. xRequestID: Integer;
  14. xMsgType: TMessageType;
  15. I: Integer;
  16. begin
  17. xClient := nil;
  18. xClientNotRunning := nil;
  19. xStream := nil;
  20. xResponseStream := nil;
  21. try
  22. xResponseStream := TStringStream.Create('OK');
  23. //check connection to to the "hello" server (that has to run)
  24. xClient := TIPCClient.Create(nil);
  25. xClient.ServerID := 'hello';
  26. if not xClient.ServerRunning then
  27. begin
  28. Writeln('ERROR: Server '+xClient.ServerID+' is not running.');
  29. Writeln('Closing');
  30. Exit;
  31. end;
  32. //first send some messages to server that is not running
  33. xClientNotRunning := TIPCClient.Create(nil);
  34. xClientNotRunning.ServerID := 'not_running';
  35. if xClientNotRunning.ServerRunning then
  36. begin
  37. Writeln('ERROR: Server '+xClientNotRunning.ServerID+' is running. This test needs that the server doesn''t run.');
  38. Writeln('Closing');
  39. Exit;
  40. end;
  41. for I := 1 to 10 do
  42. begin
  43. FreeAndNil(xStream);
  44. xStream := TStringStream.Create('Message '+IntToStr(I));
  45. xStream.Position := 0;
  46. xClientNotRunning.PostRequest(STRINGMESSAGE_NO_RESPONSE, xStream);
  47. end;
  48. FreeAndNil(xClientNotRunning);
  49. //now send messages to the "hello" server
  50. FreeAndNil(xStream);
  51. xStream := TStringStream.Create('I want some response.');
  52. xStream.Position := 0;
  53. if xClient.SendRequest(STRINGMESSAGE_WANTS_RESPONSE, xStream, 100, xRequestID) and
  54. xClient.PeekResponse(xResponseStream, xMsgType, 100)
  55. then
  56. Writeln('Request-response test OK.')
  57. else
  58. Writeln('ERROR: Request-response test failed.');
  59. FreeAndNil(xStream);
  60. xStream := TStringStream.Create('I do not want any response.');
  61. xStream.Position := 0;
  62. if xClient.SendRequest(STRINGMESSAGE_NO_RESPONSE, xStream, 100, xRequestID) then
  63. begin
  64. if xClient.PeekResponse(xResponseStream, xMsgType, 100) then
  65. Writeln('ERROR: I received a response even that I didn''t want any. What happened?')
  66. else
  67. Writeln('Request test OK.');
  68. end else
  69. Writeln('ERROR: Request test failed.');
  70. if xClient.SendRequest(MESSAGE_STOP, nil, 100) and
  71. not xClient.ServerRunning
  72. then
  73. Writeln('Server was sucessfully stopped.')
  74. else
  75. Writeln('ERROR: I could not stop the server.')
  76. finally
  77. xClient.Free;
  78. xClientNotRunning.Free;
  79. xStream.Free;
  80. xResponseStream.Free;
  81. end;
  82. end.