コード例 #1
0
    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);
    }
コード例 #2
0
    byte[] CreatePacket <T>(IPacket <T> data, ClientPacketId Id)
    {
        byte[] msg    = data.GetPacketData();
        byte[] header = CreateHeader(data, Id);
        byte[] packet = CombineByte(header, msg);

        return(packet);
    }
コード例 #3
0
    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);
    }