|
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<WCSSession, BinaryRequestInfo> {
|
/// <summary>
|
/// 兼容CommandLine 命令行方式的协议 和 纯字符串的协议 都是以$$为结束符
|
/// </summary>
|
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 });
|
|
//1000-电梯任务
|
IEnentListen plcListen = DataAccess.CreateEnentListen();
|
plcListen.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 1000 });
|
|
//1001-MODBUS通道任务中间表处理
|
IEnentListen ModBusTask = DataAccess.CreateEnentListen();
|
ModBusTask.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 1001 });
|
|
//2000-充电任务
|
IEnentListen BatteryTime = DataAccess.CreateEnentListen();
|
BatteryTime.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 2000 });
|
|
//2001-写电量任务
|
IEnentListen WirteBattery = DataAccess.CreateEnentListen();
|
WirteBattery.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 2001 });
|
|
//10010-任务动作线程
|
IEnentListen SecondWeightActionOne = DataAccess.CreateEnentListen();
|
SecondWeightActionOne.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10010 });
|
|
//10011-设备合格率
|
IEnentListen machine = DataAccess.CreateEnentListen();
|
machine.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10011 });
|
|
//10012-删除变更中间表时间大于两周的任务
|
IEnentListen deleteTableTask = DataAccess.CreateEnentListen();
|
deleteTableTask.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10012 });
|
|
//10013-ERP变更功能 插入简单生产入库表
|
IEnentListen SendERPTaskCompleteFunc = DataAccess.CreateEnentListen();
|
SendERPTaskCompleteFunc.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10013 });
|
|
//10014-车间看板内容写入通道
|
IEnentListen writeCJQtt = DataAccess.CreateEnentListen();
|
writeCJQtt.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10014 });
|
|
//10015-ERP变更功能 将物料表数据插入中间表
|
IEnentListen insertMidTable = DataAccess.CreateEnentListen();
|
insertMidTable.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10015 });
|
|
//10016-MES入库反馈
|
IEnentListen SendMESTaskCompleteFunc = DataAccess.CreateEnentListen();
|
SendMESTaskCompleteFunc.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10016 });
|
|
//10017-电钴A口
|
IEnentListen AMachine = DataAccess.CreateEnentListen();
|
AMachine.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10017 });
|
|
//10018-电钴C口
|
IEnentListen CMachine = DataAccess.CreateEnentListen();
|
CMachine.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10018 });
|
|
//10019-电钴D口
|
IEnentListen DMachine = DataAccess.CreateEnentListen();
|
DMachine.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10019 });
|
|
//10020-电钴接驳位入立库
|
IEnentListen DGInWarehouse = DataAccess.CreateEnentListen();
|
DGInWarehouse.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10020 });
|
|
//10021-erp简单生产入库表反馈失败,重新反馈
|
IEnentListen SendERPTaskCompleteFuncThree = DataAccess.CreateEnentListen();
|
SendERPTaskCompleteFuncThree.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10021 });
|
|
}
|
public class YourReceiveFilter : IReceiveFilterFactory<BinaryRequestInfo> {
|
public IReceiveFilter<BinaryRequestInfo> CreateFilter(IAppServer appServer, IAppSession appSession, System.Net.IPEndPoint remoteEndPoint) {
|
return new MsgPackReceiveFilter();
|
}
|
}
|
public class MsgPackReceiveFilter : TerminatorReceiveFilter<BinaryRequestInfo> {
|
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());
|
}
|
}
|
}
|
}
|