|
@@ -0,0 +1,97 @@
|
|
|
|
+program testipc_client;
|
|
|
|
+
|
|
|
|
+{$MODE ObjFPC}
|
|
|
|
+{$H+}
|
|
|
|
+
|
|
|
|
+uses
|
|
|
|
+ Classes, SysUtils, AdvancedIPC;
|
|
|
|
+
|
|
|
|
+const
|
|
|
|
+ STRINGMESSAGE_WANTS_RESPONSE = 3;
|
|
|
|
+ STRINGMESSAGE_NO_RESPONSE = 2;
|
|
|
|
+ MESSAGE_STOP = 4;
|
|
|
|
+
|
|
|
|
+var
|
|
|
|
+ xClient, xClientNotRunning: TIPCClient;
|
|
|
|
+ xStream, xResponseStream: TStringStream;
|
|
|
|
+ xRequestID: Integer;
|
|
|
|
+ xMsgType: TMessageType;
|
|
|
|
+ I: Integer;
|
|
|
|
+begin
|
|
|
|
+ xClient := nil;
|
|
|
|
+ xClientNotRunning := nil;
|
|
|
|
+ xStream := nil;
|
|
|
|
+ xResponseStream := nil;
|
|
|
|
+ try
|
|
|
|
+ xResponseStream := TStringStream.Create('OK');
|
|
|
|
+
|
|
|
|
+ //check connection to to the "hello" server (that has to run)
|
|
|
|
+
|
|
|
|
+ xClient := TIPCClient.Create(nil);
|
|
|
|
+ xClient.ServerID := 'hello';
|
|
|
|
+
|
|
|
|
+ if not xClient.ServerRunning then
|
|
|
|
+ begin
|
|
|
|
+ Writeln('ERROR: Server '+xClient.ServerID+' is not running.');
|
|
|
|
+ Writeln('Closing');
|
|
|
|
+ Exit;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ //first send some messages to server that is not running
|
|
|
|
+ xClientNotRunning := TIPCClient.Create(nil);
|
|
|
|
+ xClientNotRunning.ServerID := 'not_running';
|
|
|
|
+
|
|
|
|
+ if xClientNotRunning.ServerRunning then
|
|
|
|
+ begin
|
|
|
|
+ Writeln('ERROR: Server '+xClientNotRunning.ServerID+' is running. This test needs that the server doesn''t run.');
|
|
|
|
+ Writeln('Closing');
|
|
|
|
+ Exit;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ for I := 1 to 10 do
|
|
|
|
+ begin
|
|
|
|
+ FreeAndNil(xStream);
|
|
|
|
+ xStream := TStringStream.Create('Message '+IntToStr(I));
|
|
|
|
+ xStream.Position := 0;
|
|
|
|
+ xClientNotRunning.PostRequest(STRINGMESSAGE_NO_RESPONSE, xStream);
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ FreeAndNil(xClientNotRunning);
|
|
|
|
+
|
|
|
|
+ //now send messages to the "hello" server
|
|
|
|
+ FreeAndNil(xStream);
|
|
|
|
+ xStream := TStringStream.Create('I want some response.');
|
|
|
|
+ xStream.Position := 0;
|
|
|
|
+ if xClient.SendRequest(STRINGMESSAGE_WANTS_RESPONSE, xStream, 100, xRequestID) and
|
|
|
|
+ xClient.PeekResponse(xResponseStream, xMsgType, 100)
|
|
|
|
+ then
|
|
|
|
+ Writeln('Request-response test OK.')
|
|
|
|
+ else
|
|
|
|
+ Writeln('ERROR: Request-response test failed.');
|
|
|
|
+
|
|
|
|
+ FreeAndNil(xStream);
|
|
|
|
+ xStream := TStringStream.Create('I do not want any response.');
|
|
|
|
+ xStream.Position := 0;
|
|
|
|
+ if xClient.SendRequest(STRINGMESSAGE_NO_RESPONSE, xStream, 100, xRequestID) then
|
|
|
|
+ begin
|
|
|
|
+ if xClient.PeekResponse(xResponseStream, xMsgType, 100) then
|
|
|
|
+ Writeln('ERROR: I received a response even that I didn''t want any. What happened?')
|
|
|
|
+ else
|
|
|
|
+ Writeln('Request test OK.');
|
|
|
|
+ end else
|
|
|
|
+ Writeln('ERROR: Request test failed.');
|
|
|
|
+
|
|
|
|
+ if xClient.SendRequest(MESSAGE_STOP, nil, 100) and
|
|
|
|
+ not xClient.ServerRunning
|
|
|
|
+ then
|
|
|
|
+ Writeln('Server was sucessfully stopped.')
|
|
|
|
+ else
|
|
|
|
+ Writeln('ERROR: I could not stop the server.')
|
|
|
|
+ finally
|
|
|
|
+ xClient.Free;
|
|
|
|
+ xClientNotRunning.Free;
|
|
|
|
+ xStream.Free;
|
|
|
|
+ xResponseStream.Free;
|
|
|
|
+ end;
|
|
|
|
+end.
|
|
|
|
+
|