mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-07-26 02:26:57 +02:00
106 lines
2.7 KiB
ObjectPascal
106 lines
2.7 KiB
ObjectPascal
program testipc_server;
|
|
|
|
{$MODE ObjFPC}
|
|
{$H+}
|
|
|
|
uses
|
|
Classes, SysUtils, AdvancedIPC;
|
|
|
|
const
|
|
STRINGMESSAGE_WANTS_RESPONSE = 3;
|
|
STRINGMESSAGE_NO_RESPONSE = 2;
|
|
MESSAGE_STOP = 4;
|
|
|
|
var
|
|
xServer: TIPCServer;
|
|
xStream, xResponseStream: TStringStream;
|
|
xMsgID: Integer;
|
|
xMsgType: TMessageType;
|
|
xNotRunningMessagesCount: Integer;
|
|
begin
|
|
xServer := nil;
|
|
xStream := nil;
|
|
xResponseStream := nil;
|
|
try
|
|
xStream := TStringStream.Create('');
|
|
xResponseStream := TStringStream.Create('OK');
|
|
|
|
//first get all messages from the hello server
|
|
xServer := TIPCServer.Create(nil);
|
|
xServer.ServerID := 'hello';
|
|
xServer.StartServer;
|
|
|
|
WriteLn('Server ', xServer.ServerID, ' started.');
|
|
WriteLn('-----');
|
|
|
|
while True do
|
|
begin
|
|
if xServer.PeekRequest(xMsgID{%H-}, xMsgType{%H-}) then
|
|
begin
|
|
case xMsgType of
|
|
STRINGMESSAGE_WANTS_RESPONSE, STRINGMESSAGE_NO_RESPONSE:
|
|
begin
|
|
xServer.ReadRequest(xMsgID, xStream);
|
|
WriteLn('Received string message:');
|
|
WriteLn(xStream.DataString);
|
|
if xMsgType = STRINGMESSAGE_WANTS_RESPONSE then
|
|
begin
|
|
xResponseStream.Position := 0;
|
|
xServer.PostResponse(xMsgID, STRINGMESSAGE_NO_RESPONSE, xResponseStream);
|
|
WriteLn('Posting response.');
|
|
end;
|
|
WriteLn('-----');
|
|
end;
|
|
MESSAGE_STOP:
|
|
begin
|
|
WriteLn('Stopping '+xServer.ServerID+' server.');
|
|
WriteLn('-----');
|
|
Break;
|
|
end;
|
|
end;
|
|
end else
|
|
Sleep(50);
|
|
end;
|
|
|
|
FreeAndNil(xServer);
|
|
|
|
//now try to get all unhandled messages from the not_running server
|
|
//please see that the messages are not peeked in the order they have been posted (this is correct/designed behavior).
|
|
xServer := TIPCServer.Create(nil);
|
|
xServer.ServerID := 'not_running';
|
|
xServer.StartServer(False);
|
|
|
|
WriteLn('');
|
|
WriteLn('Server ', xServer.ServerID, ' started.');
|
|
WriteLn('-----');
|
|
|
|
xNotRunningMessagesCount := 0;
|
|
while xServer.PeekRequest(xStream, xMsgID, xMsgType) do
|
|
begin
|
|
if xMsgType = STRINGMESSAGE_NO_RESPONSE then
|
|
begin
|
|
WriteLn('Received message: ', xStream.DataString);
|
|
Inc(xNotRunningMessagesCount);
|
|
end else
|
|
WriteLn('ERROR: Wrong message type: ', xMsgType);
|
|
|
|
WriteLn('-----');
|
|
end;
|
|
|
|
if xNotRunningMessagesCount <> 10 then
|
|
begin
|
|
WriteLn('ERROR: Wrong message count: ', xNotRunningMessagesCount);
|
|
WriteLn('-----');
|
|
end;
|
|
|
|
WriteLn('Stopping '+xServer.ServerID+' server.');
|
|
WriteLn('-----');
|
|
FreeAndNil(xServer);
|
|
finally
|
|
xServer.Free;
|
|
xStream.Free;
|
|
xResponseStream.Free;
|
|
end;
|
|
end.
|
|
|