private void 处理订阅事件(N会话参数 __会话参数) { var __订阅事件 = __会话参数.负载 as M订阅事件; var __对象名称 = __订阅事件.对象名称; var __事件名称 = __订阅事件.事件名称; var __远端 = __会话参数.远端; var __事件标识 = string.Format(_事件标识结构, __对象名称, __事件名称); lock (_lockobj) { if (!_所有事件订阅.ContainsKey(__事件标识)) { _所有事件订阅[__事件标识] = new List <IPEndPoint>(); } if (!_所有事件订阅[__事件标识].Contains(__远端)) { _所有事件订阅[__事件标识].Add(__远端); H日志输出.记录("接收[M订阅事件]", string.Format("[{0}] {1}.{2}", __远端, __对象名称, __事件名称), TraceEventType.Information); } } //下列代码有同步问题 //var __订阅地址列表 = _所有事件订阅.GetOrAdd(__事件标识, q => new List<IPEndPoint>()); //if (!__订阅地址列表.Contains(__远端)) //{ // __订阅地址列表.Add(__远端); // H日志输出.记录("接收[M订阅事件]", string.Format("[{0}] {1}.{2}", __远端, __对象名称, __事件名称), TraceEventType.Information); //} }
private bool 处理查询属性值(N会话参数 __会话参数) { var __请求 = __会话参数.负载 as M属性值查询请求; var __对象名称 = __请求.对象名称; var __属性名称 = __请求.属性名称; if (_所有对象.ContainsKey(__对象名称)) { var __对象 = _所有对象[__对象名称](); var __执行成功 = true; var __执行描述 = ""; var __返回值 = ""; try { __返回值 = __对象.计算属性(__属性名称); } catch (Exception ex) { H日志输出.记录(ex); __执行描述 = ex.Message; __执行成功 = false; } var 响应 = new M属性值查询结果 { 成功 = __执行成功, 描述 = __执行描述, 返回值 = __返回值 }; __会话参数.发送响应(响应); } return(true); }
private bool 处理执行方法(N会话参数 __会话参数) { var __请求 = __会话参数.负载 as M方法执行请求; var __对象名称 = __请求.对象名称; var __方法名称 = __请求.方法名称; var __参数 = __请求.实参列表; if (_所有对象.ContainsKey(__对象名称)) { var __对象 = _所有对象[__对象名称](); var __方法 = __对象.明细.方法列表.Find(q => q.称 == __方法名称); if (__方法 != null) { var __执行成功 = true; var __执行描述 = ""; var __返回值 = ""; try { __返回值 = __对象.执行方法(__方法名称, M实参.列表转字典(__参数), __会话参数.远端); } catch (Exception ex) { H日志输出.记录(ex); __执行描述 = ex.Message; __执行成功 = false; } var 响应 = new M方法执行结果 { 成功 = __执行成功, 描述 = __执行描述, 返回值 = __返回值 }; __会话参数.发送响应(响应); } } return(true); }
private bool 处理查询对象列表(N会话参数 __会话参数) { var __对象列表 = new M对象列表查询结果(); __对象列表.AddRange(_所有对象.Values.ToList().Select(q => q().概要)); __会话参数.发送响应(__对象列表); return(true); }
private bool 处理查询对象明细(N会话参数 __会话参数) { var __对象名称 = (__会话参数.负载 as M对象明细查询请求).对象名称; if (_所有对象.ContainsKey(__对象名称)) { var __对象 = _所有对象[__对象名称](); __会话参数.发送响应(__对象.明细); } else { H日志输出.记录("无此对象: " + __对象名称); } return(true); }
public void 处理事件(N会话参数 __会话参数) { var __事件 = __会话参数.负载 as M接收事件; var __键 = string.Format(_事件标识结构, __事件.对象名称, __事件.事件名称); if (_事件订阅.查询订阅者数量(__键) == 0) { //H日志输出.记录("注销[M订阅事件]", string.Format("[{0}] {1}.{2}", __会话参数.远端, __事件.对象名称, __事件.事件名称), TraceEventType.Information); if (连接正常) { _N主动会话.通知(new M注销事件 { 对象名称 = __事件.对象名称, 事件名称 = __事件.事件名称 }); } return; } //H日志输出.记录("触发[M订阅事件]", string.Format("[{0}] {1}.{2}", __会话参数.远端, __事件.对象名称, __事件.事件名称), TraceEventType.Information); _事件订阅.触发(__键, M实参.列表转字典(__事件.实参列表)); On收到了事件(__事件); }
private void 处理取消订阅事件(N会话参数 __会话参数) { var __取消订阅 = __会话参数.负载 as M注销事件; var __对象名称 = __取消订阅.对象名称; var __事件名称 = __取消订阅.事件名称; var __远端 = __会话参数.远端; var __事件标识 = string.Format(_事件标识结构, __对象名称, __事件名称); List <IPEndPoint> __订阅地址列表; if (_所有事件订阅.TryGetValue(__事件标识, out __订阅地址列表)) { if (__订阅地址列表.Contains(__远端)) { __订阅地址列表.Remove(__远端); } } }
private void 处理订阅事件(N会话参数 __会话参数) { var __订阅事件 = __会话参数.负载 as M订阅事件; var __对象名称 = __订阅事件.对象名称; var __事件名称 = __订阅事件.事件名称; var __远端 = __会话参数.远端; var __事件标识 = string.Format(_事件标识结构, __对象名称, __事件名称); lock (_lockobj) { if (!_所有事件订阅.ContainsKey(__事件标识)) { _所有事件订阅[__事件标识] = new List<IPEndPoint>(); } if (!_所有事件订阅[__事件标识].Contains(__远端)) { _所有事件订阅[__事件标识].Add(__远端); H日志输出.记录("接收[M订阅事件]", string.Format("[{0}] {1}.{2}", __远端, __对象名称, __事件名称), TraceEventType.Information); } } //下列代码有同步问题 //var __订阅地址列表 = _所有事件订阅.GetOrAdd(__事件标识, q => new List<IPEndPoint>()); //if (!__订阅地址列表.Contains(__远端)) //{ // __订阅地址列表.Add(__远端); // H日志输出.记录("接收[M订阅事件]", string.Format("[{0}] {1}.{2}", __远端, __对象名称, __事件名称), TraceEventType.Information); //} }
private bool 处理查询属性值(N会话参数 __会话参数) { var __请求 = __会话参数.负载 as M属性值查询请求; var __对象名称 = __请求.对象名称; var __属性名称 = __请求.属性名称; if (_所有对象.ContainsKey(__对象名称)) { var __对象 = _所有对象[__对象名称](); var __执行成功 = true; var __执行描述 = ""; var __返回值 = ""; try { __返回值 = __对象.计算属性(__属性名称); } catch (Exception ex) { H日志输出.记录(ex); __执行描述 = ex.Message; __执行成功 = false; } var 响应 = new M属性值查询结果 { 成功 = __执行成功, 描述 = __执行描述, 返回值 = __返回值 }; __会话参数.发送响应(响应); } return true; }
private bool 处理查询对象明细(N会话参数 __会话参数) { var __对象名称 = (__会话参数.负载 as M对象明细查询请求).对象名称; if (_所有对象.ContainsKey(__对象名称)) { var __对象 = _所有对象[__对象名称](); __会话参数.发送响应(__对象.明细); } else { H日志输出.记录("无此对象: " + __对象名称); } return true; }
private bool 处理查询对象列表(N会话参数 __会话参数) { var __对象列表 = new M对象列表查询结果(); __对象列表.AddRange(_所有对象.Values.ToList().Select(q => q().概要)); __会话参数.发送响应(__对象列表); return true; }
private bool 处理执行方法(N会话参数 __会话参数) { var __请求 = __会话参数.负载 as M方法执行请求; var __对象名称 = __请求.对象名称; var __方法名称 = __请求.方法名称; var __参数 = __请求.实参列表; if (_所有对象.ContainsKey(__对象名称)) { var __对象 = _所有对象[__对象名称](); var __方法 = __对象.明细.方法列表.Find(q => q.名称 == __方法名称); if (__方法 != null) { var __执行成功 = true; var __执行描述 = ""; var __返回值 = ""; try { __返回值 = __对象.执行方法(__方法名称, M实参.列表转字典(__参数), __会话参数.远端); } catch (Exception ex) { H日志输出.记录(ex); __执行描述 = ex.Message; __执行成功 = false; } var 响应 = new M方法执行结果 { 成功 = __执行成功, 描述 = __执行描述, 返回值 = __返回值 }; __会话参数.发送响应(响应); } } return true; }
private void 处理取消订阅事件(N会话参数 __会话参数) { var __取消订阅 = __会话参数.负载 as M注销事件; var __对象名称 = __取消订阅.对象名称; var __事件名称 = __取消订阅.事件名称; var __远端 = __会话参数.远端; var __事件标识 = string.Format(_事件标识结构, __对象名称, __事件名称); List<IPEndPoint> __订阅地址列表; if (_所有事件订阅.TryGetValue(__事件标识, out __订阅地址列表)) { if (__订阅地址列表.Contains(__远端)) { __订阅地址列表.Remove(__远端); } } }