using Newtonsoft.Json.Linq; using Sodao.FastSocket.Server.Messaging; using System; using BiosenSocketService.Exceptions; using XImaging.Automation.Library.HxDriverLib; using XImaging.Automation.Service.Interface; using XImaging.Automation.Service.Instruction; namespace XImaging.Automation.Service { /// /// 驱动处理接收到的信息包 /// class MessageDispatch: IMessageDispatch { private static MessageDispatch m_Instance = null; private HxMessage m_taskMessage; private InstructionManager insManager; private MessageDispatch() { insManager = new InstructionManager(); } public static MessageDispatch GetInstance() { if (m_Instance == null) { m_Instance = new MessageDispatch(); } return m_Instance; } public void OnConnect(bool isConnect) { insManager.OnConnect(isConnect); } public void Parse(HxMessage message) { // 任务指令的确认帧反馈 if (HxMessage.MESSAGE_TYPE_TASK ==message.MessageType|| HxMessage.MESSAGE_TYPE_QUERY == message.MessageType) { HxTcpHandler.ReplyAckMessage(message); // 返回确认帧 LogConstant.logger.Print(string.Format("已收到{0}指令,发送确认帧", message.Method)); } // 根据指令类型进行处理 switch(message.MessageType) { case HxInstruction.INSTYPE_Task: // 任务指令类型,有执行时间,需要异步执行 case HxInstruction.INSTYPE_Query: try { TaskInstruction tIns = new TaskInstruction(message); insManager.Add(tIns); } catch (TaskUncompletedException tuex) { LogConstant.logger.Print(tuex.Message); HxTcpHandler.ReplyFailedMessage(message, ResponseMessagePackage.NullData, tuex.ErrCode, tuex.Message); } catch (UndefinedInstructionException uiex) { LogConstant.logger.Print(uiex.Message); HxTcpHandler.ReplyFailedMessage(message,ResponseMessagePackage.NullData, uiex.ErrCode, uiex.Message); } catch (Exception ex) { LogConstant.logger.Print(ex.Message); HxTcpHandler.ReplyFailedMessage(message, ResponseMessagePackage.NullData, "EC_UNKOWN", ex.Message); } break; /*case HxInstruction.INSTYPE_Query: // 查询类指令,立即反馈 try { QueryInstruction qIns = new QueryInstruction(message); insManager.Add(qIns); } catch (Exception ex) { LogConstant.logger.Print(ex.Message); HxTcpHandler.ReplyFailedMessage(message, ResponseMessagePackage.NullData, "EC-00-000", ex.Message); } break;*/ case HxInstruction.INSTYPE_Troubleshoot: try { LogConstant.logger.Print(string.Format("收到针对错误{0}的错误处理", message.Method)); TroubleshootInstruction tsIns = new TroubleshootInstruction(message); insManager.Add(tsIns); } catch (Exception ex) { LogConstant.logger.Print(ex.Message); HxTcpHandler.ReplyFailedMessage(message, ResponseMessagePackage.NullData, "EC-00-000", ex.Message); } break; } } } }