Пример #1
0
        public void receive()
        {
            if (stream_.DataAvailable)
            {
                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())
                {
                    Debug.Log("잘못된 패킷이 수신되었습니다");
                }

                packetProcee_.run(rowPacket);
            }
        }
Пример #2
0
        public void sendPacket(PacketInterface packet)
        {
            try {
                packet.encode();
                MemoryStream packetBlock = new MemoryStream();

                Int32 packetLen = sizeof(Int32) + (Int32)packet.getStream().Length;

                Byte[] packetHeader = BitConverter.GetBytes(packetLen);
                PacketObfuscation.encodingHeader(ref packetHeader, (int)packetHeader.Length);
                packetBlock.Write(packetHeader, 0, (Int32)packetHeader.Length);

                Byte[] packetData = packet.getStream().ToArray();
                PacketObfuscation.encodingData(ref packetData, (int)packetData.Length);
                packetBlock.Write(packetData, 0, (Int32)packetData.Length);

                Byte[] packetBytes = packetBlock.ToArray();
                stream_.Write(packetBytes, 0, (int)packetBlock.Length);
                stream_.Flush();

                packetBlock = null;
            } catch (Exception e) {
                if (this.isConnected())
                {
                    MessageBox.Show("잘못된 처리 : " + e.ToString(), "error", MessageBoxButtons.OK);
                    Application.Exit();
                }
            }
        }
Пример #3
0
        public bool defaultRun(PacketInterface packet)
        {
            PacketType type = (PacketType)packet.type();

            //Todo : 공통 처리 패킷에 대한 정의
            //switch (type) {

            //}
            return(false);
        }
Пример #4
0
        public void S_ANS_CHATTING(PacketInterface rowPacket)
        {
            Debug.Log("Enter PK_S_ANS_CHATTING");

            PK_S_ANS_CHATTING packet = (PK_S_ANS_CHATTING)rowPacket;

            //받은 내용 표시하기.
            ChatWindow.Instance.packet_name = packet.name_;
            ChatWindow.Instance.packet_text = packet.text_;
            ChatWindow.Instance.SendMessageToChat(packet.name_ + packet.text_);
        }
Пример #5
0
        public void S_ANS_ID_PW_SUCCESS(PacketInterface rowPacket)
        {
            PK_S_ANS_ID_PW_SUCCESS packet = (PK_S_ANS_ID_PW_SUCCESS)rowPacket;

            Program.programState_.setState(PROGRAM_STATE.CHATTING, packet.ip_, packet.port_);
            Program.programState_.setName(packet.name_);

            PK_C_REQ_REGIST_CHATTING_NAME rPacket = new PK_C_REQ_REGIST_CHATTING_NAME();

            rPacket.name_ = packet.name_;
            Program.programState_.sendPacket(rPacket);
        }
        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();
                }
            }
        }
Пример #7
0
        public static PacketInterface packetAnalyzer(Byte[] packetByte)
        {
            Int32           offset     = 0;
            Int64           packetType = PacketUtil.decodePacketType(packetByte, ref offset);
            PacketInterface packet     = PacketFactory.getPacket(packetType);

            if (packet == null)
            {
                return(null);
            }

            // 데이터가 있으면 decoding 해서 넘기기
            if (offset < packetByte.Length)
            {
                packet.decode(packetByte, ref offset);
            }
            return(packet);
        }
        public override void run(PacketInterface packet)
        {
            PacketType type = (PacketType)packet.type();

            switch (type)
            {
            case PacketType.E_S_ANS_CHATTING:
                contents_.recvChatting(packet);
                return;
            }

            if (base.defaultRun(packet) == false)
            {
#if DEBUG
                MessageBox.Show("잘못된 패킷이 수신되었습니다 : " + type.ToString(), "error", MessageBoxButtons.OK);
                Application.Exit();
#endif
            }
        }
        public override void run(PacketInterface packet)
        {
            PacketType type = (PacketType)packet.type();

            Debug.Log("받은 채팅 패킷" + type);
            switch (type)
            {
            case PacketType.E_S_ANS_CHATTING:
                contents_.S_ANS_CHATTING(packet);
                return;
            }

            if (base.defaultRun(packet) == false)
            {
#if DEBUG
                Debug.Log("잘못된 패킷이 수신되었습니다 : ");
#endif
            }
        }
Пример #10
0
        public override void run(PacketInterface packet)
        {
            PacketType type = (PacketType)packet.type();

            Debug.Log("받은 게임 패킷" + type);
            switch (type)
            {
            case PacketType.E_S_ANS_INTO_ROOM:
                contents_.S_ANS_ENTER_GAME(packet);
                return;

                // 패킷 타입에 따라 처리할 내용 작성하기!
            }

            if (base.defaultRun(packet) == false)
            {
#if DEBUG
                Debug.Log("잘못된 패킷이 수신되었습니다 : ");
#endif
            }
        }
Пример #11
0
        public void S_ANS_ENTER_GAME(PacketInterface rowPacket)
        {
            //Debug.Log("");
            PK_S_ANS_ENTER_GAME packet = (PK_S_ANS_ENTER_GAME)rowPacket;

            //수정!!!  데베 연결이 끝나면 아이피 포트 서버에서 받아오기.
            GameObject.Find("GameNetWork").GetComponent <GameNetWork>().Open("127.0.0.1", 9200);
            GameObject.Find("ChattingNetWork").GetComponent <ChattingNetWork>().Open("127.0.0.1", 9100);


            PK_C_REQ_REGIST_NAME packet_ = new PK_C_REQ_REGIST_NAME();

            packet_.name_ = packet.name_;

            GameObject.Find("ChattingNetWork").GetComponent <ChattingNetWork>().sendPacket(packet_);

            GameObject.Find("LoginNetWork").GetComponent <LoginNetWork>().set_My_name(packet_.name_);
            GameObject.Find("LoginNetWork").GetComponent <LoginNetWork>().disconnect();
            //로비로 이동!
            SceneManager.LoadScene(1);
        }
Пример #12
0
        public override void run(PacketInterface packet)
        {
            PacketType type = (PacketType)packet.type();

            switch (type)
            {
            case PacketType.E_S_ANS_ID_PW_FAIL:
                contents_.S_ANS_ID_PW_FAIL(packet);
                return;

            case PacketType.E_S_ANS_ID_PW_SUCCESS:
                contents_.S_ANS_ID_PW_SUCCESS(packet);
                return;
            }
            if (base.defaultRun(packet) == false)
            {
#if DEBUG
                //MessageBox.Show("잘못된 패킷이 수신되었습니다 : " + type.ToString(), "error", MessageBoxButtons.OK);
                //Application.Exit();
#endif
            }
        }
 public void sendPacket(PacketInterface packet)
 {
     this.formState_.sendPacket(ref packet);
 }
Пример #14
0
 public void S_ANS_ID_PW_FAIL(PacketInterface rowPacket)
 {
     MessageBox.Show("로그인 실패", "로그인", MessageBoxButtons.OK);
 }
Пример #15
0
 public void sendPacket(PacketInterface packet)
 {
     network_.sendPacket(packet);
 }
        public void recvChatting(PacketInterface rowPacket)
        {
            PK_S_ANS_CHATTING packet = (PK_S_ANS_CHATTING)rowPacket;

            Program.programState_.putMessage(packet.name_ + packet.text_);
        }
Пример #17
0
 public override void S_ANS_EXIT(PacketInterface rowPacket)
 {
 }
Пример #18
0
 public void S_ANS_ID_PW_FAIL(PacketInterface rowPacket)
 {
     Debug.Log("로그인 실패");
 }
Пример #19
0
 public void PK_S_ANS_GAME_EXIT(PacketInterface rowPacket)
 {
 }
Пример #20
0
        //Todo : 공통 처리를 아래와 같이 기술합니다

        /*static public void exitPacket(PacketInterface packet)
         * {
         *  Program.programState_.close();
         *  Application.Exit();
         * }
         */
        public abstract void S_ANS_EXIT(PacketInterface rowPacket);
Пример #21
0
 public abstract void run(PacketInterface packet);
Пример #22
0
 public void S_ANS_ENTER_GAME(PacketInterface rowPacket)
 {
     Debug.Log("인게임");
     SceneManager.LoadScene(2);
 }