コード例 #1
0
        public static string Inspect(this IProtocolHandler message)
        {
            if (message == null)
            {
                return("null");
            }

            var    type       = message.GetType();
            string result     = type.FullName + Environment.NewLine;
            var    properties = type.GetProperties();

            foreach (var property in properties)
            {
                if (!property.IsDefined(typeof(ProtoBuf.ProtoMemberAttribute), false))
                {
                    continue;
                }

                var  specified = properties.FirstOrDefault(p => p.Name == property.Name + "Specified");
                bool?hasField  = null;
                if (specified != null)
                {
                    hasField = specified.GetValue(message, null) as bool?;
                }

                result += " " + property.Name + ": " + FormatValue(hasField, property.GetValue(message, null)) + Environment.NewLine;
            }

            return(result);
        }
コード例 #2
0
        private void RegisterHandler(IProtocolHandler handler)
        {
            var type = handler.GetType();

            foreach (var scheme in handler.Scheme)
            {
                if (!this.handlers.ContainsKey(scheme))
                {
                    this.handlers.Add(scheme.ToLower(), type);
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// Handles the message.
        /// </summary>
        /// <param name="header">The header.</param>
        /// <param name="decoder">The decoder.</param>
        /// <param name="body">The body.</param>
        protected void HandleMessage(IMessageHeader header, Decoder decoder, string body)
        {
            IProtocolHandler handler = null;

            try
            {
                _handlersLock.TryEnterReadLock(-1);

                HandlersByProtocol.TryGetValue(header.Protocol, out handler);

                if (handler == null)
                {
                    HandlersByProtocol.TryGetValue((int)v11.Protocols.Core, out handler);

                    if (handler == null) // Socket has been closed
                    {
                        Logger.Trace($"Ignoring message on closed session: {EtpExtensions.Serialize(header)}");
                        return;
                    }
                    var message = $"Protocol handler not registered for protocol { header.Protocol }.";
                    handler?.ProtocolException((int)EtpErrorCodes.UnsupportedProtocol, message, header.MessageId);

                    return;
                }

                try
                {
                    // Handle global Acknowledge request
                    if (header.IsAcknowledgeRequested())
                    {
                        handler.Acknowledge(header.MessageId);
                    }

                    if (Logger.IsVerboseEnabled())
                    {
                        Logger.Verbose($"[{SessionId}] Handling message with {handler.GetType()}; Message: {EtpExtensions.Serialize(header)}");
                    }

                    handler.HandleMessage(header, decoder, body);
                }
                catch (Exception ex)
                {
                    Logger.Debug(ex);
                    handler.ProtocolException((int)EtpErrorCodes.InvalidState, ex.Message, header.MessageId);
                }
            }
            finally
            {
                _handlersLock.ExitReadLock();
            }
        }