public override void 处理接收(IPEndPoint __远端, N事务 __事务, object __负载, IN上下文 __上下文) { if (收到报文 != null) { 收到报文(__远端, __事务, __负载, __上下文); } }
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); } }); } }
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); } }); } }
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); } }); } }
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网络节点.开启(); }
public override void 处理接收(IPEndPoint __远端, IN事务报文 __报文, IN上下文 __上下文) { var __二进制报文 = __报文 as P二进制报文; if (__二进制报文.对象 is M心跳) { H日志输出.记录("服务器: 收到心跳", __远端.ToString()); } }
public override void 处理接收(IPEndPoint __远端, N事务 事务, object 负载, IN上下文 __上下文) { var __心跳报文 = 负载 as M心跳; if (__心跳报文 != null) { Console.WriteLine("服务器: 收到心跳 " + __远端.ToString()); } }
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); } }
public N事务 开启请求(IPEndPoint __远端, object __负载, IN上下文 __上下文) { var __事务 = new N事务(); 文 = __上下文; 本地凭据 = __上下文.注册请求(this); __事务.发方事务 = 本地凭据; __事务.收方事务 = 0; 文.发送报文(__远端, __事务, __负载); return(__事务); }
public override void 处理接收(IPEndPoint __远端, IN事务报文 __报文, IN上下文 __上下文) { if (__报文 is P心跳) { _最后心跳时间 = DateTime.Now; return; } var __通知 = __报文 as P通知; if (__通知 != null) { On收到了通知(__通知.通知); return; } }
public override void 处理接收(IPEndPoint __远端, IN事务报文 __报文, IN上下文 __上下文) { if (__报文 is P心跳) { _最后心跳时间 = DateTime.Now; return; } var __通知 = __报文 as P通知; if (__通知 != null) { On收到了通知(__通知.通知); return; } }
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会话参数(__远端, __负载, __发送响应, __发送通知)); } }
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网络节点.开启(); }
public N主动会话(IN上下文 __上下文) { this._上下文 = __上下文; }
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); } }
public override void 处理接收(IPEndPoint __远端, IN事务报文 __报文, IN上下文 __报文分派) { H日志输出.记录("客户端: 收到心跳"); }
public abstract void 处理接收(IPEndPoint __远端, N事务 事务, object 负载, IN上下文 __上下文);
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网络节点.开启(); }
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网络节点.开启(); }
public N主动会话(IN上下文 __上下文, IPEndPoint __远端) { this._上下文 = __上下文; this._远端 = __远端; }
public override void 处理接收(IPEndPoint __远端, N事务 事务, object 负载, IN上下文 __报文分派) { Console.WriteLine("客户端: 收到心跳"); }