using Hanhe.iWCS.Business; using Hanhe.iWCS.Common; 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.IndonesiaGLMTCP { 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 CacheStackingMouth = DataAccess.CreateEnentListen(); CacheStackingMouth.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10002 }); //10003-读包装机信号(包装机补空托流程)-3楼包装补空 IEnentListen PickUpBlank = DataAccess.CreateEnentListen(); PickUpBlank.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10003 }); //10004-打包线空托补料请求(3楼拆盘机补空托)-3楼拆盘补空 IEnentListen CheckPackingLineEmpty = DataAccess.CreateEnentListen(); CheckPackingLineEmpty.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10004 }); //10005 - 三楼叠盘机请求 - 3楼叠盘下线 - 二期新增任务流程 IEnentListen CheckLineEmtpy = DataAccess.CreateEnentListen(); CheckLineEmtpy.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10005 }); //10006-打包线下线-满托入库 IEnentListen CheckPackingLineFull = DataAccess.CreateEnentListen(); CheckPackingLineFull.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10006 }); //10007-缓存位入入料平台 IEnentListen InInlet = DataAccess.CreateEnentListen(); //InInlet.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10007 }); //充电任务 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 machine = DataAccess.CreateEnentListen(); //machine.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10011 }); //荆门变更 IEnentListen changeSignal = DataAccess.CreateEnentListen(); //changeSignal.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10012 }); //删除变更中间表时间大于两周的数据 IEnentListen deleteTableTask = DataAccess.CreateEnentListen(); //deleteTableTask.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10013 }); //ERP变更功能 IEnentListen SendERPTaskCompleteFunc = DataAccess.CreateEnentListen(); SendERPTaskCompleteFunc.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10014 }); //看板内容写入通道 IEnentListen writeQtt = DataAccess.CreateEnentListen(); //writeQtt.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10015 }); //将物料表数据插入中间表 IEnentListen insertMidTable = DataAccess.CreateEnentListen(); insertMidTable.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()); } } } }