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.TaizhouGEMTwoTCP { 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-读取复称平台信号-复称入缓存架 //IEnentListen FuChengInCache = DataAccess.CreateEnentListen(); //FuChengInCache.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10002 }); //10003-读取叠包机信号(三楼双层缓存架入叠盘机流程)-3楼缓存架入叠托 IEnentListen CacheStackingMouth = DataAccess.CreateEnentListen(); CacheStackingMouth.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10003 }); //10004-读包装机信号(包装机补空托流程)-3楼包装补空 IEnentListen PickUpBlank = DataAccess.CreateEnentListen(); PickUpBlank.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10004 }); //10005-打包线空托补料请求(3楼拆盘机补空托)-3楼拆盘补空 IEnentListen CheckPackingLineEmpty = DataAccess.CreateEnentListen(); CheckPackingLineEmpty.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10005 }); //10006 - 三楼叠盘机请求 - 3楼叠盘下线 - 二期新增任务流程 IEnentListen CheckLineEmtpy = DataAccess.CreateEnentListen(); CheckLineEmtpy.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10006 }); //10007-打包线下线-满托入库 IEnentListen CheckPackingLineFull = DataAccess.CreateEnentListen(); CheckPackingLineFull.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10007 }); //电梯任务 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 }); //任务动作线程 IEnentListen ActionControl = DataAccess.CreateEnentListen(); ActionControl.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10010 }); //写入小车状态 IEnentListen changeSingal = DataAccess.CreateEnentListen(); ActionControl.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10012 }); //入库任务完成发送ERP批号等信息 IEnentListen sendErpMsg = DataAccess.CreateEnentListen(); sendErpMsg.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10013 }); //读取包装线信号-3楼包装取料 IEnentListen CheckPackingMachineTetracobalt = DataAccess.CreateEnentListen(); CheckPackingMachineTetracobalt.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10014 }); //ERP变更功能 将物料表数据插入中间表 IEnentListen insertMidTable = DataAccess.CreateEnentListen(); insertMidTable.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10015 }); //打包线下线-3楼打包下线--已完成 IEnentListen CheckPackingLineFullTwo = DataAccess.CreateEnentListen(); CheckPackingLineFullTwo.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10016 }); //给电梯发送心跳指令--已完成 IEnentListen SendHeartBeat = DataAccess.CreateEnentListen(); SendHeartBeat.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10017 }); } 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()); } } } }