void InvokePacketEvent(PacketRaw packetRaw) { switch ((PacketId)packetRaw.PecketID) { case PacketId.ID_GAMESEVER_RES_GAMESERVER_ENTER: break; } }
void RecvCallback(IAsyncResult asyncResult) { if (isConnected == false) { Debug.LogAssertion("Not Connected! Recv Packet Failed"); return; } Debug.Log("=====================Recive Callback"); AsyncRecvStateObject asyncRecvData = (AsyncRecvStateObject)asyncResult.AsyncState; try { asyncRecvData.recvSize += asyncRecvData.socket.EndReceive(asyncResult); asyncRecvData.readPosition = 0; } catch (SocketException ex) { ProcessException(ex); return; } Debug.Log("=====================Recive Parse Start" + asyncRecvData.recvSize); #region parse raw packet while (true) { //헤더 조차 못받아 왔다면 더 기다린다. if (asyncRecvData.recvSize < NetworkProperty.PacketHeaderSize) { break; } var id = BitConverter.ToInt32(asyncRecvData.buffer, asyncRecvData.readPosition + 0); var bodySize = BitConverter.ToInt32(asyncRecvData.buffer, asyncRecvData.readPosition + 4); var packetSize = NetworkProperty.PacketHeaderSize + bodySize; if (asyncRecvData.recvSize < NetworkProperty.PacketHeaderSize + bodySize) { break; } Debug.Log("=====================Parse body size" + packetSize); var bodyJson = NetworkProperty.NetworkEncoding.GetString(asyncRecvData.buffer, asyncRecvData.readPosition + 8, bodySize); Debug.Log("=====================Parse body size" + asyncRecvData.buffer); PacketRaw packetRaw = new PacketRaw { PecketID = id, BodySize = bodySize, Data = bodyJson }; Debug.Log("Receive Packet(id = " + id + " ,bodySize = " + bodySize); lock (this) { packetQueue.Enqueue(packetRaw); } asyncRecvData.readPosition += packetSize; asyncRecvData.recvSize -= packetSize; } #endregion #region shift remain data to start for (int i = 0; i < asyncRecvData.recvSize; ++i) { asyncRecvData.buffer[i] = asyncRecvData.buffer[asyncRecvData.readPosition + i]; } #endregion try { asyncRecvData.socket.BeginReceive( asyncRecvData.buffer, asyncRecvData.recvSize, asyncRecvData.buffer.Length - asyncRecvData.recvSize, SocketFlags.None, recvCallback, asyncRecvData); } catch (SocketException ex) { ProcessException(ex); Debug.Log("Receive Reserve Error"); } Debug.Log("Receive Reserve"); }