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); } }
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(); } } }
public bool defaultRun(PacketInterface packet) { PacketType type = (PacketType)packet.type(); //Todo : 공통 처리 패킷에 대한 정의 //switch (type) { //} return(false); }
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_); }
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(); } } }
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 } }
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 } }
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); }
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); }
public void S_ANS_ID_PW_FAIL(PacketInterface rowPacket) { MessageBox.Show("로그인 실패", "로그인", MessageBoxButtons.OK); }
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_); }
public override void S_ANS_EXIT(PacketInterface rowPacket) { }
public void S_ANS_ID_PW_FAIL(PacketInterface rowPacket) { Debug.Log("로그인 실패"); }
public void PK_S_ANS_GAME_EXIT(PacketInterface rowPacket) { }
//Todo : 공통 처리를 아래와 같이 기술합니다 /*static public void exitPacket(PacketInterface packet) * { * Program.programState_.close(); * Application.Exit(); * } */ public abstract void S_ANS_EXIT(PacketInterface rowPacket);
public abstract void run(PacketInterface packet);
public void S_ANS_ENTER_GAME(PacketInterface rowPacket) { Debug.Log("인게임"); SceneManager.LoadScene(2); }