Esempio n. 1
0
        public void BroadcastEvent(string url, object[] data, Func <IOnPresenterBroadcast, bool> validater, bool needReceiver = false)
        {
            List <Component> list;

            if (!_registedEvents.TryGetValue(url, out list))
            {
                if (needReceiver)
                {
                    throw new Exception("can not find registed event " + url);
                }
                else
                {
                    return;
                }
            }
            list.RemoveAll(linker => linker == null);

            var toBroadCastEvent = validater == null ? list : list.Where(e => validater((IOnPresenterBroadcast)e)).ToList();

            if (toBroadCastEvent.Count() == 0)
            {
                if (needReceiver)
                {
                    throw new Exception("can not find registed event " + url);
                }
                else
                {
                    return;
                }
            }
            var toSendArgs = new List <MToken>();

            for (var i = 0; i < data.Length; i++)
            {
                var d   = data[i];
                var arg = d is MToken ? (MToken)d : MToken.FromObject(d);
                toSendArgs.Add(arg);
            }

            for (var i = 0; i < toBroadCastEvent.Count; i++)
            {
                var target = toBroadCastEvent[i] as IOnPresenterBroadcast;
                target.OnEvent(toSendArgs.ToArray());
            }
        }
Esempio n. 2
0
        public IPresenterResponse RequestWithMTokens(string url, params MToken[] args)
        {
            PresenterActionInfo action;

            if (!_actionMapping.TryGetValue(url, out action))
            {
                Debug.LogErrorFormat("Can not find requested url : {0} ", url);
                return(new PresenterResponse()
                {
                    StatusCode = 404,
                    ErrorMessage = "Can not find requested url : " + url
                });
            }

            var parameters = action.Method.GetParameters();

            if (parameters.Length != args.Length)
            {
                return(new PresenterResponse()
                {
                    StatusCode = 500,
                    ErrorMessage = string.Format("request parameter count {0} is not equal with action method parameter count {1}",
                                                 parameters.Length, args.Length)
                });
            }

            try
            {
                var pList = new List <object>();
                for (var i = 0; i < args.Length; i++)
                {
                    var parameterType = parameters[i].ParameterType;
                    if (parameterType != typeof(MToken) && !parameterType.IsSubclassOf(typeof(MToken)))
                    {
                        var temp = args[i].ToObject(parameterType);
                        pList.Add(temp);
                    }
                    else
                    {
                        pList.Add(args[i]);
                    }
                }
                var returnValue = action.Method.Invoke(null, pList.ToArray());
                if (returnValue is IPresenterResponse)
                {
                    return((IPresenterResponse)returnValue);
                }

                var data = returnValue is MToken ? (MToken)returnValue : MToken.FromObject(returnValue);
                return(new PresenterResponse()
                {
                    StatusCode = 200,
                    Data = new MToken[] { data }
                });
            }
            catch (Exception e)
            {
                Debug.LogException(e);
                return(new PresenterResponse()
                {
                    StatusCode = 500,
                    ErrorMessage = e.Message
                });
            }
        }
Esempio n. 3
0
 void Update()
 {
     lock (_asyncActionTasks)
     {
         for (var i = 0; i < _asyncActionTasks.Count; i++)
         {
             var task = _asyncActionTasks[i];
             if (task.Completed)
             {
                 if (task.CallLinker == null)
                 {
                     Debug.LogWarningFormat("liner {0} is already destroyed", task.CallerName);
                 }
                 else
                 {
                     var responseArgs = task.Data.Select(a => a is MToken ? (MToken)a : MToken.FromObject(a)).ToArray();
                     task.OnResponse(new PresenterResponse()
                     {
                         StatusCode = 200,
                         Data       = responseArgs
                     });
                 }
             }
         }
         _asyncActionTasks.RemoveAll(a => a.Completed);
     }
 }