Example #1
0
        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);
            //}
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        private bool 处理查询对象列表(N会话参数 __会话参数)
        {
            var __对象列表 = new M对象列表查询结果();

            __对象列表.AddRange(_所有对象.Values.ToList().Select(q => q().概要));
            __会话参数.发送响应(__对象列表);
            return(true);
        }
Example #5
0
        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收到了事件(__事件);
 }
Example #7
0
        private void 处理取消订阅事件(N会话参数 __会话参数)
        {
            var __取消订阅 = __会话参数.负载 as M注销事件;
            var __对象名称 = __取消订阅.对象名称;
            var __事件名称 = __取消订阅.事件名称;
            var __远端   = __会话参数.远端;
            var __事件标识 = string.Format(_事件标识结构, __对象名称, __事件名称);

            List <IPEndPoint> __订阅地址列表;

            if (_所有事件订阅.TryGetValue(__事件标识, out __订阅地址列表))
            {
                if (__订阅地址列表.Contains(__远端))
                {
                    __订阅地址列表.Remove(__远端);
                }
            }
        }
Example #8
0
        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(_事件标识结构, __对象名称, __事件名称);

            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);
            //}
        }
Example #10
0
 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;
 }
Example #11
0
 private bool 处理查询对象明细(N会话参数 __会话参数)
 {
     var __对象名称 = (__会话参数.负载 as M对象明细查询请求).对象名称;
     if (_所有对象.ContainsKey(__对象名称))
     {
         var __对象 = _所有对象[__对象名称]();
         __会话参数.发送响应(__对象.明细);
     }
     else
     {
         H日志输出.记录("无此对象: " + __对象名称);
     }
     return true;
 }
Example #12
0
 private bool 处理查询对象列表(N会话参数 __会话参数)
 {
     var __对象列表 = new M对象列表查询结果();
     __对象列表.AddRange(_所有对象.Values.ToList().Select(q => q().概要));
     __会话参数.发送响应(__对象列表);
     return true;
 }
Example #13
0
 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;
 }
Example #14
0
        private void 处理取消订阅事件(N会话参数 __会话参数)
        {
            var __取消订阅 = __会话参数.负载 as M注销事件;
            var __对象名称 = __取消订阅.对象名称;
            var __事件名称 = __取消订阅.事件名称;
            var __远端 = __会话参数.远端;
            var __事件标识 = string.Format(_事件标识结构, __对象名称, __事件名称);

            List<IPEndPoint> __订阅地址列表;
            if (_所有事件订阅.TryGetValue(__事件标识, out __订阅地址列表))
            {
                if (__订阅地址列表.Contains(__远端))
                {
                    __订阅地址列表.Remove(__远端);
                }
            }
        }