111
cjs
1 天以前 f8b06c1a8a4075459cebf4472ca0757290ca38ce
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
 
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 });
 
            //10022-反馈erp 插入简单生产入库表(电钴)
            IEnentListen SendERPTaskCompleteFuncDG = DataAccess.CreateEnentListen();
            SendERPTaskCompleteFuncDG.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());
            }
        }
    }
}