* Add typed command handler

This commit is contained in:
Michael Van Canneyt 2025-04-25 15:35:28 +02:00
parent 71d5bedcf0
commit 4e58143aa7

View File

@ -79,6 +79,7 @@ Type
TCommandDispatcherClass = class of TCommandDispatcher;
TCommandHandler = Reference to procedure(aCommand : TCustomWorkerCommand);
generic TTypedCommandHandler<T : TCustomWorkerCommand> = Reference to procedure(aCommand : T);
TCommandHandlerArray = array of TCommandHandler;
{ TCommandDispatcher }
@ -124,6 +125,8 @@ Type
Procedure RegisterCommandHandler(const aCommand : string; aHandler : TCommandHandler);
// Remove the given command handler for command aCommand
Procedure UnRegisterCommandHandler(const aCommand : string; aHandler : TCommandHandler);
// Register a command handler for command aCommand
Generic Procedure AddCommandHandler<T : TCustomWorkerCommand>(const aCommand : string; aHandler : specialize TTypedCommandHandler<T>);
// Register a worker for broadcast
Procedure RegisterWorker(aWorker : TJSWorker; const aName : string);
// Remove a worker from broadcast list
@ -386,6 +389,14 @@ begin
end;
end;
generic procedure TCommandDispatcher.AddCommandHandler<T>(const aCommand: string; aHandler: specialize TTypedCommandHandler<T>);
begin
RegisterCommandHandler(aCommand,procedure (aCmd : TCustomWorkerCommand)
begin
aHandler(T(aCmd));
end);
end;
procedure TCommandDispatcher.RegisterWorker(aWorker: TJSWorker; const aName: string);
var
lReg : TJSWorkerReg;