private static byte[] CreateExpectedBytes(IMapFileProperties props) { var numberEncoderService = new NumberEncoderService(); var mapStringEncoderService = new MapStringEncoderService(); var ret = new List <byte>(); ret.AddRange(Encoding.ASCII.GetBytes(props.FileType)); ret.AddRange(props.Checksum); var fullName = Enumerable.Repeat((byte)0xFF, 24).ToArray(); var encodedName = mapStringEncoderService.EncodeMapString(props.Name); Array.Copy(encodedName, 0, fullName, fullName.Length - encodedName.Length, encodedName.Length); ret.AddRange(fullName); ret.AddRange(numberEncoderService.EncodeNumber(props.PKAvailable ? 3 : 0, 1)); ret.AddRange(numberEncoderService.EncodeNumber((byte)props.Effect, 1)); ret.AddRange(numberEncoderService.EncodeNumber(props.Music, 1)); ret.AddRange(numberEncoderService.EncodeNumber(props.MusicExtra, 1)); ret.AddRange(numberEncoderService.EncodeNumber(props.AmbientNoise, 2)); ret.AddRange(numberEncoderService.EncodeNumber(props.Width, 1)); ret.AddRange(numberEncoderService.EncodeNumber(props.Height, 1)); ret.AddRange(numberEncoderService.EncodeNumber(props.FillTile, 2)); ret.AddRange(numberEncoderService.EncodeNumber(props.MapAvailable ? 1 : 0, 1)); ret.AddRange(numberEncoderService.EncodeNumber(props.CanScroll ? 1 : 0, 1)); ret.AddRange(numberEncoderService.EncodeNumber(props.RelogX, 1)); ret.AddRange(numberEncoderService.EncodeNumber(props.RelogY, 1)); ret.AddRange(numberEncoderService.EncodeNumber(props.Unknown2, 1)); return(ret.ToArray()); }
public void HeaderFormat_IsCorrect() { var nes = new NumberEncoderService(); var actualBytes = _npcFile.SerializeToByteArray(nes); CollectionAssert.AreEqual(Encoding.ASCII.GetBytes(_npcFile.FileType), actualBytes.Take(3).ToArray()); CollectionAssert.AreEqual(nes.EncodeNumber(_npcFile.CheckSum, 4), actualBytes.Skip(3).Take(4).ToArray()); CollectionAssert.AreEqual(nes.EncodeNumber(_npcFile.Length, 2), actualBytes.Skip(7).Take(2).ToArray()); CollectionAssert.AreEqual(nes.EncodeNumber(1, 1), actualBytes.Skip(9).Take(1).ToArray()); }
public void ENFRecord_SerializeToByteArray_WritesExpectedFormat() { var numberEncoderService = new NumberEncoderService(); var record = CreateRecordWithSomeGoodTestData(); var actualBytes = record.SerializeToByteArray(numberEncoderService); var expectedBytes = GetExpectedBytes(record, numberEncoderService); CollectionAssert.AreEqual(expectedBytes, actualBytes); }
private byte[] MakeDummyFile(params DummyRecord[] records) { var numberEncoderService = new NumberEncoderService(); var bytes = new List <byte>(); bytes.Add((byte)records.Length); foreach (var record in records) { bytes.AddRange(record.SerializeToByteArray(numberEncoderService)); } return(bytes.ToArray()); }
private byte[] MakeENFFileWithWrongLength(int checksum, int length, params ENFRecord[] records) { var numberEncoderService = new NumberEncoderService(); var bytes = new List <byte>(); bytes.AddRange(Encoding.ASCII.GetBytes("ENF")); bytes.AddRange(numberEncoderService.EncodeNumber(checksum, 4)); bytes.AddRange(numberEncoderService.EncodeNumber(length, 2)); bytes.Add(numberEncoderService.EncodeNumber(1, 1)[0]); foreach (var record in records) { bytes.AddRange(record.SerializeToByteArray(numberEncoderService)); } return(bytes.ToArray()); }
public void ENFRecord_DeserializeFromByteArray_HasCorrectData() { var numberEncoderService = new NumberEncoderService(); var sourceRecord = CreateRecordWithSomeGoodTestData(); var sourceRecordBytes = GetExpectedBytesWithoutName(sourceRecord, numberEncoderService); var record = new ENFRecord { ID = sourceRecord.ID, Name = sourceRecord.Name }; record.DeserializeFromByteArray(sourceRecordBytes, numberEncoderService); var properties = record.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance); Assert.IsTrue(properties.Length > 0); foreach (var property in properties) { var expectedValue = property.GetValue(sourceRecord); var actualValue = property.GetValue(record); Assert.AreEqual(expectedValue, actualValue, "Property: {0}", property.Name); } }
public EOPacketManager(EOMarketPlugin plugin) { _packetEncoderRepository = new PacketEncoderRepository(); _packetProcessActions = new PacketProcessActions(new SequenceRepository(), _packetEncoderRepository, new PacketEncoderService(), new PacketSequenceService()); _numberEncoderService = new NumberEncoderService(); }
private static byte[] CreateFilePacket(InitFileType type) { IPacketBuilder packetBuilder = new PacketBuilder(); var nes = new NumberEncoderService(); switch (type) { case InitFileType.Item: packetBuilder = packetBuilder .AddChar((byte)InitReply.ItemFile).AddChar(1) //spacer .AddString("EIF").AddInt(1) //RID .AddShort(2) //Len .AddByte(1) //filler byte .AddBytes(new EIFRecord { ID = 1, Name = "Test1" }.SerializeToByteArray(nes)) .AddBytes(new EIFRecord { ID = 2, Name = "eof" }.SerializeToByteArray(nes)); break; case InitFileType.Npc: packetBuilder = packetBuilder .AddChar((byte)InitReply.NpcFile).AddChar(1) //spacer .AddString("ENF").AddInt(1) //RID .AddShort(2) //Len .AddByte(1) //filler byte .AddBytes(new ENFRecord { ID = 1, Name = "Test1" }.SerializeToByteArray(nes)) .AddBytes(new ENFRecord { ID = 2, Name = "eof" }.SerializeToByteArray(nes)); break; case InitFileType.Spell: packetBuilder = packetBuilder .AddChar((byte)InitReply.SpellFile).AddChar(1) //spacer .AddString("ESF").AddInt(1) //RID .AddShort(2) //Len .AddByte(1) //filler byte .AddBytes(new ESFRecord { ID = 1, Name = "Test1", Shout = "" }.SerializeToByteArray(nes)) .AddBytes(new ESFRecord { ID = 2, Name = "eof", Shout = "" }.SerializeToByteArray(nes)); break; case InitFileType.Class: packetBuilder = packetBuilder .AddChar((byte)InitReply.ClassFile).AddChar(1) //spacer .AddString("ECF").AddInt(1) //RID .AddShort(2) //Len .AddByte(1) //filler byte .AddBytes(new ECFRecord { ID = 1, Name = "Test1" }.SerializeToByteArray(nes)) .AddBytes(new ECFRecord { ID = 2, Name = "eof" }.SerializeToByteArray(nes)); break; } return(packetBuilder.Build().RawData.ToArray()); }