/// <summary> /// 单线程处理发送消息 /// </summary> public static void DealWidthSendMessage(Form2 form2) { Message msg = null; BackgroundService service = new BackgroundService(); while (true) { SendedMessageOutViewModel send = null; try { send = service.GetSendedMessage(QqSocketClientDictionary.Keys); if (send != null) { msg = new Message { Context = send.To + "," + send.Message, QQ = send.From }; var client = QqSocketClientDictionary[msg.QQ]; client.BeginSend(msg.MsgBody, 0, msg.MsgBody.Length, SocketFlags.None, (obj) => { Logger.Info(msg.QQ + "发送消息"); }, null); } } catch (Exception ex) { try { Logger.Error(ex.ToString()); service.UpdateSendedMessage(send.Id); // 关闭,掉线 QqSocketClientDictionary.TryRemove(msg.QQ, out var val); var pid = Global.QqProcessDictionary[msg.QQ]; var process = Process.GetProcessById(pid); if (process != null) { process.Kill(); process.Close(); } } catch (Exception) { } form2.UpdateStatusDesc(msg.QQ, "掉线"); } Thread.Sleep(3000); } }
public SendedMessageOutViewModel GetSendedMessage(ICollection <string> qq) { // AddSendedMessage(); var target = m_MainDbContext.SendedMessageSet.Where(e => !e.IsD && !e.IsSend && qq.Contains(e.From)).OrderBy(e => e.CreateTime).FirstOrDefault(); if (target == null) { return(null); } var ret = new SendedMessageOutViewModel() { Message = target.Message, From = target.From, To = target.To, Id = target.Id }; target.IsSend = true; target.IsD = true; m_MainDbContext.SendedMessageSet.AddOrUpdate(target); m_MainDbContext.SaveChanges(); return(ret); }