/// <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);
            }
        }
Ejemplo n.º 2
0
        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);
        }