/// <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); } }
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(" ", "").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; } }