Пример #1
0
        /// <summary>
        /// 发送消息
        /// </summary>
        /// <param name="m"></param>
        public void Send(msg m)
        {
            m.from = "svr";
            if (tc.Client == null || tc.Client.Connected == false)
            {
                exit(1); return;
            }

            var data = new List <byte>();

            data.Add(128 | 1);
            var b2  = 0 << 7;
            var cot = Encoding.UTF8.GetBytes(m.ToString());

            if (cot.Length <= 125)
            {
                data.Add((byte)(b2 + cot.Length));
            }
            else if (cot.Length < 65535)
            {
                data.Add((byte)(b2 + 126));
                data.AddRange(BitConverter.GetBytes((ushort)cot.Length).Reverse());
            }
            else
            {
                data.Add((byte)(b2 + 127));
                data.AddRange(BitConverter.GetBytes((ulong)cot.Length).Reverse());
            }
            data.AddRange(cot);
            try
            {
                tc.Client.Send(data.ToArray());
            }
            catch
            {
                exit(1);
            }
        }
Пример #2
0
        private void Tc_NewMsg(msg m, Tcp tc)
        {
            switch (m.act)
            {
            case "setcode":
                if (m.body.Length == 36)
                {
                    new Thread(o => { lg.ShowDialog(); }).Start();
                }
                tc.Send(new msg()
                {
                    act = "ok"
                });
                SetCode?.Invoke(m.body);
                break;

            case "setuser":
                cu = Serialize.FromJson <User>(m.body);
                if (lg.Visible)
                {
                    lg.SetSucc();
                }
                NewWx?.Invoke(this);
                wx     = new Wx(cu, tc);
                repies = Sdk.LoadReply(cu.uin).items;
                break;

            case "newmsg":
                var wm = Serialize.FromJson <Wxm>(m.body);
                if (wm == null)
                {
                    break;
                }
                if (string.IsNullOrEmpty(wm.text))
                {
                    break;
                }

                wx.OutLog("收到消息->" + wm.fr.text + (wm.rm.name[1] == '@' ? "@" + wm.rm.text : "") + ":\r\n\t" + wm.text.Replace("  ", "").Replace("&nbsp;", "").Replace("<br>", "\r\n\t").Trim());

                if (repies == null)
                {
                    break;
                }

                ReplyResp.Reply rep = null;
                foreach (var r in repies)
                {
                    switch (r.tp)
                    {
                    case 1:
                        if (wm.text.Contains("我通过了你的朋友验证请求,现在我们可以开始聊天了"))
                        {
                            rep = r;
                        }
                        wx.OutLog("匹配到 被添加 自动回复,发送了" + (rep.type == 1 ? "文本" : "图片") + "内容:" + rep.content);
                        //被添加
                        break;

                    case 2:        //群内新成员
                        wx.OutLog("匹配到 群内新成员 自动回复,发送了" + (rep.type == 1 ? "文本" : "图片") + "内容:" + rep.content);
                        break;

                    case 3:        //默认回复
                        break;

                    case 4:        //关键字回复
                        if (r.match == 1 && r.keys.Contains(wm.text))
                        {
                            rep = r;
                        }
                        else if (r.match == 2 && r.keys.Count(o => wm.text.StartsWith(o)) > 0)
                        {
                            rep = r;
                        }
                        else if (r.match == 3 && r.keys.Count(o => wm.text.EndsWith(o)) > 0)
                        {
                            rep = r;
                        }
                        else if (r.match == 4 && r.keys.Count(o => wm.text.Contains(o)) > 0)
                        {
                            rep = r;
                        }
                        if (rep != null)
                        {
                            wx.OutLog("匹配到 关键字(" + string.Join(" ", r.keys) + ") 自动回复,发送了" + (rep.type == 1 ? "文本" : "图片") + "内容:" + rep.content);
                        }
                        break;
                    }
                    if (rep != null)
                    {
                        break;
                    }
                }

                if (rep != null)
                {
                    tc.Send(new msg()
                    {
                        act = "send", body = Serialize.ToJson(new { to = wm.fr.name, rep.type, rep.content })
                    });
                }

                break;

            case "qrcode":
                lg.SetQrcode(m.body);
                break;

            case "headimg":
                lg.SetHeadimg(m.body);
                cu.headimg = m.body;
                break;

            case "log":
                Debug.WriteLine("log->" + m.body);
                break;

            case "quit":
                Quit(1);
                break;

            case "contact":
                wx.SetContact(Serialize.FromJson <List <Contact> >(m.body));
                break;
            }
        }