Ejemplo n.º 1
0
        public void receive()
        {
            try {
                while (this.isConnected())
                {
                    Byte[] packetByte = new Byte[client_.ReceiveBufferSize];

                    Int32 offset  = 0;
                    Int32 readLen = stream_.Read(packetByte, offset, packetByte.Length);

                    // 패킷 난독화
                    PacketObfuscation.decodingHeader(ref packetByte, sizeof(Int32));

                    Int32 packetLen = PacketUtil.decodePacketLen(packetByte, ref offset);

                    while (readLen < packetLen)
                    {
                        Byte[] remainPacket = new Byte[client_.ReceiveBufferSize];
                        Int32  remainLen    = 0;
                        remainLen = stream_.Read(remainPacket, 0, remainPacket.Length);
                        Buffer.BlockCopy(remainPacket, 0, packetByte, readLen, remainLen);
                        readLen += remainLen;
                    }

                    Byte[] packetData = new Byte[client_.ReceiveBufferSize];
                    Buffer.BlockCopy(packetByte, offset, packetData, 0, readLen - offset);
                    PacketObfuscation.decodingData(ref packetData, packetData.Length);

                    PacketInterface rowPacket = PacketUtil.packetAnalyzer(packetData);
                    if (rowPacket == null && this.isConnected())
                    {
                        //MessageBox.Show("잘못된 패킷이 수신되었습니다", "error", MessageBoxButtons.OK);
                        //Application.Exit();
                    }
                    packetProcee_.run(rowPacket);
                }
                this.close();
            } catch (Exception e) {
                if (this.isConnected())
                {
                    //MessageBox.Show("잘못된 처리 : " + e.ToString(), "error", MessageBoxButtons.OK);
                    //Application.Exit();
                }
            }
        }