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); }
//-------------[ 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)); }
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())); } }
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); } } }); }
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(); }
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) {} } } }
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); } } }
public bool SendQuest(Quest quest, AnswerDelegate callback, int timeout = 0) { AnswerDelegateCallback cb = new AnswerDelegateCallback(callback); return(SendQuest(quest, cb, timeout)); }
public AnswerDelegateCallback(AnswerDelegate answerDelegate) { callback = answerDelegate; }
internal readonly AnswerDelegate onAnswer; // 接收回复的回调,超时也会回调(传入的bean为null); internal BeanContext(int s, AnswerDelegate a) { askSec = (int)((DateTime.Now.Ticks - startTicks) / 10000000); serial = s; onAnswer = a; }
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; } }
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); } } }