/// <summary> /// 处理流水查询任务 /// </summary> private void HandleOutTask() { try { SOutTaskInfo info = m_OutTasksList.Peek(); // 取出消息,不删除 LOGGER.INFO($"Handle a new out task:\n {info.ToLogString()} \n, still left {m_OutTasksList.Count - 1} tasks in queue."); SOutTaskResult dealResult = new SOutTaskResult(); dealResult.taskID = info.taskID; dealResult.nodeID = GetCurCashierNodeID(); // 记录当前在处理的任务ID SetCurTaskID(info.taskID); // 开始处理 if (!AutomationOut(info, ref dealResult)) { } LOGGER.WARN($"Auto out task is done. Now ready to send msg to server. TaskID = {info.taskID}.", info.taskID); // 通知服务器处理结果 HttpSendResult sendResult = RequestSender.SendRequestToServer(dealResult); if (sendResult.IsSendSuccessed()) { SetLastTaskID(info.taskID); SetCurTaskID(INVALID_TASK_ID); LOGGER.INFO($"Send auto out task successed. TaskID = {info.taskID}. \n {sendResult.ToLogString()}"); } else { SetLastTaskID(INVALID_TASK_ID); SetCurTaskID(INVALID_TASK_ID); LOGGER.ERROR($"Send auto out task failed. TaskID = {info.taskID}. \n {sendResult.ToLogString()}", info.taskID); } LOGGER.WARN($"Out task deal over. TaskID = {info.taskID}.", info.taskID); } catch (Exception e) { LOGGER.ERROR($"Deal out task error occured. Error = {e.ToString()}"); } finally { SetCurTaskID(INVALID_TASK_ID); m_OutTasksList.Dequeue(); // 无论如何,该任务必须删除 } return; }
public static int OnMsg(int nNodeID, string strRequestString, MainForm mainForm, ref string strRespone) { int nErrorCode = (int)ENUM_OutTaskResponeError.eOutTaskRequest_UnknownFailed; // 检查请求合法性 if (!IsValidOutTaskMsg(strRequestString, RSAKeyContainer.GetInstance.GetJavaPublicKey())) { // 消息检查未通过 nErrorCode = (int)ENUM_OutTaskResponeError.eOutTaskRequest_UnvalidMsg; LOGGER.WARN($"Server out task request is not a invalid msg. \n Request = {strRequestString}"); } else { SOutTaskInfo info = ParseStructFromRequest(strRequestString, RSAKeyContainer.GetInstance.GetCSharpPrivateKey()); if (info.taskID <= 0) { // 消息不正常 nErrorCode = (int)ENUM_OutTaskResponeError.eOutTaskRequest_UnvalidTaskId; LOGGER.WARN($"Server out task request is not a invalid msg. \n Request = {strRequestString} \n TaskInfo = {info.ToLogString()}"); } else { // 消息解析成功,开始逻辑处理 { // 实际处理 mainForm.AddOutTaskToWaitQueue(info); nErrorCode = (int)ENUM_OutTaskResponeError.eOutTaskRequest_Successed; } } } strRespone = ("{\"nodeID\":") + nNodeID + (",\"status\":") + nErrorCode + ("}"); return(nErrorCode); }