private byte[] CreatePacket <T>(IPacket <T> packet) // 패킷 만드는 메서드 { byte[] packetData = packet.GetPacketData(); // 패킷의 데이터를 바이트화 // 헤더 생성 PacketHeader header = new PacketHeader(); HeaderSerializer serializer = new HeaderSerializer(); header.length = (short)packetData.Length; // 패킷 데이터의 길이를 헤더에 입력 header.id = (byte)packet.GetPacketId(); // 패킷 데이터에서 ID를 가져와 헤더에 입력 //Debug.Log("패킷 전송 - id : " + header.id.ToString() + " length :" + header.length); byte[] headerData = null; if (serializer.Serialize(header) == false) { return(null); } headerData = serializer.GetSerializedData(); // 헤더 데이터를 패킷 바이트로 변환 byte[] data = new byte[headerData.Length + header.length]; // 최종 패킷의 길이 = 헤더패킷길이+내용패킷길이 // 헤더와 내용을 하나의 배열로 복사 int headerSize = Marshal.SizeOf(header.id) + Marshal.SizeOf(header.length); Buffer.BlockCopy(headerData, 0, data, 0, headerSize); Buffer.BlockCopy(packetData, 0, data, headerSize, packetData.Length); return(data); }
byte[] CreatePacket <T>(IPacket <T> data, ClientPacketId Id) { byte[] msg = data.GetPacketData(); byte[] header = CreateHeader(data, Id); byte[] packet = CombineByte(header, msg); return(packet); }
byte[] CreateHeader <T>(IPacket <T> data, ClientPacketId Id) { byte[] msg = data.GetPacketData(); HeaderData headerData = new HeaderData(); HeaderSerializer headerSerializer = new HeaderSerializer(); headerData.Id = (byte)Id; headerData.length = (short)msg.Length; headerSerializer.Serialize(headerData); byte[] header = headerSerializer.GetSerializedData(); return(header); }