void NetworkReadProcess()
        {
            while (IsNetworkThreadRunning)
            {
                System.Threading.Thread.Sleep(32);

                if (Network.IsConnected() == false)
                {
                    continue;
                }

                var recvData = Network.Receive();

                if (recvData.Count > 0)
                {
                    PacketBuffer.Write(recvData.Array, recvData.Offset, recvData.Count);

                    while (true)
                    {
                        var data = PacketBuffer.Read();
                        if (data.Count < 1)
                        {
                            break;
                        }

                        var packet = new PacketData();
                        packet.DataSize = (short)(data.Count - PacketHeaderSize);
                        packet.PacketID = BitConverter.ToInt16(data.Array, data.Offset + 2);
                        packet.BodyData = new byte[packet.DataSize];
                        Buffer.BlockCopy(data.Array, (data.Offset + PacketHeaderSize), packet.BodyData, 0, (data.Count - PacketHeaderSize));

                        lock (((System.Collections.ICollection)RecvPacketQueue).SyncRoot)
                        {
                            RecvPacketQueue.Enqueue(packet);
                        }
                    }
                }
                else
                {
                    var packet = new PacketData();
                    packet.PacketID = (short)PACKET_ID.SYSTEM_CLIENT_DISCONNECTD;
                    packet.DataSize = 0;

                    lock (((System.Collections.ICollection)RecvPacketQueue).SyncRoot)
                    {
                        RecvPacketQueue.Enqueue(packet);
                    }
                }
            }
        }
Ejemplo n.º 2
0
    void MakePacket()
    {
        byte[] recvData;
        var    headerSize = PacketDef.PacketHeader.PacketHeaderSize;

        while (RecvQueue.TryDequeue(out recvData) == true)
        {
            PacketBufferManager.Write(recvData, 0, recvData.Length);

            var packet = PacketBufferManager.Read();
            if (packet.Count < 1)
            {
                break;
            }

            var packetData = new PacketDef.PacketData();

            packetData.PacketHeader.PacketSize = (UInt16)(packet.Count - headerSize);
            packetData.PacketHeader.PacketID   = BitConverter.ToUInt16(packet.Array, packet.Offset + 2);
            packetData.PacketHeader.PacketType = packet.Array[4];
            packetData.PacketBody = new byte[packetData.PacketHeader.PacketSize];
            Buffer.BlockCopy(packet.Array, packet.Offset + headerSize, packetData.PacketBody, 0, packet.Count - headerSize);

            PacketQueue.Enqueue(packetData);
            //var needPacketSize = BitConverter.ToUInt16(recvData, 0);

            //PacketDef.PacketData newPacketData = new PacketDef.PacketData();

            //newPacketData.PacketHeader.PacketSize = needPacketSize;
            //newPacketData.PacketHeader.PacketID = BitConverter.ToUInt16(recvData, 2);
            //newPacketData.PacketHeader.PacketType = recvData[4];

            //newPacketData.PacketBody = new byte[needPacketSize - headerSize];
            //Buffer.BlockCopy(recvData, headerSize, newPacketData.PacketBody, 5, recvData.Length - headerSize);

            //needPacketSize -= (UInt16)recvData.Length;

            //while(needPacketSize != 0)
            //{
            //    if(RecvQueue.TryDequeue(out recvData) == true)
            //    {

            //    }
            //}

            //PacketQueue.Enqueue(newPacketData);
        }
    }
Ejemplo n.º 3
0
        // 수신 처리 쓰레드
        void NetworkReadProcess()
        {
            const Int16 PacketHeaderSize = PacketDef.PACKET_HEADER_SIZE;

            while (IsNetworkThreadRunning)
            {
                if (NetWork.IsConnected() == false)
                {
                    System.Threading.Thread.Sleep(1);
                    continue;
                }

                var recvData = NetWork.Receive();

                if (recvData != null)
                {
                    PacketBuffer.Write(recvData.Item2, 0, recvData.Item1);

                    while (true)
                    {
                        var data = PacketBuffer.Read();

                        if (data.Count < 1)
                        {
                            break;
                        }

                        var packet = new PacketData();
                        packet.DataSize = (short)(data.Count - PacketHeaderSize);
                        packet.PacketID = BitConverter.ToInt16(data.Array, data.Offset + 2);
                        packet.Type     = (SByte)data.Array[(data.Offset + 4)];
                        packet.BodyData = new byte[packet.DataSize];

                        Buffer.BlockCopy(data.Array, (data.Offset + PacketHeaderSize), packet.BodyData, 0, (data.Count - PacketHeaderSize));
                        lock (((System.Collections.ICollection)RecvPacketQueue).SyncRoot)
                        {
                            RecvPacketQueue.Enqueue(packet);
                        }
                    }
                }
            }
        }
Ejemplo n.º 4
0
            //네트워크에서 읽어내는 프로세스 
            void NetworkReadProcess()
            {
                while (IsNetworkThreadRunning)
                {
                    Thread.Sleep(1);
                    if (Network.IsConnected() == false)
                    {
                        continue;
                    }
                    //연결 여부를 확인해서 끊겼다면 처음으로 돌아간다.

                    var recvData = Network.Receive();
                    //Network 변수에서 데이터를 받음

                    if (recvData.Count > 0)
                    {
                        //이 데이터에 뭔가가 있을 경우
                        PacketBuffer.Write(recvData.Array, recvData.Offset, recvData.Count);
                        //패킷 버퍼에 해당하는 내용을 입력시킨다.
                        while (true)
                        {
                            var data = PacketBuffer.Read();
                            if (data.Count < 1)
                            {
                                break;
                            }

                            var packet = GetBindAck(data);

                            lock (recv_lock)
                            {
                                RecvPacketList.Add(packet);
                            }
                        }

                        PacketBuffer.Compress();
                    }
                }
            }