Esempio n. 1
0
        private void send(msg m)
        {
            if (tc.Client == null || tc.Client.Connected == false)
            {
                exit(2); return;
            }

            try
            {
                var body = Secret.MD5(Serialize.ToJson(m) + key) + Serialize.ToJson(m);
                var data = Encoding.UTF8.GetBytes(body);

                Console.WriteLine("send->" + body + "(" + data.Length + "字节)");
                Debug.WriteLine("send->" + body + "(" + data.Length + "字节)");

                var dt = new List <byte>();
                dt.AddRange(Encoding.UTF8.GetBytes("x.rbt"));
                dt.AddRange(BitConverter.GetBytes(data.Length));
                dt.AddRange(Encry.Encode(data, key));

                tc.Client.Send(dt.ToArray());
            }
            catch (Exception ex)
            {
                Console.WriteLine("send->err." + ex.Message);
                Debug.WriteLine("send->err." + ex.Message);
                exit(1);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 解析消息
        /// </summary>
        void Prase()
        {
            string str  = "";
            int    hlen = 9;

            while (stop == 0)
            {
                if (data.Count < hlen)
                {
                    Thread.Sleep(500); continue;
                }

                byte[] head = null;
                lock (data) head = data.Take(5).ToArray();
                if (Encoding.UTF8.GetString(head) != "x.rbt")
                {
                    lock (data) data.RemoveRange(0, hlen); continue;
                }

                var len = BitConverter.ToInt32(data.Skip(5).Take(4).ToArray(), 0) + 32;
                if (data.Count() < len)
                {
                    continue;
                }

                byte[] msg = null;
                lock (data) msg = data.Skip(9).Take(len).ToArray();
                lock (data) data.RemoveRange(0, len + 9);

                try
                {
                    str = Encoding.UTF8.GetString(Encry.Decode(msg, key));

                    Console.WriteLine("parse->" + str);
                    Debug.WriteLine("parse->" + str);

                    var sign = str.Substring(0, 32);
                    var json = str.Substring(32);
                    if (sign != Secret.MD5(json + key))
                    {
                        throw new Exception("签名验证失败");
                    }
                    var m = Serialize.FromJson <msg>(json);
                    switch (m.act)
                    {
                    case "heart":
                        continue;

                    case "exit":
                        exit(1);
                        break;

                    case "msg":
                        NewMsg?.Invoke(m.from, m.body, this);
                        break;
                    }
                }
                catch (Exception ex)
                {
                    if (ex.Message == "Decode Error")
                    {
                        exit(2);
                    }
                    Console.WriteLine("parse->err." + ex.Message);
                    Debug.WriteLine("parse->err." + ex.Message);
                }
            }
        }