11
cjs
5 天以前 daca75da47c4ba7e2927bd07d59d4316a4e6ac6d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
 
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());
            }
        }
    }
}