LogikalListener.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using System;
  2. using H.Formatters;
  3. using H.Pipes;
  4. using InABox.Logikal;
  5. namespace PRSLogikal
  6. {
  7. public class LogikalListener : IDisposable
  8. {
  9. private PipeServer<LogikalMessage> _server;
  10. public LogikalServer Server { get; set; }
  11. public event LogikalLogEvent Log;
  12. public LogikalListener()
  13. {
  14. _server = new PipeServer<LogikalMessage>("$logikal", formatter: new NewtonsoftJsonFormatter());
  15. _server.ClientConnected += async (o, args) =>
  16. {
  17. Log?.Invoke(this, new LogikalLogArguments($@"Client {args.Connection.PipeName} is now connected!"));
  18. };
  19. _server.ClientDisconnected += (o, args) =>
  20. {
  21. Log?.Invoke(this, new LogikalLogArguments($@"Client {args.Connection.PipeName} disconnected"));
  22. };
  23. _server.MessageReceived += (sender, args) =>
  24. {
  25. Log?.Invoke(this, new LogikalLogArguments($@"Client {args.Connection.PipeName} says: {args.Message.Method}: {args.Message.Payload}"));
  26. var _request = LogikalRequest.FromMessage(args.Message);
  27. if (_request is LogikalConnectRequest _connectrequest)
  28. Connect(_connectrequest);
  29. if (_request is LogikalLoginRequest _loginrequest)
  30. Login(_loginrequest);
  31. if (_request is LogikalLogoutRequest _logoutrequest)
  32. Logout(_logoutrequest);
  33. if (_request is LogikalDisconnectRequest _disconnectrequest)
  34. Disconnect(_disconnectrequest);
  35. };
  36. _server.ExceptionOccurred += (sender, args) =>
  37. {
  38. Log?.Invoke(this, new LogikalLogArguments($@"Exception: {args.Exception.Message}"));
  39. };
  40. }
  41. public void Start() => _server.StartAsync();
  42. public void Stop() => _server.StopAsync();
  43. private void Connect(LogikalConnectRequest request)
  44. {
  45. var _response = new LogikalConnectResponse()
  46. {
  47. Status = Server.Connect(request.Path)
  48. };
  49. _server.WriteAsync(_response.ToMessage());
  50. }
  51. private void Disconnect(LogikalDisconnectRequest request)
  52. {
  53. var _response = new LogikalDisconnectResponse()
  54. {
  55. Status = Server.Logout()
  56. };
  57. _server.WriteAsync(_response.ToMessage());
  58. }
  59. private void Login(LogikalLoginRequest request)
  60. {
  61. var _response = new LogikalLoginResponse()
  62. {
  63. Status = Server.Login(request.UserID, request.Password)
  64. };
  65. _server.WriteAsync(_response.ToMessage());
  66. }
  67. private void Logout(LogikalLogoutRequest request)
  68. {
  69. var _response = new LogikalLogoutResponse()
  70. {
  71. Status = Server.Logout()
  72. };
  73. _server.WriteAsync(_response.ToMessage());
  74. }
  75. public void Dispose()
  76. {
  77. if (_server != null)
  78. _ = _server.DisposeAsync().AsTask();
  79. }
  80. }
  81. }