/// <summary> /// 받은 데이터를 처리한다.(주로 서버에서 사용) /// </summary> /// <param name="packetManager">패킷 매니저</param> /// <param name="packetHandlerManager">패킷 핸들러 매니저</param> /// <param name="receiveBuffer">데이터가 저장되어 있는 버퍼</param> /// <param name="receiveBufferLength">데이터가 저장되어 있는 버퍼의 길이(데이터의 길이)</param> /// <returns>성공 유무</returns> public override bool Receive( IPacketManager packetManager, cPacketHandlerManager packetHandlerManager, ArraySegment <Byte> receiveBuffer, int receiveBufferSize) { cLogger.Information("encode a received data\r\n"); string data = Encoding.UTF8.GetString(receiveBuffer.Array, 0, receiveBufferSize); data = data.Replace("\0", ""); data = data.Replace("\\", ""); cLogger.Information("unmarshal a received data\r\n"); IPacket packet = Marshaller.Unmarshal(data, packetManager); //AccountID 세팅을 해야 한다 하고라? if (null == packet) { cLogger.Error( "packet is not allocated (account_id: {0}, peer_id: {1}, data: {2}\r\n", PeerId, data); return(false); } cLogger.Information("execute a packet handler\r\n"); packetHandlerManager.Execute(this, packet); cLogger.Information("completed that a received data is executed\r\n"); return(true); }
/// <summary> /// 패킷을 추출한다. /// </summary> /// <param name="packetManager">패킷 매니저</param> /// <param name="packetHandlerManager">패킷 핸들러 매니저</param> /// <param name="data">추출할 데이터</param> /// <returns>성공 유무</returns> public bool ExtractPacket(IPacketManager packetManager, cPacketHandlerManager packetHandlerManager, string data) { //딸랑 packet 가 하는짓은 어떤 패킷 핸들러의 ResultCode 의 값이 success 인지 디시리얼된 값을 가져오는 짓이다. IPacket packet = Marshaller.Unmarshal(data, packetManager); if (null == packet) { return(false); } //그럼 다시 이걸 핸들 메니저의 실행으로 가면 packetHandlerManager.Execute(this, packet); return(true); }