void IZoneNodePlayer.ClientFlush(BattleCodec codec) { try { if (pause_logic == false) { lock (mLogicSendingQueue) { if (mLogicSendingQueue.Count > 0) { remote_logic?.BatchInvoke(mLogicSendingQueue); mLogicSendingQueue.Clear(); } } } if (pause_client == false) { if (mSendingQueue.events.Count > 0) { mSendingQueue.sequenceNo = node.ZoneNode.ZoneTick; using (var buffer = MemoryStreamObjectPool.AllocAutoRelease()) { try { if (codec.doEncodeWithHead(mSendingQueue, buffer)) { var notify = BinaryMessage.FromBuffer(client_event_route, buffer); remote_session?.WormholeTransport(notify); } } catch (Exception err) { log.Error(err.Message, err); } finally { mSendingQueue.events.Clear(); } } } } } catch (Exception err) { log.Error(err.Message, err); } }
//-------------------------------------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------------------------------- /// <summary> /// 战斗协议 ClientBattleAction 直接发往AreaService /// </summary> /// <param name="action"></param> public virtual void SendToArea(TypeCodec route_codec, BinaryMessage action) { try { var area = remote_area_service; var enter = enter_game; if (area != null && enter != null) { using (var output = IOStreamObjectPool.AllocOutputAutoRelease(ConnectServer.ClientCodec.Factory)) { output.PutUTF(enter.c2s_roleUUID); output.PutBytes(action.Buffer, action.BufferOffset, action.BufferLength); var to_area = BinaryMessage.FromBuffer(session_battle_action_codec.MessageID, output.Buffer); area.WormholeTransport(to_area); } } } catch (Exception err) { log.Error(err); } }