using Aitex.Core.RT.Device; using Aitex.Core.RT.Log; using MECF.Framework.Common.Communications; using Newtonsoft.Json.Linq; using System.Collections.Generic; using System.Linq; using System.Text; namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.JEL { public abstract class JelRobotHandler:HandlerBase { public JelRobot Device { get; } protected string _command; protected string _parameter; protected JelRobotHandler(JelRobot device, string command, string parameter = null) : base(BuildMessage(device.BodyNumber, command, parameter)) { Device = device; _command = command; _parameter = parameter; Name = command; } protected JelRobotHandler(string command) : base(command) { _command = command; } private static string BuildMessage(int bodyno, string command, string parameter) { return $"${bodyno}{command}{parameter}\r"; } public override bool HandleMessage(MessageBase msg, out bool transactionComplete) { JelRobotMessage response = msg as JelRobotMessage; ResponseMessage = msg; if (response.IsAck) { SetState(EnumHandlerState.Completed); transactionComplete = true; return true; } transactionComplete = false; return false; } } public class JelRobotReadHandler: JelRobotHandler { public JelRobotReadHandler(JelRobot device, string command, string parameter = null) : base(device, command, parameter) { string temp = string.IsNullOrEmpty(parameter) ? parameter : ""; LOG.Write($"{device.Name} execute read command {command} {temp} in byte."); } public override bool HandleMessage(MessageBase msg, out bool transactionComplete) { JelRobotMessage response = msg as JelRobotMessage; ResponseMessage = msg; if (response.IsAck) { Device.ParseData(_command,_parameter,response.Data); SetState(EnumHandlerState.Completed); transactionComplete = true; return true; } transactionComplete = false; return false; } } public class JelRobotSetHandler : JelRobotHandler { public JelRobotSetHandler(JelRobot device, string command, string parameter = null) : base(device, command, parameter) { string temp = string.IsNullOrEmpty(parameter) ? parameter : ""; LOG.Write($"{device.Name} execute read command {command} {temp} in byte."); } public override bool HandleMessage(MessageBase msg, out bool transactionComplete) { JelRobotMessage response = msg as JelRobotMessage; ResponseMessage = msg; if (response.IsAck) { SetState(EnumHandlerState.Completed); transactionComplete = true; return true; } transactionComplete = false; return false; } } public class JelRobotMoveHandler : JelRobotHandler { public JelRobotMoveHandler(JelRobot device, string command, string parameter = null) : base(device, command, parameter) { string temp = string.IsNullOrEmpty(parameter) ? parameter : ""; LOG.Write($"{device.Name} execute move command {command} {temp} in byte."); } } public class JelRobotRawCommandHandler : JelRobotHandler { public JelRobotRawCommandHandler(JelRobot device, string command) : base(command) { LOG.Write($"{device.Name} execute move command {command} in byte."); } } public class JelRobotCompaundCommandHandler : JelRobotHandler { public JelRobotCompaundCommandHandler(JelRobot device, string cmdNo, string parameter = null) : base(device, $"G{cmdNo}", parameter) { string temp = string.IsNullOrEmpty(parameter) ? parameter : ""; LOG.Write($"{device.Name} execute compaund command {cmdNo} {temp} in byte."); } public override bool HandleMessage(MessageBase msg, out bool transactionComplete) { JelRobotMessage response = msg as JelRobotMessage; ResponseMessage = msg; if (response.IsAck) { //if (_command == "G") // Device.CurrentCompoundCommandStatus = JelCommandStatus.None; SetState(EnumHandlerState.Acked); //transactionComplete = true; //return true; } if (response.IsResponse) { SetState(EnumHandlerState.Completed); if (response.Data.Contains("END")) { transactionComplete = true; return true; } if (response.Data.Contains("ERR")) { Device.HandlerError(response.Data); transactionComplete = true; return true; } } transactionComplete = false; return false; } } }