|
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<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 });
|
|
//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<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());
|
}
|
}
|
}
|
}
|