using FSO.Common.Model; using FSO.Common.Serialization; using Mina.Core.Buffer; using System; using System.IO; namespace FSO.Server.Protocol.Electron.Packets { public class GlobalTuningUpdate : AbstractElectronPacket { public DynamicTuning Tuning; public byte[] ObjectUpgrades; public override void Deserialize(IoBuffer input, ISerializationContext context) { var dataLen = input.GetInt32(); if (dataLen > 4000000 || dataLen > input.Remaining) throw new Exception("Tuning too long"); var data = new byte[dataLen]; input.Get(data, 0, dataLen); using (var mem = new MemoryStream(data)) { using (var reader = new BinaryReader(mem)) { Tuning = new DynamicTuning(reader); } } var upgLen = input.GetInt32(); if (upgLen > 10000000 || upgLen > input.Remaining) throw new Exception("Upgrades too long"); ObjectUpgrades = new byte[upgLen]; input.Get(ObjectUpgrades, 0, upgLen); } public override ElectronPacketType GetPacketType() { return ElectronPacketType.GlobalTuningUpdate; } public override void Serialize(IoBuffer output, ISerializationContext context) { using (var mem = new MemoryStream()) { using (var writer = new BinaryWriter(mem)) { Tuning.SerializeInto(writer); var result = mem.ToArray(); output.PutInt32(result.Length); output.Put(result, 0, result.Length); } } output.PutInt32(ObjectUpgrades.Length); output.Put(ObjectUpgrades, 0, ObjectUpgrades.Length); } } }