예제 #1
0
파일: Host.cs 프로젝트: bumac/VKRLib
        private void ProcessHandlerList(IList <Message> messages, Connection.Connection connection)
        {
            if (connection == null)
            {
                throw new ArgumentNullException(nameof(connection));
            }
            IList <ReceiveHandler> handlers = null;

            if (messages.Count == 0)
            {
                return;
            }
            var msg = messages[0];

            lock (_receiveHandlers)
            {
                if (_receiveHandlers.ContainsKey(msg.Header.Type))
                {
                    handlers = _receiveHandlers[msg.Header.Type];
                }
            }
            if (handlers == null)
            {
                return;
            }
            connection = _connectionManager[msg.Header.ConnectionToken];
            foreach (var h in handlers)
            {
                foreach (var m in messages)
                {
                    try
                    {
                        InvokeHandler(h, m, connection);
                    }
                    catch (Exception ex)
                    {
                        OnException.Invoke(ex);
                    }
                }
            }
            connection.UpdateActivity();
        }
예제 #2
0
파일: Host.cs 프로젝트: tuita520/GServer
        private void ProcessHandler(Message msg, Connection.Connection connection)
        {
            connection.InvokeIfBinded(msg);
            IList <ReceiveHandler> handlers = null;

            lock (_receiveHandlers) {
                if (_receiveHandlers.ContainsKey(msg.Header.Type))
                {
                    handlers = _receiveHandlers[msg.Header.Type];
                }
            }
            if (handlers == null)
            {
                return;
            }
            foreach (var h in handlers)
            {
                InvokeHandler(h, msg, connection);
            }
            connection.UpdateActivity();
        }