示例#1
0
        string Query <T>(string name, object content, IJsonExecutor executor)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException("name");
            }

            int token = m_Random.Next(1000, 9999);

            RegisterExecutor <T>(name, token.ToString(), executor);

            if (content != null)
            {
                if (!content.GetType().IsPrimitive)
                {
                    m_WebSocket.Send(string.Format(m_QueryTemplateA, name, token, SerializeObject(content)));
                }
                else
                {
                    m_WebSocket.Send(string.Format(m_QueryTemplateA, name, token, content));
                }
            }
            else
            {
                m_WebSocket.Send(string.Format(m_QueryTemplateB, name, token));
            }

            return(token.ToString());
        }
示例#2
0
        private string Query <T> (string name, object content, IJsonExecutor executor)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException(nameof(name));
            }
            int num = JsonWebSocket.m_Random.Next(1000, 9999);

            this.RegisterExecutor <T> (name, num.ToString(), executor);
            if (content != null)
            {
                if (!content.GetType().IsSimpleType())
                {
                    this.m_WebSocket.Send(string.Format("{0}-{1} {2}", (object)name, (object)num,
                                                        (object)this.SerializeObject(content)));
                }
                else
                {
                    this.m_WebSocket.Send(string.Format("{0}-{1} {2}", (object)name, (object)num, content));
                }
            }
            else
            {
                this.m_WebSocket.Send(string.Format("{0}-{1}", (object)name, (object)num));
            }

            return(num.ToString());
        }
示例#3
0
        private void m_WebSocket_MessageReceived(object sender, MessageReceivedEventArgs e)
        {
            if (string.IsNullOrEmpty(e.Message))
            {
                return;
            }
            int    length1 = e.Message.IndexOf(' ');
            string token   = string.Empty;
            string name;
            string json;

            if (length1 > 0)
            {
                name = e.Message.Substring(0, length1);
                json = e.Message.Substring(length1 + 1);
                int length2 = name.IndexOf('-');
                if (length2 > 0)
                {
                    token = name.Substring(length2 + 1);
                    name  = name.Substring(0, length2);
                }
            }
            else
            {
                name = e.Message;
                json = string.Empty;
            }

            IJsonExecutor executor = this.GetExecutor(name, token);

            if (executor == null)
            {
                return;
            }
            object obj;

            try {
                obj = executor.Type.IsSimpleType()
          ? ((object)json.GetType() != (object)executor.Type
            ? Convert.ChangeType((object)json, executor.Type, (IFormatProvider)null)
            : (object)json)
          : this.DeserializeObject(json, executor.Type);
            }
            catch (Exception ex) {
                this.m_WebSocket_Error((object)this, new ErrorEventArgs(new Exception("DeserializeObject exception", ex)));
                return;
            }

            try {
                executor.Execute(this, token, obj);
            }
            catch (Exception ex) {
                this.m_WebSocket_Error((object)this, new ErrorEventArgs(new Exception("Message handling exception", ex)));
            }
        }
示例#4
0
 private void RegisterExecutor <T> (string name, string token, IJsonExecutor executor)
 {
     lock (this.m_ExecutorDict) {
         if (string.IsNullOrEmpty(token))
         {
             this.m_ExecutorDict.Add(name, executor);
         }
         else
         {
             this.m_ExecutorDict.Add(string.Format("{0}-{1}", (object)name, (object)token), executor);
         }
     }
 }
示例#5
0
 void RegisterExecutor <T>(string name, string token, IJsonExecutor executor)
 {
     lock (m_ExecutorDict)
     {
         if (string.IsNullOrEmpty(token))
         {
             m_ExecutorDict.Add(name, executor);
         }
         else
         {
             m_ExecutorDict.Add(string.Format(m_QueryKeyTokenTemplate, name, token), executor);
         }
     }
 }
示例#6
0
        void m_WebSocket_MessageReceived(object sender, MessageReceivedEventArgs e)
        {
            if (string.IsNullOrEmpty(e.Message))
            {
                return;
            }

            int pos = e.Message.IndexOf(' ');

            string name;
            string parameter;
            string token = string.Empty;

            if (pos > 0)
            {
                name      = e.Message.Substring(0, pos);
                parameter = e.Message.Substring(pos + 1);

                pos = name.IndexOf('-');

                if (pos > 0)
                {
                    token = name.Substring(pos + 1);
                    name  = name.Substring(0, pos);
                }
            }
            else
            {
                name      = e.Message;
                parameter = string.Empty;
            }

            IJsonExecutor executor = GetExecutor(name, token);

            if (executor != null)
            {
                if (!executor.Type.IsPrimitive)
                {
                    executor.Execute(this, token, DeserializeObject(parameter, executor.Type));
                }
                else
                {
                    executor.Execute(this, token, Convert.ChangeType(parameter, executor.Type, null));
                }
            }
        }
示例#7
0
        void m_WebSocket_MessageReceived(object sender, MessageReceivedEventArgs e)
        {
            if (string.IsNullOrEmpty(e.Message))
            {
                return;
            }

            int pos = e.Message.IndexOf(' ');

            string name;
            string parameter;
            string token = string.Empty;

            if (pos > 0)
            {
                name      = e.Message.Substring(0, pos);
                parameter = e.Message.Substring(pos + 1);

                pos = name.IndexOf('-');

                if (pos > 0)
                {
                    token = name.Substring(pos + 1);
                    name  = name.Substring(0, pos);
                }
            }
            else
            {
                name      = e.Message;
                parameter = string.Empty;
            }

            IJsonExecutor executor = GetExecutor(name, token);

            if (executor == null)
            {
                return;
            }

            object value;

            try
            {
                if (!executor.Type.IsPrimitive)
                {
                    value = DeserializeObject(parameter, executor.Type);
                }
                else
                {
                    value = Convert.ChangeType(parameter, executor.Type, null);
                }
            }
            catch (Exception exc)
            {
                m_WebSocket_Error(this, new ErrorEventArgs(new Exception("DeserializeObject exception", exc)));
                return;
            }

            try
            {
                executor.Execute(this, token, value);
            }
            catch (Exception exce)
            {
                m_WebSocket_Error(this, new ErrorEventArgs(new Exception("Message handling exception", exce)));
            }
        }