private void Load(string fileName) { var fileBytes = File.ReadAllBytes(fileName); using (var ms = new MemoryStream(fileBytes)) { using (var reader = new BinaryReaderExt(ms)) { reader.ReadBytes(16); var fileCount = reader.ReadInt32(); reader.ReadInt32(); for (var i = 0; i < fileCount; i++) { var file = new FILE(); file.Index = reader.ReadInt32(); reader.ReadBytes(21); file.FileName = reader.ReadAscii(); file.FileName = file.FileName.Substring(0, file.FileName.IndexOf('\0')); // Otherwise windows will crap out reader.ReadBytes(12); var filePos = reader.ReadInt32(); var fileLength = reader.ReadInt32(); var pos = reader.BaseStream.Position; reader.BaseStream.Seek(filePos, SeekOrigin.Begin); file.File = reader.ReadBytes(fileLength); reader.BaseStream.Seek(pos, SeekOrigin.Begin); Files.Add(file); } } } }
public void ExtendedBinaryReaderTest() { var testBytes = new byte[] { 0x15, 0x00, 0x00, 0x00, // Size 0x02, 0x00, 0x00, 0x00, // Id 0x03, 0x00, 0x00, 0x00, // Type 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64, 0x00, 0x00, }; using (var ms = new MemoryStream(testBytes)) { using (var reader = new BinaryReaderExt(ms)) { var sizeTestValue = reader.ReadInt32LittleEndian(); Assert.Equal(21, sizeTestValue); var idTestValue = reader.ReadInt32LittleEndian(); Assert.Equal(2, idTestValue); var typeTestValue = reader.ReadInt32LittleEndian(); Assert.Equal(3, typeTestValue); var payloadTestValue = reader.ReadAscii(); Assert.Equal("Hello World", payloadTestValue); } } }
public RemoteConPacket(byte[] packetBytes, bool useUtf8 = false) { if (useUtf8) { _packetEncoding = Encoding.UTF8; } using (var ms = new MemoryStream(packetBytes)) { using (var reader = new BinaryReaderExt(ms)) { Size = reader.ReadInt32LittleEndian(); // The size field (4-Bytes Little Endian Int) is, according to specification, not included. if (Size + 4 != packetBytes.Length) { throw new LengthMismatchException("packet length mismatch"); } Id = reader.ReadInt32LittleEndian(); var packetType = reader.ReadInt32LittleEndian(); if (!Enum.IsDefined(typeof(PacketType), packetType)) { throw new InvalidPacketTypeException("Invalid packet type"); } Type = (PacketType)Enum.ToObject(typeof(PacketType), packetType); if (!useUtf8) { Payload = reader.ReadAscii(); // Get payload length by subtracting 9 bytes (ID 4-Bytes, Type 4-Bytes, Null-terminator 1-Byte) if (Encoding.ASCII.GetByteCount(Payload) > Size - 9) { throw new LengthMismatchException("Payload length mismatch"); } } else { Payload = Encoding.UTF8.GetString(reader.ReadBytes(Size - 10)); reader.ReadByte(); } var nullTerminator = reader.ReadByte(); if (nullTerminator != 0x00) { throw new NullTerminatorMissingException("Missing last null-terminator"); } if (reader.BaseStream.Position != reader.BaseStream.Length) { throw new Exception("More data to read"); } } } }
public TCS(string filePath) { using (var stream = File.OpenRead(filePath)) using (var reader = new BinaryReaderExt(stream)) { var identifier = reader.ReadAscii(); if (identifier != "TCS\0") { throw new UnknownFileFormatException(); } var header = reader.ReadAscii(); if (header != "B\0") // Only binary TCS is supported. { throw new NotSupportedException(); } FileVersion = reader.ReadInt32(); var fileDate = DateTime.ParseExact(FileVersion.ToString(), "yyyyMMdd", CultureInfo.InvariantCulture); FileDay = fileDate.Day; FileMonth = fileDate.Month; FileYear = fileDate.Year; //Console.WriteLine($@"Version: {FileVersion}"); if (FileVersion != 20080327) { Console.WriteLine(@"Version different. Output may be wrong!"); } var identifier2 = reader.ReadAscii(); //Console.WriteLine($@"Identifier: {identifier2}"); Console.WriteLine(reader.ReadAscii()); // ?? (NHN-AG) (Maybe refers to NHN Corp?) Console.WriteLine(reader.ReadAscii()); // ?? (JC) // Chunk. (for whole file) while (reader.BaseStream.Position != reader.BaseStream.Length) { var id = reader.ReadInt32(); // Id? var len = reader.ReadInt32(); // Len? //Console.WriteLine($"Id: {id} ({Enum.GetName(typeof(TCCHUNK_ENUM), id)}), Len: {len}"); switch ((TCCHUNK_ENUM)id) { /*default: * case TCCHUNK_ENUM.TCCHUNK_MAIN: // 0x5 * case TCCHUNK_ENUM.TCCHUNK_NATEDRV: // 0x1000 * case TCCHUNK_ENUM.TCCHUNK_CROSSES: // 0x10000 * case TCCHUNK_ENUM.TCCHUNK_ROADS: // 0x20000 * case TCCHUNK_ENUM.TCCHUNK_CROSSROADS: // 0x50000 * case TCCHUNK_ENUM.TCCHUNK_PATHS: // 0x70000 * case TCCHUNK_ENUM.TCCHUNK_JOINTS: // 0x75000 * case TCCHUNK_ENUM.TCCHUNK_TIMEKEYDATAS: // 0x90000 * case TCCHUNK_ENUM.TCCHUNK_SIGNALS: // 0xA0000 * case TCCHUNK_ENUM.TCCHUNK_CROSSSIGNALS: // 0xA5000 * case TCCHUNK_ENUM.TCCHUNK_SIGNAL4CLS: // 0xA6000 * // Ignored? * break;*/ case TCCHUNK_ENUM.TCCHUNK_NATEDRVINFO: // 0x1100 ReadNdNodeInfo(reader); //TcTcsReader::ReadNdNodeInfo break; case TCCHUNK_ENUM.TCCHUNK_NDNODEINFO: // 0x2000 ReadNdNodeInfo(reader); //TcTcsReader::ReadNdNodeInfo break; case TCCHUNK_ENUM.TCCHUNK_NDNODE: // 0x2100 ReadNdNode(reader); //TcTcsReader::ReadNdNode break; case TCCHUNK_ENUM.TCCHUNK_NDPATHINFO: // 0x3000 ReadNdNodeInfo(reader); //TcTcsReader::ReadNdNodeInfo break; case TCCHUNK_ENUM.TCCHUNK_NDPATH: // 0x3100 ReadNdPath(reader); //TcTcsReader::ReadNdPath break; case TCCHUNK_ENUM.TCCHUNK_NDARCINFO: // 0x4000 ReadNdNodeInfo(reader); //TcTcsReader::ReadNdNodeInfo break; case TCCHUNK_ENUM.TCCHUNK_NDARC: // 0x4100 ReadNdArc(reader); //TcTcsReader::ReadNdArc break; case TCCHUNK_ENUM.TCCHUNK_CROSSESINFO: // 0x11000 CrossesInfoReader(reader); //TcTcsReader::CrossesInfoReader break; case TCCHUNK_ENUM.TCCHUNK_CROSS: // 0x12200 CrossReader(reader); //TcTcsReader::CrossReader break; case TCCHUNK_ENUM.TCCHUNK_ROADSINFO: // 0x20100 RoadsInfoReader(reader); //TcTcsReader::RoadsInfoReader break; case TCCHUNK_ENUM.TCCHUNK_ROAD: // 0x20200 RoadReader(reader); //TcTcsReader::RoadReader break; case TCCHUNK_ENUM.TCCHUNK_CROSSROADSINFO: // 0x50100 CrossRoadsInfoReader(reader); //TcTcsReader::CrossRoadsInfoReader break; case TCCHUNK_ENUM.TCCHUNK_CROSSROAD: // 0x50200 CrossRoadReader(reader); //TcTcsReader::CrossRoadReader break; case TCCHUNK_ENUM.TCCHUNK_PATHSINFO: // 0x70100 PathsInfoReader(reader); //TcTcsReader::PathsInfoReader break; case TCCHUNK_ENUM.TCCHUNK_PATH: // 0x70200 PathReader(reader); //TcTcsReader::PathReader break; case TCCHUNK_ENUM.TCCHUNK_PATH4S: // 0x70300 Path4SReader(reader); //TcTcsReader::Path4SReader break; case TCCHUNK_ENUM.TCCHUNK_JOINTSINFO: // 0x75100 JointsInfoReader(reader); //TcTcsReader::JointsInfoReader break; case TCCHUNK_ENUM.TCCHUNK_JOINT: // 0x75200 JointReader(reader); //TcTcsReader::JointReader break; case TCCHUNK_ENUM.TCCHUNK_TIMEKEYDATASINFO: // 0x90010 TimeKeyDatasInfoReader(reader); //TcTcsReader::TimeKeyDatasInfoReader break; case TCCHUNK_ENUM.TCCHUNK_TIMEKEYDATA: // 0x90020 TimeKeyDataReader(reader); //TcTcsReader::TimeKeyDataReader break; case TCCHUNK_ENUM.TCCHUNK_SIGNALSINFO: // 0xA0010 SignalsInfoReader(reader); //TcTcsReader::SignalsInfoReader break; case TCCHUNK_ENUM.TCCHUNK_SIGNAL: // 0xA0030 SignalReader(reader); //TcTcsReader::SignalReader break; case TCCHUNK_ENUM.TCCHUNK_SIGNALCONTROL: // 0xA0040 SignalControlReader(reader); //TcTcsReader::SignalControlReader break; case TCCHUNK_ENUM.TCCHUNK_CROSSSIGNALSINFO: // 0xA5010 CrossSignalsInfoReader(reader); //TcTcsReader::CrossSignalsInfoReader break; case TCCHUNK_ENUM.TCCHUNK_CROSSSIGNAL: // 0xA5030 CrossSignalReader(reader); //TcTcsReader::CrossSignalReader break; case TCCHUNK_ENUM.TCCHUNK_SIGNAL4CLCTL: // 0xA6010 Signals4CLCtlReader(reader); //TcTcsReader::Signals4CLCtlReader break; case TCCHUNK_ENUM.TCCHUNK_SIGNAL4CL: // 0xA6030 Signals4CLReader(reader); //TcTcsReader::Signals4CLReader break; } } } }