Esempio n. 1
0
        public void 开启()
        {
            var __编解码器 = new B编解码器(H报文注册.报文字典, null, FT通用访问工厂.文本编码)
            {
                编码拦截 = H报文注册.拦截发送报文,
                解码拦截 = H报文注册.拦截接收报文
            };

            客户端列表           = new List <IPEndPoint>();
            _IN网络节点         = FN网络传输工厂.创建TCP服务器(new IPEndPoint(IPAddress.Any, 端口), __编解码器.消息头长度, __编解码器.解码消息长度);
            _IN网络节点.称       = "服务器";
            _IN上下文          = new N上下文(__编解码器, _IN网络节点.称);
            _IN网络节点.收到消息   += (__远端地址, __消息) => _IN上下文.收到报文(__远端地址, __消息);
            _IN网络节点.客户端已连接 += q =>
            {
                if (!客户端列表.Contains(q))
                {
                    客户端列表.Add(q);
                }
                On客户端已连接(q);
            };
            _IN网络节点.客户端已断开 += q =>
            {
                if (客户端列表.Contains(q))
                {
                    客户端列表.Remove(q);
                }
                On客户端已断开(q);
                _IN上下文.注销节点(q);
            };

            _IN上下文.设置发送方法(_IN网络节点.步发送);
            _IN上下文.订阅报文(H报文注册.查询功能码(typeof(M对象列表查询请求)), () => new N被动会话(new Func <N会话参数, bool>(处理查询对象列表)));
            _IN上下文.订阅报文(H报文注册.查询功能码(typeof(M对象明细查询请求)), () => new N被动会话(new Func <N会话参数, bool>(处理查询对象明细)));
            _IN上下文.订阅报文(H报文注册.查询功能码(typeof(M方法执行请求)), () => new N被动会话(new Func <N会话参数, bool>((处理执行方法))));
            _IN上下文.订阅报文(H报文注册.查询功能码(typeof(M订阅事件)), () => new N被动会话(new Action <N会话参数>((处理订阅事件))));
            _IN上下文.订阅报文(H报文注册.查询功能码(typeof(M注销事件)), () => new N被动会话(new Action <N会话参数>((处理取消订阅事件))));
            _IN上下文.订阅报文(H报文注册.查询功能码(typeof(M属性值查询请求)), () => new N被动会话(new Func <N会话参数, bool>((处理查询属性值))));

            _IN网络节点.最大消息长度 = 10000000;
            _IN网络节点.开启();

            try
            {
                if (WebApi端口 == 0)
                {
                    WebApi端口 = 端口 + 1;
                }
                _BWebApi = new BWebApi(WebApi端口, () => _所有对象);
                _BWebApi.开启();
            }
            catch (Exception ex)
            {
                H日志输出.记录("通用访问WebApi开启失败: " + ex.Message);
            }
        }
Esempio n. 2
0
        public void 开启()
        {
            var __编解码器 = new B编解码器(H报文注册.报文字典, null, FT通用访问工厂.文本编码)
            {
                编码拦截 = H报文注册.拦截发送报文,
                解码拦截 = H报文注册.拦截接收报文
            };
            客户端列表 = new List<IPEndPoint>();
            _IN网络节点 = FN网络传输工厂.创建TCP服务器(new IPEndPoint(IPAddress.Any, 端口), __编解码器.消息头长度, __编解码器.解码消息长度);
            _IN网络节点.名称 = "服务器";
            _IN上下文 = new N上下文(__编解码器, _IN网络节点.名称);
            _IN网络节点.收到消息 += (__远端地址, __消息) => _IN上下文.收到报文(__远端地址, __消息);
            _IN网络节点.客户端已连接 += q =>
            {
                if (!客户端列表.Contains(q))
                {
                    客户端列表.Add(q);
                }
                On客户端已连接(q);
            };
            _IN网络节点.客户端已断开 += q =>
            {
                if (客户端列表.Contains(q))
                {
                    客户端列表.Remove(q);
                }
                On客户端已断开(q);
                _IN上下文.注销节点(q);
            };

            _IN上下文.设置发送方法(_IN网络节点.同步发送);
            _IN上下文.订阅报文(H报文注册.查询功能码(typeof(M对象列表查询请求)), () => new N被动会话(new Func<N会话参数, bool>(处理查询对象列表)));
            _IN上下文.订阅报文(H报文注册.查询功能码(typeof(M对象明细查询请求)), () => new N被动会话(new Func<N会话参数, bool>(处理查询对象明细)));
            _IN上下文.订阅报文(H报文注册.查询功能码(typeof(M方法执行请求)), () => new N被动会话(new Func<N会话参数, bool>((处理执行方法))));
            _IN上下文.订阅报文(H报文注册.查询功能码(typeof(M订阅事件)), () => new N被动会话(new Action<N会话参数>((处理订阅事件))));
            _IN上下文.订阅报文(H报文注册.查询功能码(typeof(M注销事件)), () => new N被动会话(new Action<N会话参数>((处理取消订阅事件))));
            _IN上下文.订阅报文(H报文注册.查询功能码(typeof(M属性值查询请求)), () => new N被动会话(new Func<N会话参数, bool>((处理查询属性值))));

            _IN网络节点.最大消息长度 = 10000000;
            _IN网络节点.开启();

            try
            {
                if (WebApi端口 == 0)
                {
                    WebApi端口 = 端口 + 1;
                }
                _BWebApi = new BWebApi(WebApi端口, () => _所有对象);
                _BWebApi.开启();
            }
            catch (Exception ex)
            {
                H日志输出.记录("通用访问WebApi开启失败: " + ex.Message);
            }
        }
Esempio n. 3
0
        public void 连接(IPEndPoint __设备地址)
        {
            设备地址 = __设备地址;
            var __编解码器 = new B编解码器(H报文注册.报文字典, H报文注册.通道字典, FT通用访问工厂.文本编码)
            {
                编码拦截 = H报文注册.拦截发送报文,
                解码拦截 = H报文注册.拦截接收报文
            };

            _IN网络节点       = FN网络传输工厂.创建TCP客户端(__设备地址, new IPEndPoint(IPAddress.Any, 0), __编解码器.消息头长度, __编解码器.解码消息长度);
            _IN网络节点.称     = "客户端";
            _IN网络节点.自动重连  = this.自动重连;
            _IN上下文        = new N上下文(__编解码器, _IN网络节点.称);
            _N主动会话        = new N主动会话(_IN上下文, __设备地址);
            _IN网络节点.收到消息 += (__远端地址, __消息) => _IN上下文.收到报文(__远端地址, __消息);
            _IN网络节点.已断开  += () =>
            {
                if (连接正常)
                {
                    连接正常 = false;
                    On已断开(false);
                }
                _IN上下文.注销节点(__设备地址);
            };
            _IN网络节点.已连接 += () =>
            {
                连接正常 = true;

                Task.Factory.StartNew(On已连接);
            };
            _IN上下文.设置发送方法((__节点, __消息) => _IN网络节点.步发送(__消息));
            _IN上下文.订阅报文(H报文注册.查询功能码(typeof(M接收事件)), () => new N被动会话(new Action <N会话参数>(处理事件)));

            _IN网络节点.最大消息长度 = 10000000;
            _IN网络节点.开启();
        }
Esempio n. 4
0
        public void 连接(IPEndPoint __设备地址)
        {
            设备地址 = __设备地址;
            var __编解码器 = new B编解码器(H报文注册.报文字典, H报文注册.通道字典, FT通用访问工厂.文本编码)
            {
                编码拦截 = H报文注册.拦截发送报文,
                解码拦截 = H报文注册.拦截接收报文
            };
            _IN网络节点 = FN网络传输工厂.创建TCP客户端(__设备地址, new IPEndPoint(IPAddress.Any, 0), __编解码器.消息头长度, __编解码器.解码消息长度);
            _IN网络节点.名称 = "客户端";
            _IN网络节点.自动重连 = this.自动重连;
            _IN上下文 = new N上下文(__编解码器, _IN网络节点.名称);
            _N主动会话 = new N主动会话(_IN上下文, __设备地址);
            _IN网络节点.收到消息 += (__远端地址, __消息) => _IN上下文.收到报文(__远端地址, __消息);
            _IN网络节点.已断开 += () =>
            {
                if (连接正常)
                {
                    连接正常 = false;
                    On已断开(false);
                }
                _IN上下文.注销节点(__设备地址);
            };
            _IN网络节点.已连接 += () =>
            {
                连接正常 = true;

                Task.Factory.StartNew(On已连接);
            };
            _IN上下文.设置发送方法((__节点, __消息) => _IN网络节点.同步发送(__消息));
            _IN上下文.订阅报文(H报文注册.查询功能码(typeof(M接收事件)), () => new N被动会话(new Action<N会话参数>(处理事件)));

            _IN网络节点.最大消息长度 = 10000000;
            _IN网络节点.开启();
        }