Example #1
0
        protected bool ProcessBean(NetSession session, IBean bean)         // 同步处理bean,异常会抛出;
        {
            int serial = bean.Serial;

            if (serial < 0)
            {
                BeanContext beanCtx;
                if (_beanCtxMap.TryGetValue(-serial, out beanCtx))
                {
                    _beanCtxMap.Remove(-serial);
                    AnswerDelegate onAnswer = beanCtx.onAnswer;
                    if (onAnswer != null)
                    {
                        try
                        {
                            onAnswer(bean);
                        }
                        catch (Exception) {}
                        return(true);
                    }
                }
            }
            HandlerDelegate handler;

            if (HandlerMap == null || !HandlerMap.TryGetValue(bean.Type(), out handler))
            {
                return(false);
            }
            handler(session, bean);
            return(true);
        }
        public void Service(FPData data, AnswerDelegate answer)
        {
            if (this._processor == null)
            {
                this._processor = new BaseProcessor();
            }

            this._processor.Service(data, answer);
        }
Example #3
0
        //-------------[ Auth(Login) processing functions ]--------------------------//
        private bool AsyncFetchRtmGateEndpoint(string addressType, AnswerDelegate callback, int timeout)
        {
            Quest quest = new Quest("which");

            quest.Param("what", "rtmGated");
            quest.Param("addrType", addressType);
            quest.Param("proto", "tcp");

            return(dispatch.SendQuest(quest, callback, timeout));
        }
Example #4
0
 public void Service(FPData data, AnswerDelegate answer)
 {
     // TODO
     if (data.GetFlag() == 0)
     {
     }
     if (data.GetFlag() == 1)
     {
     }
 }
            public void Service(FPData data, AnswerDelegate answer)
            {
                if (data.GetFlag() == 0)
                {
                    this._event.FireEvent(new EventData(data.GetMethod(), data.JsonPayload()));
                }

                if (data.GetFlag() == 1)
                {
                    this._event.FireEvent(new EventData(data.GetMethod(), data.MsgpackPayload()));
                }
            }
Example #6
0
        public void Service(FPData data, AnswerDelegate answer)
        {
            string method = null;

            if (data != null)
            {
                method = data.GetMethod();
            }

            if (string.IsNullOrEmpty(method))
            {
                return;
            }

            IProcessor psr = null;

            lock (self_locker) {
                if (this._destroyed)
                {
                    return;
                }

                if (this._processor == null)
                {
                    this._processor = new BaseProcessor();
                }

                psr = this._processor;

                if (!psr.HasPushService(method))
                {
                    if (method != "ping")
                    {
                        return;
                    }
                }
            }

            this.AddService(() => {
                lock (self_locker) {
                    if (psr != null)
                    {
                        psr.Service(data, answer);
                    }
                }
            });
        }
Example #7
0
        public ServerFinder(AnswerDelegate answer, bool local, List <Server> _servers)
        {
            Answer = answer;

            servers = _servers;

            if (local)
            {
                LowPort  = ((Config)Root.Instance.ResourceManager.Load("config/global.config")).GetInteger("lanscanner.scanstart");
                HighPort = ((Config)Root.Instance.ResourceManager.Load("config/global.config")).GetInteger("lanscanner.scanend");
            }

            DiscoverInternetServers = true;
            DiscoverLocalServers    = local;

            client = new UdpClient();

            SendQuery();
        }
Example #8
0
 void CheckAskTimeout()
 {
     for (int nowSec = (int)((DateTime.Now.Ticks - startTicks) / 10000000); _beanCtxQueue.Count > 0;)
     {
         BeanContext beanCtx = _beanCtxQueue.Peek();
         if (nowSec - beanCtx.askSec <= ASK_TIMEOUT)
         {
             return;
         }
         _beanCtxQueue.Dequeue();
         _beanCtxMap.Remove(beanCtx.serial);
         AnswerDelegate onAnswer = beanCtx.onAnswer;
         if (onAnswer != null)
         {
             try
             {
                 onAnswer(null);
             }
             catch (Exception) {}
         }
     }
 }
Example #9
0
 public bool Ask(NetSession session, IBean bean, AnswerDelegate onAnswer = null)
 {
     if (session.Closed || bean == null)
     {
         return(false);
     }
     for (BeanContext beanCtx;;)
     {
         int serial = ++_serialCounter;
         if (serial > 0)
         {
             if (_beanCtxMap.ContainsKey(serial))
             {
                 continue;                                                      // 确保一下;
             }
             _beanCtxMap.Add(serial, beanCtx = new BeanContext(serial, onAnswer));
             _beanCtxQueue.Enqueue(beanCtx);
             bean.Serial = serial;
             Send(session, bean);
             return(true);
         }
         _serialCounter = 0;
     }
 }
        public void Service(FPData data, AnswerDelegate answer)
        {
            if (data == null)
            {
                return;
            }

            bool callCb = true;

            if (RTMConfig.KICKOUT == data.GetMethod())
            {
                callCb = false;
            }

            if (RTMConfig.SERVER_PUSH.kickOutRoom == data.GetMethod())
            {
                callCb = false;
            }

            IDictionary <string, object> payload = null;

            if (data.GetFlag() == 0 && data.JsonPayload() != null)
            {
                try {
                    if (callCb && answer != null)
                    {
                        answer(JSON_PAYLOAD, false);
                    }

                    payload = Json.Deserialize <IDictionary <string, object> >(data.JsonPayload());
                } catch (Exception ex) {
                    ErrorRecorderHolder.recordError(ex);
                }
            }

            if (data.GetFlag() == 1 && data.MsgpackPayload() != null)
            {
                try {
                    if (callCb && answer != null)
                    {
                        answer(MSGPACK_PAYLOAD, false);
                    }

                    using (MemoryStream inputStream = new MemoryStream(data.MsgpackPayload())) {
                        payload = MsgPackFix.Deserialize <IDictionary <string, object> >(inputStream, RTMRegistration.RTMEncoding);
                    }
                } catch (Exception ex) {
                    ErrorRecorderHolder.recordError(ex);
                }
            }

            if (payload != null)
            {
                try {
                    MethodInfo method = this._type.GetMethod(data.GetMethod());

                    if (method != null)
                    {
                        object[] paras = new object[] { payload };
                        method.Invoke(this, paras);
                    }
                } catch (Exception ex) {
                    ErrorRecorderHolder.recordError(ex);
                }
            }
        }
Example #11
0
        public bool SendQuest(Quest quest, AnswerDelegate callback, int timeout = 0)
        {
            AnswerDelegateCallback cb = new AnswerDelegateCallback(callback);

            return(SendQuest(quest, cb, timeout));
        }
Example #12
0
 public AnswerDelegateCallback(AnswerDelegate answerDelegate)
 {
     callback = answerDelegate;
 }
Example #13
0
            internal readonly AnswerDelegate onAnswer; // 接收回复的回调,超时也会回调(传入的bean为null);

            internal BeanContext(int s, AnswerDelegate a)
            {
                askSec   = (int)((DateTime.Now.Ticks - startTicks) / 10000000);
                serial   = s;
                onAnswer = a;
            }
Example #14
0
        private void OnReceiveMsg(object sender, ReceivedMessageEventArgs args)
        {
            HandsetReqMsg request = JsonConvert.DeserializeObject <HandsetReqMsg>(args.Message);

            if (request == null)
            {
                return;
            }

            switch (request.MsgRequestCode)
            {
            case HANDSETMSG_REQ_CODE.MSG_REQ_RUN:
                HandsetReqUAStartMsg run = JsonConvert.DeserializeObject <HandsetReqUAStartMsg>(args.Message);
                if (run != null)
                {
                    RunUADelegate d = new RunUADelegate(RunUA);
                    this.BeginInvoke(d, new object[] { run.CaptureDevice, run.PlaybackDevice });
                }
                break;

            case HANDSETMSG_REQ_CODE.MSG_REQ_ADDACCOUNT:
                HandsetReqAddAccountMsg account = JsonConvert.DeserializeObject <HandsetReqAddAccountMsg>(args.Message);
                if (account != null)
                {
                    AddAccountDelegate d = new AddAccountDelegate(AddAccount);
                    this.BeginInvoke(d, new object[] { account.User, account.Password, account.Domain, account.Proxy, account.IsReg, account.IsAutoAnswer });
                }
                break;

            case HANDSETMSG_REQ_CODE.MSG_REQ_ANSWER:
            {
                AnswerDelegate d = new AnswerDelegate(Answer);
                this.BeginInvoke(d);
            }
            break;

            case HANDSETMSG_REQ_CODE.MSG_REQ_HANGUP:
            {
                HangupDelegate d = new HangupDelegate(Hangup);
                this.BeginInvoke(d);
            }
            break;

            case HANDSETMSG_REQ_CODE.MSG_REQ_MAKECALL:
                HandsetReqMakeCallMsg call = JsonConvert.DeserializeObject <HandsetReqMakeCallMsg>(args.Message);
                if (call != null)
                {
                    MakeCallDelegate d = new MakeCallDelegate(MakeCall);
                    this.BeginInvoke(d, new object[] { call.DestUri });
                }
                break;

            case HANDSETMSG_REQ_CODE.MSG_REQ_RECORDINGDIRCHANGED:
                //更改录音文件的存放路径
                HandsetReqRecordingDirChangedMsg recordingDir = JsonConvert.DeserializeObject <HandsetReqRecordingDirChangedMsg>(args.Message);
                if (recordingDir != null)
                {
                    _recordDir = recordingDir.newRecordingDir;
                }
                break;
            }
        }
Example #15
0
        public ServerFinder(AnswerDelegate answer, bool local, bool internet)
        {
            Answer = answer;

            if(internet)
                servers = GetInternetServerList();

            if (local)
            {
                LowPort = ((Config)Root.Instance.ResourceManager.Load("config/global.config")).GetInteger("lanscanner.scanstart");
                HighPort = ((Config)Root.Instance.ResourceManager.Load("config/global.config")).GetInteger("lanscanner.scanend");
            }

            DiscoverInternetServers = internet;
            DiscoverLocalServers = local;

            client = new UdpClient();

            SendQuery();
        }
        public void Service(FPData data, AnswerDelegate answer)
        {
            bool callCb = true;

            if (RTMConfig.SERVER_PUSH.kickOut == data.GetMethod())
            {
                callCb = false;
            }

            if (RTMConfig.SERVER_PUSH.kickOutRoom == data.GetMethod())
            {
                callCb = false;
            }

            IDictionary <string, object> payload = null;

            if (data.GetFlag() == 0)
            {
                if (callCb)
                {
                    answer(Json.SerializeToString(new Dictionary <string, object>()), false);
                }

                try {
                    payload = Json.Deserialize <IDictionary <string, object> >(data.JsonPayload());
                }catch (Exception ex) {
                    this._event.FireEvent(new EventData("error", ex));
                }
            }

            if (data.GetFlag() == 1)
            {
                if (callCb)
                {
                    using (MemoryStream msgpackStream = new MemoryStream()) {
                        MsgPack.Serialize(new Dictionary <string, object>(), msgpackStream);
                        msgpackStream.Seek(0, SeekOrigin.Begin);

                        answer(msgpackStream.ToArray(), false);
                    }
                }

                try {
                    using (MemoryStream inputStream = new MemoryStream(data.MsgpackPayload())) {
                        payload = MsgPack.Deserialize <IDictionary <string, object> >(inputStream);
                    }
                } catch (Exception ex) {
                    this._event.FireEvent(new EventData("error", ex));
                }
            }

            if (payload != null)
            {
                MethodInfo method = this._type.GetMethod(data.GetMethod());

                if (method != null)
                {
                    object[] paras = new object[] { payload };
                    method.Invoke(this, paras);
                }
            }
        }