protected void DispatchPublishMessage(PublishMessageRecievedEvent evt) { Action <PublishMessageRecievedEvent> action; if (mServiceDispatcher.TryGetValue(evt.Message.ServiceType, out action)) { action(evt); } //StartCoroutine(DispatchPublishMessageCoroutine(evt)); }
/// <summary> /// 因为所有CS的包的返回值是在Coroutine中处理的,所以如果直接处理SC的包,会导致包的顺序错乱 /// 把SC的包延迟到下一帧,也在Coroutine中处理,可以在一定程度上避免SC的包比CS的返回值处理的早的问题 /// 实际上如果出现 CSC 的情况,处理的顺序会是 CCS, 所以编码的时候,不能太依赖不同类型包的顺序 /// </summary> /// <param name="evt"></param> /// <returns></returns> private IEnumerator DispatchPublishMessageCoroutine(PublishMessageRecievedEvent evt) { yield return(new WaitForEndOfFrame()); }