Exemplo n.º 1
0
    void ConnectCallback(IAsyncResult asyncResult)
    {
        try
        {
            socket.EndConnect(asyncResult);
            isConnected = true;
            Debug.Log("Connected to Server IP: " + ipAddress + " Port Number: " + portNum);
        }
        catch (Exception ex)
        {
            Debug.Log("Connection failed" + ex.Message);
            isConnected = false;
            return;
        }

        AsyncRecvStateObject asyncRecvData = new AsyncRecvStateObject(NetworkProperty.BufferSize, socket);

        socket.BeginReceive(
            asyncRecvData.buffer,
            0,
            asyncRecvData.buffer.Length,
            SocketFlags.None,
            recvCallback,
            asyncRecvData);
    }
Exemplo n.º 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");
    }