using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Tasks.Workflow.Abstractions;
namespace WIDESEAWCS_Tasks.Workflow
{
///
/// 简单命令处理:仅迁移原 RobotMessageHandler 中的命令分支,不改变业务语义。
///
public class RobotSimpleCommandHandler : IRobotSimpleCommandHandler
{
private readonly RobotTaskProcessor _taskProcessor;
public RobotSimpleCommandHandler(RobotTaskProcessor taskProcessor)
{
_taskProcessor = taskProcessor;
}
public async Task HandleAsync(string message, RobotSocketState state)
{
switch (message)
{
case "homing":
state.OperStatus = "Homing";
return true;
case "homed":
state.OperStatus = "Homed";
return true;
case "picking":
state.CurrentAction = "Picking";
return true;
case "puting":
state.CurrentAction = "Putting";
return true;
case "allpickfinished":
{
state.CurrentAction = "AllPickFinished";
var currentTask = state.CurrentTask;
if (currentTask == null)
{
return false;
}
var robotTaskType = (RobotTaskTypeEnum)currentTask.RobotTaskType;
if (robotTaskType == RobotTaskTypeEnum.SplitPallet || robotTaskType == RobotTaskTypeEnum.ChangePallet)
{
if (await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: true))
{
_taskProcessor.DeleteTask(currentTask.RobotTaskId);
return true;
}
}
return false;
}
case "allputfinished":
{
state.CurrentAction = "AllPutFinished";
var currentTask = state.CurrentTask;
if (currentTask == null)
{
return false;
}
var robotTaskType = (RobotTaskTypeEnum)currentTask.RobotTaskType;
if (robotTaskType == RobotTaskTypeEnum.GroupPallet || robotTaskType == RobotTaskTypeEnum.ChangePallet)
{
if (await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: false))
{
_taskProcessor.DeleteTask(currentTask.RobotTaskId);
state.CurrentTask = null;
state.RobotTaskTotalNum = 0;
state.CellBarcode = new List();
return true;
}
}
return false;
}
case "running":
state.OperStatus = "Running";
return true;
case "pausing":
state.OperStatus = "Pausing";
return true;
case "warming":
state.OperStatus = "Warming";
return true;
case "emstoping":
state.OperStatus = "Emstoping";
return true;
case "runmode,1":
state.RobotRunMode = 1;
return true;
case "runmode,2":
state.RobotRunMode = 2;
return true;
case "controlmode,1":
state.RobotControlMode = 1;
return true;
case "controlmode,2":
state.RobotControlMode = 2;
return true;
case "armobject,1":
state.RobotArmObject = 1;
return true;
case "armobject,0":
state.RobotArmObject = 0;
return true;
default:
return false;
}
}
}
}