public virtual void Handle(object data)
        {
            MessageSessionData sessionData = data as MessageSessionData;

            if (sessionData != null)
            {
                Session session = sessionData.Session;
                string  message = sessionData.Message;
                byte[]  bytes   = sessionData.Data;

                if (session != null && message != null && message.Length > 0)
                {
                    T msg = WebMessage.ToJsonObject <T>(message);
                    if (msg != null)
                    {
                        if (bytes == null || bytes.Length <= 0)
                        {
                            ProcessMessage(session, msg);
                        }
                        else
                        {
                            ProcessMessage(session, msg, bytes);
                        }
                    }
                }
            }
        }
示例#2
0
        protected virtual bool ProcessMessage(MessageSessionData data)
        {
            if (data == null)
            {
                return(false);
            }
            string message = data.Message;

            if (message != null && message.Length > 0)
            {
                JsonMessage msg = WebMessage.ToJsonObject <JsonMessage>(message);
                if (msg != null && msg.MessageName != null && msg.MessageName.Length > 0)
                {
                    IMessageHandler handler = GetHandler(msg.MessageName);
                    if (handler != null)
                    {
                        handler.Handle(data);
                        return(true);
                    }
                }
            }
            return(false);
        }
示例#3
0
        protected virtual MessageSessionData GetSessionData(Session session, object data)
        {
            MessageSessionData result = null;

            if (data is string)
            {
                result = new MessageSessionData(session, data as string);
            }
            else if (data is byte[])
            {
                Byte[] bytes   = data as byte[];
                int    len     = bytes.Length;
                int    last    = len - 4;
                int    bodylen = -1;
                for (int i = 0; i <= last; i++)
                {
                    if (bytes[i] == 0 && bytes[i + 1] == 0 &&
                        bytes[i + 2] == 0 && bytes[i + 3] == 0)
                    {
                        bodylen = last - i;
                        break;
                    }
                }
                if (bodylen >= 0)
                {
                    byte[] body    = new byte[bodylen];
                    string message = Encoding.UTF8.GetString(bytes, 0, len - bodylen - 4);
                    if (bodylen > 0)
                    {
                        Buffer.BlockCopy(bytes, len - bodylen - 4, body, 0, bodylen);
                    }
                    result = new MessageSessionData(session, message, body);
                }
            }
            return(result);
        }
 protected virtual bool ProcessMessage(MessageSessionData data)
 {
     if (data == null) return false;
     string message = data.Message;
     if (message != null && message.Length > 0)
     {
         JsonMessage msg = WebMessage.ToJsonObject<JsonMessage>(message);
         if (msg != null && msg.MessageName != null && msg.MessageName.Length > 0)
         {
             IMessageHandler handler = GetHandler(msg.MessageName);
             if (handler != null)
             {
                 handler.Handle(data);
                 return true;
             }
         }
     }
     return false;
 }
 protected virtual MessageSessionData GetSessionData(Session session, object data)
 {
     MessageSessionData result = null;
     if (data is string) result = new MessageSessionData(session, data as string);
     else if (data is byte[])
     {
         Byte[] bytes = data as byte[];
         int len = bytes.Length;
         int last = len - 4;
         int bodylen = -1;
         for (int i = 0; i <= last; i++)
         {
             if (bytes[i] == 0 && bytes[i + 1] == 0
                 && bytes[i + 2] == 0 && bytes[i + 3] == 0)
             {
                 bodylen = last - i;
                 break;
             }
         }
         if (bodylen >= 0)
         {
             byte[] body = new byte[bodylen];
             string message = Encoding.UTF8.GetString(bytes, 0, len - bodylen - 4);
             if (bodylen > 0) Buffer.BlockCopy(bytes, len - bodylen - 4, body, 0, bodylen);
             result = new MessageSessionData(session, message, body);
         }
     }
     return result;
 }