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
|
{
|
|
/// <summary>
|
/// 驱动处理接收到的信息包
|
/// </summary>
|
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;
|
}
|
}
|
}
|
}
|