RPCClientPipeTransport.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using H.Pipes;
  2. using InABox.Core;
  3. namespace InABox.IPC
  4. {
  5. public class RPCClientPipeTransport : RPCClientTransport, IDisposable
  6. {
  7. private PipeClient<RPCMessage> Client;
  8. public RPCClientPipeTransport(string name)
  9. {
  10. Client = new PipeClient<RPCMessage>(name);
  11. Client.Connected += Client_Connected;
  12. Client.Disconnected += Client_Disconnected;
  13. Client.MessageReceived += Client_MessageReceived;
  14. Client.ExceptionOccurred += Client_ExceptionOccurred;
  15. }
  16. public override void Connect()
  17. {
  18. Client.ConnectAsync();
  19. }
  20. public override void Disconnect()
  21. {
  22. Client.DisconnectAsync();
  23. }
  24. public override void Send(RPCMessage message)
  25. {
  26. Client.WriteAsync(message);
  27. }
  28. private void Client_Connected(object? sender, H.Pipes.Args.ConnectionEventArgs<RPCMessage> e)
  29. {
  30. DoOpen();
  31. }
  32. private void Client_Disconnected(object? sender, H.Pipes.Args.ConnectionEventArgs<RPCMessage> e)
  33. {
  34. DoClose(RPCTransportCloseEventType.Closed);
  35. }
  36. private void Client_ExceptionOccurred(object? sender, H.Pipes.Args.ExceptionEventArgs e)
  37. {
  38. Logger.Send(LogType.Error, "", $"Exception occured: {e.Exception.Message}");
  39. }
  40. private void Client_MessageReceived(object? sender, H.Pipes.Args.ConnectionMessageEventArgs<RPCMessage?> e)
  41. {
  42. Accept(e.Message);
  43. }
  44. public void Dispose()
  45. {
  46. Client.DisposeAsync().AsTask().Wait();
  47. }
  48. ~RPCClientPipeTransport()
  49. {
  50. Dispose();
  51. }
  52. }
  53. }