diff --git a/packages/rtl/src/Rtl.WorkerCommands.pas b/packages/rtl/src/Rtl.WorkerCommands.pas index 4c8d855..b93081d 100644 --- a/packages/rtl/src/Rtl.WorkerCommands.pas +++ b/packages/rtl/src/Rtl.WorkerCommands.pas @@ -79,6 +79,7 @@ Type TCommandDispatcherClass = class of TCommandDispatcher; TCommandHandler = Reference to procedure(aCommand : TCustomWorkerCommand); + generic TTypedCommandHandler = 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(const aCommand : string; aHandler : specialize TTypedCommandHandler); // 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(const aCommand: string; aHandler: specialize TTypedCommandHandler); +begin + RegisterCommandHandler(aCommand,procedure (aCmd : TCustomWorkerCommand) + begin + aHandler(T(aCmd)); + end); +end; + procedure TCommandDispatcher.RegisterWorker(aWorker: TJSWorker; const aName: string); var lReg : TJSWorkerReg;