コード例 #1
0
ファイル: N主动会话.cs プロジェクト: zergmk2/K_Basic
 public override void 处理接收(IPEndPoint __远端, N事务 __事务, object __负载, IN上下文 __上下文)
 {
     if (收到报文 != null)
     {
         收到报文(__远端, __事务, __负载, __上下文);
     }
 }
コード例 #2
0
ファイル: B处理注册C.cs プロジェクト: zergmk2/K_Basic
        public override void 处理接收(IPEndPoint __远端, N事务 事务, object 负载, IN上下文 __报文分派)
        {
            var __注册报文S = 负载 as M注册响应;

            if (__注册报文S != null)
            {
                //验证账号
                if (!__注册报文S.验证通过)
                {
                    Console.WriteLine("客户端: 注册失败");
                    return;
                }

                //验证成功
                Console.WriteLine("客户端: 注册成功");
                this.关闭请求();

                //心跳
                Console.WriteLine("客户端: 开启心跳任务");
                Task.Factory.StartNew(() =>
                {
                    Thread.Sleep(2000);
                    while (true)
                    {
                        this.发送通知(__远端, new M心跳());
                        Thread.Sleep(5000);
                    }
                });
            }
        }
コード例 #3
0
        public override void 处理接收(IPEndPoint __远端, N事务 事务, object 负载, IN上下文 __上下文)
        {
            var __注册报文C = 负载 as M注册请求;

            if (__注册报文C != null)
            {
                Console.WriteLine("服务器: 客户端请求注册 " + __远端.ToString());
                //验证账号
                Console.WriteLine("服务器: 验证账号");

                //验证成功
                Console.WriteLine("服务器: 验证通过");
                this.发送响应(__远端, 事务, new M注册响应
                {
                    验证通过 = true,
                    用户名  = __注册报文C.用户名,
                    角色   = 0
                });
                this.关闭请求();

                //心跳
                Console.WriteLine("服务器: 开启心跳任务");
                Task.Factory.StartNew(() =>
                {
                    Thread.Sleep(2000);
                    while (true)
                    {
                        this.发送通知(__远端, new M心跳());
                        Thread.Sleep(5000);
                    }
                });
            }
        }
コード例 #4
0
ファイル: B处理注册S.cs プロジェクト: zergmk2/K_Basic
        public override void 处理接收(IPEndPoint __远端, IN事务报文 __报文, IN上下文 __上下文)
        {
            var __二进制报文 = __报文 as P二进制报文;

            if (__二进制报文.对象 is M注册请求)
            {
                H日志输出.记录("服务器: 客户端请求注册", __远端.ToString());
                //验证账号
                H日志输出.记录("服务器: 验证账号");

                //验证成功
                H日志输出.记录("服务器: 验证通过");
                this.发送响应(__远端, new P二进制报文(new M注册成功 {
                    角色 = 0, 注册标识 = 1
                }));
                this.关闭请求();

                __上下文.注册标识[__远端] = 1;

                //心跳
                H日志输出.记录("服务器: 开启心跳任务");
                Task.Factory.StartNew(() =>
                {
                    Thread.Sleep(2000);
                    while (true)
                    {
                        this.发送通知(__远端, new P二进制报文(new M心跳()));
                        Thread.Sleep(5000);
                    }
                });
            }
        }
コード例 #5
0
        public void 连接(IPEndPoint __设备端口)
        {
            H日志输出.记录("创建客户端");
            __IN网络节点   = FN网络传输工厂.创建TCP客户端(__设备端口, new IPEndPoint(IPAddress.Any, 5555), P报文.消息头长度, P报文.解码消息长度);
            __IN网络节点.称 = "客户端";
            //__客户端.自动重连 = true;
            _IN上下文         = new N上下文();
            __IN网络节点.收到消息 += (__远端地址, __消息) =>
            {
                var __报文 = H报文注册.解码(__消息);
                if (__报文 == null)
                {
                    return;
                }
                _IN上下文.收到报文(__远端地址, __报文);
            };
            __IN网络节点.已断开 += () => H日志输出.记录("客户端: 与服务器断开", string.Empty);
            __IN网络节点.已连接 += () =>
            {
                连接正常 = true;
                On已连接();
                On收到了通知(new M通知
                {
                    对象  = "系统",
                    概要  = "欢迎进入",
                    详细  = "",
                    重要性 = "普通"
                });

                Task.Factory.StartNew(() =>
                {
                    byte[] __心跳 = new P心跳().编码();
                    while (__IN网络节点.连接正常)
                    {
                        __IN网络节点.异步发送(__心跳);
                        Thread.Sleep(10000);
                    }
                });
                Task.Factory.StartNew(() =>
                {
                    _最后心跳时间 = DateTime.Now;
                    while (__IN网络节点.连接正常)
                    {
                        if (_最后心跳时间.AddMilliseconds(_心跳频率 * 5) < DateTime.Now)
                        {
                            On已断开(false);
                        }
                        Thread.Sleep(_心跳频率);
                    }
                });
            };
            H日志输出.记录("配置客户端上下文");
            _IN上下文.设置发送方法((__节点, __消息) => __IN网络节点.步发送(__消息));
            _IN上下文.订阅报文(typeof(P心跳), () => this);
            _IN上下文.订阅报文(typeof(P通知), () => this);

            __IN网络节点.开启();
        }
コード例 #6
0
        public override void 处理接收(IPEndPoint __远端, IN事务报文 __报文, IN上下文 __上下文)
        {
            var __二进制报文 = __报文 as P二进制报文;

            if (__二进制报文.对象 is M心跳)
            {
                H日志输出.记录("服务器: 收到心跳", __远端.ToString());
            }
        }
コード例 #7
0
        public override void 处理接收(IPEndPoint __远端, N事务 事务, object 负载, IN上下文 __上下文)
        {
            var __心跳报文 = 负载 as M心跳;

            if (__心跳报文 != null)
            {
                Console.WriteLine("服务器: 收到心跳 " + __远端.ToString());
            }
        }
コード例 #8
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);
            }
        }
コード例 #9
0
ファイル: N处理报文.cs プロジェクト: zergmk2/K_Basic
        public N事务 开启请求(IPEndPoint __远端, object __负载, IN上下文 __上下文)
        {
            var __事务 = new N事务();

            文         = __上下文;
            本地凭据      = __上下文.注册请求(this);
            __事务.发方事务 = 本地凭据;
            __事务.收方事务 = 0;
            文.发送报文(__远端, __事务, __负载);
            return(__事务);
        }
コード例 #10
0
 public override void 处理接收(IPEndPoint __远端, IN事务报文 __报文, IN上下文 __上下文)
 {
     if (__报文 is P心跳)
     {
         _最后心跳时间 = DateTime.Now;
         return;
     }
     var __通知 = __报文 as P通知;
     if (__通知 != null)
     {
         On收到了通知(__通知.通知);
         return;
     }
 }
コード例 #11
0
        public override void 处理接收(IPEndPoint __远端, IN事务报文 __报文, IN上下文 __上下文)
        {
            if (__报文 is P心跳)
            {
                _最后心跳时间 = DateTime.Now;
                return;
            }
            var __通知 = __报文 as P通知;

            if (__通知 != null)
            {
                On收到了通知(__通知.通知);
                return;
            }
        }
コード例 #12
0
        public override void 处理接收(IPEndPoint __远端, N事务 __事务, object __负载, IN上下文 __上下文)
        {
            Action <object> __发送响应 = q => this.发送响应(__远端, __事务, q);
            Action <object> __发送通知 = q => this.发送通知(__远端, q);

            if (_处理请求 != null)
            {
                if (_处理请求(new N会话参数(__远端, __负载, __发送响应, __发送通知)))
                {
                    this.关闭请求();
                }
            }
            else
            {
                _处理通知(new N会话参数(__远端, __负载, __发送响应, __发送通知));
            }
        }
コード例 #13
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网络节点.开启();
        }
コード例 #14
0
ファイル: N主动会话.cs プロジェクト: zergmk2/K_Basic
 public N主动会话(IN上下文 __上下文)
 {
     this._上下文 = __上下文;
 }
コード例 #15
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);
            }
        }
コード例 #16
0
 public override void 处理接收(IPEndPoint __远端, IN事务报文 __报文, IN上下文 __报文分派)
 {
     H日志输出.记录("客户端: 收到心跳");
 }
コード例 #17
0
ファイル: N处理报文.cs プロジェクト: zergmk2/K_Basic
 public abstract void 处理接收(IPEndPoint __远端, N事务 事务, object 负载, IN上下文 __上下文);
コード例 #18
0
        public void 连接(IPEndPoint __设备端口)
        {
            H日志输出.记录("创建客户端");
            __IN网络节点 = FN网络传输工厂.创建TCP客户端(__设备端口, new IPEndPoint(IPAddress.Any, 5555), P报文.消息头长度, P报文.解码消息长度);
            __IN网络节点.名称 = "客户端";
            //__客户端.自动重连 = true;
            _IN上下文 = new N上下文();
            __IN网络节点.收到消息 += (__远端地址, __消息) =>
            {
                var __报文 = H报文注册.解码(__消息);
                if (__报文 == null)
                {
                    return;
                }
                _IN上下文.收到报文(__远端地址, __报文);
            };
            __IN网络节点.已断开 += () => H日志输出.记录("客户端: 与服务器断开", string.Empty);
            __IN网络节点.已连接 += () =>
            {
                连接正常 = true;
                On已连接();
                On收到了通知(new M通知
                {
                    对象 = "系统",
                    概要 = "欢迎进入",
                    详细 = "",
                    重要性 = "普通"
                });

                Task.Factory.StartNew(() =>
                {
                    byte[] __心跳 = new P心跳().编码();
                    while (__IN网络节点.连接正常)
                    {
                        __IN网络节点.异步发送(__心跳);
                        Thread.Sleep(10000);
                    }
                });
                Task.Factory.StartNew(() =>
                {
                    _最后心跳时间 = DateTime.Now;
                    while (__IN网络节点.连接正常)
                    {
                        if (_最后心跳时间.AddMilliseconds(_心跳频率 * 5) < DateTime.Now)
                        {
                            On已断开(false);
                        }
                        Thread.Sleep(_心跳频率);
                    }
                });
            };
            H日志输出.记录("配置客户端上下文");
            _IN上下文.设置发送方法((__节点, __消息) => __IN网络节点.同步发送(__消息));
            _IN上下文.订阅报文(typeof(P心跳), () => this);
            _IN上下文.订阅报文(typeof(P通知), () => this);

            __IN网络节点.开启();
        }
コード例 #19
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网络节点.开启();
        }
コード例 #20
0
ファイル: N主动会话.cs プロジェクト: zergmk2/K_Basic
 public N主动会话(IN上下文 __上下文, IPEndPoint __远端)
 {
     this._上下文 = __上下文;
     this._远端  = __远端;
 }
コード例 #21
0
 public override void 处理接收(IPEndPoint __远端, N事务 事务, object 负载, IN上下文 __报文分派)
 {
     Console.WriteLine("客户端: 收到心跳");
 }