Example #1
0
 void InvokePacketEvent(PacketRaw packetRaw)
 {
     switch ((PacketId)packetRaw.PecketID)
     {
     case PacketId.ID_GAMESEVER_RES_GAMESERVER_ENTER:
         break;
     }
 }
Example #2
0
    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");
    }