/// <summary> /// Begins reading from the socket /// </summary> /// <param name="clientMessageReceived"></param> /// <param name="clientStopped"></param> public void Start(ClientStartedDelegate clientStarted, ClientMessageReceived clientMessageReceived, ClientStoppedDelegate clientStopped) { ClientStarted = clientStarted; ClientMessageReceived = clientMessageReceived; ClientStopped = clientStopped; Running = true; ThreadPool.QueueUserWorkItem(o => DoReadState()); }
/// <summary> /// Handles incoming messages from local sessions. /// </summary> /// <param name="sender">Local session.</param> /// <param name="e">Formal junk.</param> private void Session_MessageReceived(object sender, EventArgs e) { var session = sender as ActiveSession <T>; if (session.Message == null || (object)session.Message is X690.Message m && m.IsEndSession) { session.Remotes[0].Close(); return; } ClientMessageReceived?.Invoke(sender, new MessageEventArgs <T>(session, session.Message)); ClientBeforeSend?.Invoke(session, new BroadcastMessageArgs <T>(session.Message, 0)); if (session.Remotes[0].IsConnected) { session.Remotes[0].Send(session.Message); } }
/// <summary> /// Handles incoming messages from local sessions. /// </summary> /// <param name="sender">Local session.</param> /// <param name="e">Formal junk.</param> private void Session_MessageReceived(object sender, EventArgs e) { var session = sender as ActiveSession <T>; if (session.Message == null || ((object)session.Message is X690.Message m && m.IsEndSession)) // disconnect requested { foreach (var remote in session.Remotes) { remote.Close(); } return; } ClientMessageReceived?.Invoke(session, new MessageEventArgs <T>(session.Message)); if (session.IsBroadcast) { foreach (var remote in session.Route == 0 ? session.Remotes : session.Remotes.Reverse()) { var toRemoteMessageArgs = new BroadcastMessageArgs <T>(session.Message, remote.Index); ClientBeforeSend?.Invoke(session, toRemoteMessageArgs); if (toRemoteMessageArgs.Message != null) { remote.Send(toRemoteMessageArgs.Message); } } //if (session.Route == 1) // for (int i = 0, n = session.Remotes.Length; i < n; i++) { // var toRemoteMessageArgs = new BroadcastMessageArgs<T>(session.Message, session.Remotes[i].Index); // ClientBeforeSend?.Invoke(session, toRemoteMessageArgs); // if (toRemoteMessageArgs.Message != null) session.Remotes[i].Send(toRemoteMessageArgs.Message); // } //else // for (int i = session.Remotes.Length - 1; i >= 0; i--) { // var toRemoteMessageArgs = new BroadcastMessageArgs<T>(session.Message, session.Remotes[i].Index); // ClientBeforeSend?.Invoke(session, toRemoteMessageArgs); // if (toRemoteMessageArgs.Message != null) session.Remotes[i].Send(toRemoteMessageArgs.Message); // } } else { var toRemoteMessageArgs = new BroadcastMessageArgs <T>(session.Message, session.Route); ClientBeforeSend?.Invoke(session, toRemoteMessageArgs); if (toRemoteMessageArgs.Message != null) { session.Remotes[session.Route].Send(toRemoteMessageArgs.Message); } } }
private void OnClientMessageReceived(T message) { m_Log.Debug($"** Event: {message}"); ClientMessageReceived?.Invoke(message); }
protected virtual void MessageReceivedEvent(MessageEventArgs e) { ClientMessageReceived?.Invoke(this, e); }
///////////////////////////////////////////////////////////////////// /// Event Handlers ///////////////////////////////////////////////////////////////////// public virtual void OnClientMessageReceived(MessageReceivedEventArgs e) { ClientMessageReceived?.Invoke(this, e); }
public void RegisterClientEvents(ClientStartedDelegate onStarted, ClientStoppedDelegate onStopped, ClientMessageReceived onMessage) { OnStart = onStarted; OnStop = onStopped; OnMessage = onMessage; }