WatsonTcpClientEvents.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. namespace WatsonTcp
  2. {
  3. using System;
  4. /// <summary>
  5. /// Watson TCP client events.
  6. /// </summary>
  7. public class WatsonTcpClientEvents
  8. {
  9. #region Public-Members
  10. /// <summary>
  11. /// Event fired when authentication has succeeded.
  12. /// </summary>
  13. public event EventHandler AuthenticationSucceeded;
  14. /// <summary>
  15. /// Event fired when authentication has failed.
  16. /// </summary>
  17. public event EventHandler AuthenticationFailure;
  18. /// <summary>
  19. /// This event is fired when a message is received from the server and it is desired that WatsonTcp pass the byte array containing the message payload.
  20. /// If MessageReceived is set, StreamReceived will not be used.
  21. /// </summary>
  22. public event EventHandler<MessageReceivedEventArgs> MessageReceived;
  23. /// <summary>
  24. /// This callback is called when a stream is received from the server and it is desired that WatsonTcp pass the stream containing the message payload to your application.
  25. /// If MessageReceived is set, StreamReceived will not be used.
  26. /// </summary>
  27. public event EventHandler<StreamReceivedEventArgs> StreamReceived;
  28. /// <summary>
  29. /// Event fired when the client successfully connects to the server.
  30. /// The IP:port of the server is passed in the arguments.
  31. /// </summary>
  32. public event EventHandler<ConnectionEventArgs> ServerConnected;
  33. /// <summary>
  34. /// Event fired when the client disconnects from the server.
  35. /// The IP:port of the server is passed in the arguments.
  36. /// </summary>
  37. public event EventHandler<DisconnectionEventArgs> ServerDisconnected;
  38. /// <summary>
  39. /// This event is fired when an exception is encountered.
  40. /// </summary>
  41. public event EventHandler<ExceptionEventArgs> ExceptionEncountered;
  42. #endregion
  43. #region Internal-Members
  44. internal bool IsUsingMessages
  45. {
  46. get
  47. {
  48. if (MessageReceived != null && MessageReceived.GetInvocationList().Length > 0) return true;
  49. return false;
  50. }
  51. }
  52. internal bool IsUsingStreams
  53. {
  54. get
  55. {
  56. if (StreamReceived != null && StreamReceived.GetInvocationList().Length > 0) return true;
  57. return false;
  58. }
  59. }
  60. #endregion
  61. #region Private-Members
  62. #endregion
  63. #region Constructors-and-Factories
  64. /// <summary>
  65. /// Instantiate.
  66. /// </summary>
  67. public WatsonTcpClientEvents()
  68. {
  69. }
  70. #endregion
  71. #region Public-Methods
  72. #endregion
  73. #region Internal-Methods
  74. internal void HandleAuthenticationSucceeded(object sender, EventArgs args)
  75. {
  76. WrappedEventHandler(() => AuthenticationSucceeded?.Invoke(sender, args), "ServerConnected", sender);
  77. }
  78. internal void HandleAuthenticationFailure(object sender, EventArgs args)
  79. {
  80. WrappedEventHandler(() => AuthenticationFailure?.Invoke(sender, args), "AuthenticationFailure", sender);
  81. }
  82. internal void HandleMessageReceived(object sender, MessageReceivedEventArgs args)
  83. {
  84. WrappedEventHandler(() => MessageReceived?.Invoke(sender, args), "MessageReceived", sender);
  85. }
  86. internal void HandleStreamReceived(object sender, StreamReceivedEventArgs args)
  87. {
  88. WrappedEventHandler(() => StreamReceived?.Invoke(sender, args), "StreamReceived", sender);
  89. }
  90. internal void HandleServerConnected(object sender, ConnectionEventArgs args)
  91. {
  92. WrappedEventHandler(() => ServerConnected?.Invoke(sender, args), "ServerConnected", sender);
  93. }
  94. internal void HandleServerDisconnected(object sender, DisconnectionEventArgs args)
  95. {
  96. WrappedEventHandler(() => ServerDisconnected?.Invoke(sender, args), "ServerDisconnected", sender);
  97. }
  98. internal void HandleExceptionEncountered(object sender, ExceptionEventArgs args)
  99. {
  100. WrappedEventHandler(() => ExceptionEncountered?.Invoke(sender, args), "ExceptionEncountered", sender);
  101. }
  102. #endregion
  103. #region Private-Methods
  104. internal void WrappedEventHandler(Action action, string handler, object sender)
  105. {
  106. if (action == null) return;
  107. try
  108. {
  109. action.Invoke();
  110. }
  111. catch (Exception e)
  112. {
  113. Action<Severity, string> logger = ((WatsonTcpClient)sender).Settings?.Logger;
  114. logger?.Invoke(Severity.Error, "Event handler exception in " + handler + ": " + Environment.NewLine + e.ToString());
  115. }
  116. }
  117. #endregion
  118. }
  119. }