private void workerMethod() { while (_isRun) { for (int i = 0; i < _suspendWorkQueue.Count; i++) { SuspendTaskContext task = _suspendWorkQueue[i]; if ((int)(DateTime.Now - task.DisconnectTime).TotalSeconds > 60 * 5) { LogHelper.WriteErrorByCurrentMethod("Reset TimeOut--{0},{1}".FormatTo(task.Adapter.ResetMsg, task.Adapter.IdentifyId)); //如果超时5分钟未重连就判定该任务已真正离线 task.Adapter.WindowClose();//关闭窗口 _suspendWorkQueue.Remove(task); i--; } else { string id = task.Adapter.IdentifyId.Split('|')[0]; var syncContext = _syncContexts.FirstOrDefault(x => x.IdentifyId == id); LogHelper.WriteErrorByCurrentMethod("beigin Reset--{0},{1},{2}".FormatTo(task.Adapter.ResetMsg, task.Adapter.IdentifyId, id)); if (syncContext != null) { if (task.Adapter.WindowClosed) { //窗口关闭将不再建立连接 _suspendWorkQueue.Remove(task); i--; continue; } byte[] data = MessageHelper.CopyMessageHeadTo(MessageHead.S_MAIN_ACTIVATE_CTRLSERVICE, task.Adapter.ResetMsg); syncContext.Session.SendAsync(data); LogHelper.WriteErrorByCurrentMethod("send reset command--{0},{1},{2}".FormatTo(task.Adapter.ResetMsg, task.Adapter.IdentifyId, id)); } } } Thread.Sleep(20000); } }
public void Put(SuspendTaskContext context) { _suspendWorkQueue.Add(context); LogHelper.WriteErrorByCurrentMethod("Session Close--{0},{1}".FormatTo(context.Adapter.ResetMsg, context.Adapter.IdentifyId)); }