81 lines
2.0 KiB
C#
81 lines
2.0 KiB
C#
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
using System;
|
|
using System.IO;
|
|
|
|
namespace EpicGames.Tracing.UnrealInsights
|
|
{
|
|
public class StreamHeader
|
|
{
|
|
public const uint MagicTrc = 1414677317; // TRCE
|
|
public const uint MagicTrc2 = 1414677298; // TRC2
|
|
|
|
uint _magicFourCc;
|
|
ushort _metadataSize;
|
|
ushort _metadataField0;
|
|
ushort _controlPort;
|
|
|
|
byte _transportVersion;
|
|
byte _protocolVersion;
|
|
|
|
private StreamHeader()
|
|
{
|
|
}
|
|
|
|
public static StreamHeader Default()
|
|
{
|
|
StreamHeader handshake = new StreamHeader();
|
|
handshake._magicFourCc = MagicTrc;
|
|
handshake._transportVersion = 3;
|
|
handshake._protocolVersion = 5;
|
|
return handshake;
|
|
}
|
|
|
|
public void Serialize(BinaryWriter writer)
|
|
{
|
|
if (_magicFourCc != MagicTrc && _magicFourCc != MagicTrc2)
|
|
{
|
|
throw new ArgumentException("Only support magic number TRCE and TRC2");
|
|
}
|
|
writer.Write(_magicFourCc);
|
|
if (_magicFourCc == MagicTrc2)
|
|
{
|
|
if (_metadataSize != 4)
|
|
{
|
|
throw new ArgumentException("Only support metadata size of 4 bytes (got " + _metadataSize + ")");
|
|
}
|
|
writer.Write(_metadataSize);
|
|
writer.Write(_metadataField0);
|
|
writer.Write(_controlPort);
|
|
}
|
|
writer.Write(_transportVersion);
|
|
writer.Write(_protocolVersion);
|
|
}
|
|
|
|
public static StreamHeader Deserialize(BinaryReader reader)
|
|
{
|
|
StreamHeader header = new StreamHeader();
|
|
header._magicFourCc = reader.ReadUInt32();
|
|
if (header._magicFourCc != MagicTrc && header._magicFourCc != MagicTrc2)
|
|
{
|
|
throw new ArgumentException("Only support magic number TRCE and TRC2");
|
|
}
|
|
|
|
if (header._magicFourCc == MagicTrc2)
|
|
{
|
|
header._metadataSize = reader.ReadUInt16();
|
|
if (header._metadataSize != 4)
|
|
{
|
|
throw new ArgumentException("Only support metadata size of 4 bytes (got " + header._metadataSize + ")");
|
|
}
|
|
|
|
header._metadataField0 = reader.ReadUInt16();
|
|
header._controlPort = reader.ReadUInt16();
|
|
}
|
|
|
|
header._transportVersion = reader.ReadByte();
|
|
header._protocolVersion = reader.ReadByte();
|
|
return header;
|
|
}
|
|
}
|
|
} |