Ejemplo n.º 1
0
 /// <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());
 }
Ejemplo n.º 2
0
        /// <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);
            }
        }
Ejemplo n.º 3
0
        /// <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);
                }
            }
        }
Ejemplo n.º 4
0
 private void OnClientMessageReceived(T message)
 {
     m_Log.Debug($"** Event: {message}");
     ClientMessageReceived?.Invoke(message);
 }
Ejemplo n.º 5
0
 protected virtual void MessageReceivedEvent(MessageEventArgs e)
 {
     ClientMessageReceived?.Invoke(this, e);
 }
Ejemplo n.º 6
0
        /////////////////////////////////////////////////////////////////////
        ///  Event Handlers
        /////////////////////////////////////////////////////////////////////

        public virtual void OnClientMessageReceived(MessageReceivedEventArgs e)
        {
            ClientMessageReceived?.Invoke(this, e);
        }
Ejemplo n.º 7
0
 public void RegisterClientEvents(ClientStartedDelegate onStarted, ClientStoppedDelegate onStopped, ClientMessageReceived onMessage)
 {
     OnStart   = onStarted;
     OnStop    = onStopped;
     OnMessage = onMessage;
 }