RPCCommand.cs 907 B

1234567891011121314151617181920212223242526272829303132
  1. using System;
  2. using InABox.Core;
  3. namespace InABox.IPC
  4. {
  5. public interface IRPCCommand<TProperties,TResult> { }
  6. public interface IRPCCommandHandler
  7. {
  8. String? Execute(object sender, String? parameters);
  9. }
  10. public abstract class RPCCommandHandler<TSender, TParameters, TResult> : IRPCCommandHandler where TSender : class
  11. {
  12. private TSender _sender;
  13. public RPCCommandHandler(TSender sender)
  14. {
  15. _sender = sender ?? throw new ArgumentNullException(nameof(sender));
  16. }
  17. public abstract TResult? Execute(TSender sender, TParameters? parameters);
  18. public String? Execute(object sender, String? parameters)
  19. {
  20. var props = Serialization.Deserialize<TParameters>(parameters);
  21. var result = Execute(_sender, props);
  22. return Serialization.Serialize(result);
  23. }
  24. }
  25. }