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.JingmenGEMTwoTCP { 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 }); //10010-读取包装线信号-3楼包装取料 二期 IEnentListen CheckPackingMachineTwo = DataAccess.CreateEnentListen(); CheckPackingMachineTwo.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10002 }); ////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 StackingLineEmpty = DataAccess.CreateEnentListen(); StackingLineEmpty.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10006 }); //10007-打包线下线-满托入库 IEnentListen CheckPackingLineFull1 = DataAccess.CreateEnentListen(); CheckPackingLineFull1.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10007 }); //10008-接驳位入立库 IEnentListen InWarehouse = DataAccess.CreateEnentListen(); InWarehouse.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10008 }); //10009-缓存位入入料平台 IEnentListen InInlet = DataAccess.CreateEnentListen(); InInlet.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10009 }); //电梯任务 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 SecondWeightActionOne = DataAccess.CreateEnentListen(); SecondWeightActionOne.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10010 }); //设备合格率 IEnentListen machine = DataAccess.CreateEnentListen(); machine.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10011 }); //删除变更中间表时间大于两周的任务 IEnentListen deleteTableTask = DataAccess.CreateEnentListen(); deleteTableTask.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10012 }); //ERP变更功能 插入简单生产入库表 IEnentListen SendERPTaskCompleteFunc = DataAccess.CreateEnentListen(); SendERPTaskCompleteFunc.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10013 }); //车间看板内容写入通道 IEnentListen writeCJQtt = DataAccess.CreateEnentListen(); writeCJQtt.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 }); //MES入库反馈 IEnentListen SendMESTaskCompleteFunc = DataAccess.CreateEnentListen(); SendMESTaskCompleteFunc.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10016 }); } 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()); } } } }