namespace WatsonTcp { using System; /// /// Watson TCP client events. /// public class WatsonTcpClientEvents { #region Public-Members /// /// Event fired when authentication has succeeded. /// public event EventHandler AuthenticationSucceeded; /// /// Event fired when authentication has failed. /// public event EventHandler AuthenticationFailure; /// /// 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. /// If MessageReceived is set, StreamReceived will not be used. /// public event EventHandler MessageReceived; /// /// 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. /// If MessageReceived is set, StreamReceived will not be used. /// public event EventHandler StreamReceived; /// /// Event fired when the client successfully connects to the server. /// The IP:port of the server is passed in the arguments. /// public event EventHandler ServerConnected; /// /// Event fired when the client disconnects from the server. /// The IP:port of the server is passed in the arguments. /// public event EventHandler ServerDisconnected; /// /// This event is fired when an exception is encountered. /// public event EventHandler ExceptionEncountered; #endregion #region Internal-Members internal bool IsUsingMessages { get { if (MessageReceived != null && MessageReceived.GetInvocationList().Length > 0) return true; return false; } } internal bool IsUsingStreams { get { if (StreamReceived != null && StreamReceived.GetInvocationList().Length > 0) return true; return false; } } #endregion #region Private-Members #endregion #region Constructors-and-Factories /// /// Instantiate. /// public WatsonTcpClientEvents() { } #endregion #region Public-Methods #endregion #region Internal-Methods internal void HandleAuthenticationSucceeded(object sender, EventArgs args) { WrappedEventHandler(() => AuthenticationSucceeded?.Invoke(sender, args), "ServerConnected", sender); } internal void HandleAuthenticationFailure(object sender, EventArgs args) { WrappedEventHandler(() => AuthenticationFailure?.Invoke(sender, args), "AuthenticationFailure", sender); } internal void HandleMessageReceived(object sender, MessageReceivedEventArgs args) { WrappedEventHandler(() => MessageReceived?.Invoke(sender, args), "MessageReceived", sender); } internal void HandleStreamReceived(object sender, StreamReceivedEventArgs args) { WrappedEventHandler(() => StreamReceived?.Invoke(sender, args), "StreamReceived", sender); } internal void HandleServerConnected(object sender, ConnectionEventArgs args) { WrappedEventHandler(() => ServerConnected?.Invoke(sender, args), "ServerConnected", sender); } internal void HandleServerDisconnected(object sender, DisconnectionEventArgs args) { WrappedEventHandler(() => ServerDisconnected?.Invoke(sender, args), "ServerDisconnected", sender); } internal void HandleExceptionEncountered(object sender, ExceptionEventArgs args) { WrappedEventHandler(() => ExceptionEncountered?.Invoke(sender, args), "ExceptionEncountered", sender); } #endregion #region Private-Methods internal void WrappedEventHandler(Action action, string handler, object sender) { if (action == null) return; try { action.Invoke(); } catch (Exception e) { Action logger = ((WatsonTcpClient)sender).Settings?.Logger; logger?.Invoke(Severity.Error, "Event handler exception in " + handler + ": " + Environment.NewLine + e.ToString()); } } #endregion } }