using Hanhe.iWCS.Business; using Hanhe.iWCS.DeviceDriver; using Hanhe.iWCS.Factroy; using Hanhe.iWCS.Interface; using Hanhe.iWCS.Model; using SuperSocket.SocketBase; using SuperSocket.SocketBase.Protocol; using System; using System.Configuration; using System.Linq; namespace Hanhe.iWCS.JingmenGLMNorthTCP { public class WCSServer : AppServer { /// /// 兼容CommandLine 命令行方式的协议 和 纯字符串的协议 都是以$$为结束符 /// public WCSServer() : base(new YourReceiveFilter()) { //: base(new CommandLineReceiveFilterFactory("$$", Encoding.UTF8, new BasicRequestInfoParser(",", "&"))) { //设备初始化 HardwareAccessHelper.Instance.Initialize(); HardwareAccessHelper.Instance.ProgramDataInit(); HardwareAccessHelper.Instance.ArchivesInit(); SessionInstance.Instance.Initialize(); Console.WriteLine("amswcs service CopyRight haninfo.cc " + DateTime.Now.Year); StockInstance.Instance.Initialize(); //添加开启线程 //任务拦截 IEnentListen agvStateListen = DataAccess.CreateEnentListen(); agvStateListen.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 1027 }); //10001-读取包装线信号-3楼包装取料 IEnentListen CheckPackingMachine = DataAccess.CreateEnentListen(); CheckPackingMachine.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10001 }); //10002-读取包装线信号-3楼包装取料 IEnentListen CheckPackingMachineTwo = DataAccess.CreateEnentListen(); CheckPackingMachineTwo.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10002 }); //10003-读取包装线信号-3楼包装取料 一号厂房 IEnentListen CheckPackingMachineThree = DataAccess.CreateEnentListen(); CheckPackingMachineThree.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10003 }); //10004-读取叠包机信号(三楼双层缓存架入叠盘机流程) IEnentListen CacheStackingMouth = DataAccess.CreateEnentListen(); CacheStackingMouth.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10004 }); //10005-读包装机信号(包装机补空托流程) IEnentListen PickUpBlank = DataAccess.CreateEnentListen(); PickUpBlank.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10005 }); //10006 - 打包线空托补料请求 IEnentListen CheckPackingLineEmpty = DataAccess.CreateEnentListen(); CheckPackingLineEmpty.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10006 }); //10007-叠盘机满托下线(3楼叠盘下线) IEnentListen StackingLineEmpty = DataAccess.CreateEnentListen(); StackingLineEmpty.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10007 }); //10008-打包线下线-3楼打包下线 IEnentListen CheckPackingLineFull = DataAccess.CreateEnentListen(); CheckPackingLineFull.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10008 }); //电梯任务 IEnentListen plcListen = DataAccess.CreateEnentListen(); plcListen.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 1000 }); //MODBUS通道任务中间表处理 IEnentListen ModBusTask = DataAccess.CreateEnentListen(); ModBusTask.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 1001 }); //充电任务 IEnentListen BatteryTime = DataAccess.CreateEnentListen(); BatteryTime.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 2000 }); //写电量任务 IEnentListen WirteBattery = DataAccess.CreateEnentListen(); WirteBattery.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 2001 }); //10009 - 任务动作线程 IEnentListen ActionControl = DataAccess.CreateEnentListen(); ActionControl.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10009 }); //10010 - 写入小车状态 IEnentListen changeSignal = DataAccess.CreateEnentListen(); changeSignal.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10010 }); //10012 - ERP变更功能 将物料表数据插入中间表 北区 IEnentListen insertMidTable = DataAccess.CreateEnentListen(); insertMidTable.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10012 }); //10013 - ERP变更功能 将物料表数据插入中间表 一号厂房 IEnentListen insertMidTableTwo = DataAccess.CreateEnentListen(); insertMidTableTwo.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10013 }); //10014 - 写入货位信息 三元车间 IEnentListen insertLocInfo = DataAccess.CreateEnentListen(); insertLocInfo.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10014 }); } public class YourReceiveFilter : IReceiveFilterFactory { public IReceiveFilter CreateFilter(IAppServer appServer, IAppSession appSession, System.Net.IPEndPoint remoteEndPoint) { return new MsgPackReceiveFilter(); } } public class MsgPackReceiveFilter : TerminatorReceiveFilter { public MsgPackReceiveFilter() : base(new byte[] { 36, 36 }) { } public override BinaryRequestInfo Filter(byte[] readBuffer, int offset, int length, bool toBeCopied, out int rest) { return base.Filter(readBuffer, offset, length, toBeCopied, out rest); } protected override BinaryRequestInfo ProcessMatchedRequest(byte[] data, int offset, int length) { return new BinaryRequestInfo("", data.Skip(offset).Take(length).ToArray()); } } } }