private void Initialize() { using (var reader = new FastBigEndianReader(File.ReadAllBytes(m_uri))) { int indexPos = reader.ReadInt(); reader.Seek(indexPos, SeekOrigin.Begin); int indexLen = reader.ReadInt(); for (int i = 0; i < indexLen; i += 9) { int key = reader.ReadInt(); //4 byte bool undiacritical = reader.ReadBoolean(); //1 byte int dataPos = reader.ReadInt(); //4 byte int pos = (int)reader.Position; reader.Seek(dataPos, SeekOrigin.Begin); var text = reader.ReadUTF(); reader.Seek(pos, SeekOrigin.Begin); if (undiacritical) { var criticalPos = reader.ReadInt(); i += 4; pos = (int)reader.Position; reader.Seek(criticalPos, SeekOrigin.Begin); var undiacriticalText = reader.ReadUTF(); reader.Seek(pos, SeekOrigin.Begin); m_entries.Add(key, new D2IEntry <int>(key, text, undiacriticalText)); } else { m_entries.Add(key, new D2IEntry <int>(key, text)); } } indexLen = reader.ReadInt(); while (indexLen > 0) { var pos = reader.Position; string key = reader.ReadUTF(); int dataPos = reader.ReadInt(); indexLen -= ((int)reader.Position - (int)pos); textCount++; pos = (int)reader.Position; reader.Seek(dataPos, SeekOrigin.Begin); m_textEntries.Add(key, new D2IEntry <string>(key, reader.ReadUTF())); reader.Seek(pos, SeekOrigin.Begin); } indexLen = reader.ReadInt(); while (indexLen > 0) { // don't really need it m_textSortIndexes.Add(reader.ReadInt()); indexLen -= 4; } } }
private void Initialize() { using (var reader = new FastBigEndianReader(File.ReadAllBytes(m_uri))) { int indexPos = reader.ReadInt(); reader.Seek(indexPos, SeekOrigin.Begin); int indexLen = reader.ReadInt(); for (int i = 0; i < indexLen; i += 8) { int key = reader.ReadInt(); int dataPos = reader.ReadInt(); var pos = (int)reader.Position; reader.Seek(dataPos, SeekOrigin.Begin); m_indexes.Add(key, reader.ReadUTF()); reader.Seek(pos, SeekOrigin.Begin); } while (reader.BytesAvailable > 0) { string key = reader.ReadUTF(); int dataPos = reader.ReadInt(); var pos = (int)reader.Position; reader.Seek(dataPos, SeekOrigin.Begin); m_textIndexes.Add(key, reader.ReadUTF()); reader.Seek(pos, SeekOrigin.Begin); } } }
public void Read(FastBigEndianReader reader) { this.SoundId = reader.ReadInt(); this.BaseVolume = reader.ReadShort(); this.FullVolumeDistance = reader.ReadInt(); this.NullVolumeDistance = reader.ReadInt(); this.MinDelayBetweenLoops = reader.ReadShort(); this.MaxDelayBetweenLoops = reader.ReadShort(); }
protected virtual bool BuildMessage(BufferSegment buffer) { if (m_currentMessage == null) { m_currentMessage = new MessagePart(false); } var reader = new FastBigEndianReader(buffer) { Position = buffer.Offset + m_readOffset, MaxPosition = buffer.Offset + m_readOffset + m_remainingLength, }; // if message is complete if (m_currentMessage.Build(reader)) { var dataPos = reader.Position; // prevent to read above reader.MaxPosition = dataPos + m_currentMessage.Length.Value; Message message; try { message = MessageReceiver.BuildMessage((uint)m_currentMessage.MessageId.Value, reader); } catch (Exception) { if (m_currentMessage.ReadData) { logger.Debug("Message = {0}", m_currentMessage.Data.ToString(" ")); } else { reader.Seek(dataPos, SeekOrigin.Begin); logger.Debug("Message = {0}", reader.ReadBytes(m_currentMessage.Length.Value).ToString(" ")); } throw; } OnMessageReceived(message); m_remainingLength -= (int)(reader.Position - (buffer.Offset + m_readOffset)); m_writeOffset = m_readOffset = (int)reader.Position - buffer.Offset; m_currentMessage = null; return(m_remainingLength <= 0 || BuildMessage(buffer)); } m_remainingLength -= (int)(reader.Position - (buffer.Offset + m_readOffset)); m_readOffset = (int)reader.Position - buffer.Offset; m_writeOffset = m_readOffset + m_remainingLength; EnsureBuffer(m_currentMessage.Length.HasValue ? m_currentMessage.Length.Value : 3); return(false); }
private void Read(FastBigEndianReader reader) { this.FixtureId = reader.ReadInt(); this.Offset = new Point(reader.ReadShort(), reader.ReadShort()); this.Rotation = reader.ReadShort(); this.Scale = new Point(reader.ReadShort(), reader.ReadShort()); this.Color = Color.FromArgb(reader.ReadByte(), reader.ReadByte(), reader.ReadByte()); this.Hue = Color.R | Color.G | Color.B; this.Alpha = reader.ReadByte(); }
public Map.Map ReadMap(int mapId) { D2pEntry entry = d2pEntries[mapId]; FastBigEndianReader reader = new FastBigEndianReader(dataFile); reader.Seek(entry.BaseOffset + entry.Index, SeekOrigin.Begin); byte[] data = reader.ReadBytes(entry.Size); Map.Map map = new Map.Map(new FastBigEndianReader(data)); return(map); }
private void Read(FastBigEndianReader reader) { List <IElement> allElements = new List <IElement>(); this.CellId = reader.ReadShort(); this.ElementsCount = reader.ReadShort(); for (int i = 0; i < ElementsCount; i++) { IElement be = BasicElement.GetElementFromType(Map, reader, reader.ReadByte()); allElements.Add(be); } Elements = allElements.AsReadOnly(); }
private void Read(FastBigEndianReader reader) { List <Cell> _cells = new List <Cell>(); this.LayerId = reader.ReadInt(); this.CellsCount = reader.ReadShort(); for (int i = 0; i < CellsCount; i++) { Cell c = new Cell(Map, reader); _cells.Add(c); } Cells = _cells.AsReadOnly(); }
protected virtual bool BuildMessage(BufferSegment buffer) { if (m_messagePart == null) { m_messagePart = new IPCMessagePart(); } var reader = new FastBigEndianReader(buffer) { Position = buffer.Offset + m_readOffset, MaxPosition = buffer.Offset + m_readOffset + m_remainingLength, }; // if message is complete if (m_messagePart.Build(reader)) { var dataPos = reader.Position; // prevent to read above reader.MaxPosition = dataPos + m_messagePart.Length.Value; IPCMessage message; try { message = IPCMessageSerializer.Instance.Deserialize(m_messagePart.Data); } catch (Exception) { reader.Seek(dataPos, SeekOrigin.Begin); logger.Debug("Message = {0}", m_messagePart.Data.ToString(" ")); throw; } LastActivity = DateTime.Now; TaskPool.AddMessage(() => ProcessMessage(message)); m_remainingLength -= (int)(reader.Position - (buffer.Offset + m_readOffset)); m_writeOffset = m_readOffset = (int)reader.Position - buffer.Offset; m_messagePart = null; return(m_remainingLength <= 0 || BuildMessage(buffer)); } m_remainingLength -= (int)(reader.Position - (buffer.Offset + m_readOffset)); m_readOffset = (int)reader.Position - buffer.Offset; m_writeOffset = m_readOffset + m_remainingLength; EnsureBuffer(m_messagePart.Length.HasValue ? m_messagePart.Length.Value : 3); return(false); }
private void Ini() { stream = new FastBigEndianReader(File.ReadAllBytes(path)); int pos = stream.ReadInt(); stream.Seek(pos, SeekOrigin.Begin); int lenghtIndexes = stream.ReadInt(); for (int i = 0; i < lenghtIndexes; i += 9) { int key = stream.ReadInt(); bool criticalBool = stream.ReadBoolean(); int value = stream.ReadInt(); this.indexes[key] = value; if (criticalBool) { i = i + 4; this.unDiacriticalIndex[key] = stream.ReadInt(); } else { this.unDiacriticalIndex[key] = value; } } int lenghtTextIndexes = stream.ReadInt(); while (lenghtTextIndexes > 0) { int position = (int)stream.Position; string text = stream.ReadUTF(); int val = stream.ReadInt(); textCount++; this.textIndexes[text] = val; lenghtTextIndexes = (int)(lenghtTextIndexes - (stream.Position - position)); } int textSortLenght = stream.ReadInt(); int actuelValue = 0; while (textSortLenght > 0) { int currentPos = (int)stream.Position; this.textSortIndex[stream.ReadInt()] = ++actuelValue; textSortLenght = (int)(textSortLenght - (stream.Position - currentPos)); } }
public static IElement GetElementFromType(Map map, FastBigEndianReader reader, byte type) { IElement element = null; switch (type) { case (byte)ElementTypesEnum.GRAPHICAL: element = new GraphicalElement(map, reader); break; case (byte)ElementTypesEnum.SOUND: element = new SoundElement(map, reader); break; } return(element); }
private void Initialize() { using (var reader = new FastBigEndianReader(File.ReadAllBytes(uri))) { var indexPos = reader.ReadInt(); reader.Seek(indexPos, SeekOrigin.Begin); var indexLen = reader.ReadInt(); int addOffset = 0; for (int i = 0; i < indexLen; i += 9) { var key = reader.ReadInt(); byte nbAdditionnalStrings = reader.ReadByte(); var dataPos = reader.ReadInt(); var pos = (int)reader.Position; reader.Seek(dataPos + addOffset, SeekOrigin.Begin); indexes.Add(key, reader.ReadUTF()); reader.Seek(pos, SeekOrigin.Begin); while (nbAdditionnalStrings-- > 0) { dataPos = reader.ReadInt(); pos = (int)reader.Position; reader.Seek(dataPos + addOffset, SeekOrigin.Begin); string unusedString = reader.ReadUTF(); // Well, no real use to read that, as we don't use 'em reader.Seek(pos, SeekOrigin.Begin); i += 4; } } int lastOffset = reader.ReadInt() + (int)reader.Position; int locpos = (int)reader.Position; while (locpos < lastOffset) { var key = reader.ReadUTF(); var dataPos = reader.ReadInt(); locpos = (int)reader.Position; reader.Seek(dataPos, SeekOrigin.Begin); textIndexes.Add(key, reader.ReadUTF()); reader.Seek(locpos, SeekOrigin.Begin); } } }
private void Read(FastBigEndianReader reader) { this.ElementId = reader.ReadInt(); this.Hue = Color.FromArgb(reader.ReadByte(), reader.ReadByte(), reader.ReadByte()); this.Shadow = Color.FromArgb(reader.ReadByte(), reader.ReadByte(), reader.ReadByte()); if (Map.Version <= 4) { this.Offset = new Point(reader.ReadByte(), reader.ReadByte()); this.PixelOffset = new Point((int)(this.Offset.X * CELL_HALF_WIDTH), (int)(this.Offset.Y * CELL_HALF_HEIGHT)); } else { this.PixelOffset = new Point(reader.ReadShort(), reader.ReadShort()); this.Offset = new Point((int)(this.PixelOffset.X / CELL_HALF_WIDTH), (int)(this.PixelOffset.Y / CELL_HALF_HEIGHT)); } this.Altitude = reader.ReadByte(); this.Identifier = (uint)reader.ReadInt(); }
private void Read(string path) { d2pEntries = new Dictionary <int, D2pEntry>(); dataFile = File.ReadAllBytes(path); FastBigEndianReader reader = new FastBigEndianReader(dataFile); if (!(reader.ReadByte() == 2) || !(reader.ReadByte() == 1)) { // log.Fatal("Erreur lecture map!"); } else { reader.Seek(-24, SeekOrigin.End); var baseOffset = reader.ReadInt(); var size = reader.ReadInt(); var mapsOffet = reader.ReadInt(); var mapsCount = reader.ReadInt(); var fileOffset = reader.ReadInt(); var lenghtFile = reader.ReadInt(); reader.Seek(fileOffset, SeekOrigin.Begin); for (int i = 0; i < lenghtFile; i++) { string _loc15_ = reader.ReadUTF(); string _loc16_ = reader.ReadUTF(); // _loc5_[_loc15_] = _loc16_; } reader.Seek(mapsOffet, SeekOrigin.Begin); for (int i = 0; i < mapsCount; i++) { var mapId = int.Parse(reader.ReadUTF().Remove(0, 2).Replace(".dlm", "")); var index = reader.ReadInt(); var sizeMap = reader.ReadInt(); d2pEntries[mapId] = new D2pEntry(index, sizeMap, baseOffset); } } }
private void Read(FastBigEndianReader reader) { this._floor = reader.ReadByte() * 10; if (this._floor == -1280) { return; } this._losmov = reader.ReadByte(); this.Speed = reader.ReadByte(); this.MapChangeData = reader.ReadByte(); if (this.Map.Version > 5) { this.MoveZone = reader.ReadByte(); } if (this.Map.Version > 7) { int tmpBits = reader.ReadByte(); this._arrow = 15 & tmpBits; } this.Mov = (this._losmov & 1) == 1; }
public GraphicalElement(Map map, FastBigEndianReader reader) { Map = map; Read(reader); }
public Fixture(Map map, FastBigEndianReader reader) { Map = map; Read(reader); }
public Map(FastBigEndianReader reader) { ReaderMap(reader); }
internal void ReaderMap(FastBigEndianReader reader) { int header = reader.ReadByte(); if (header != 77) { try { reader.Seek(0, SeekOrigin.Begin); var output = new MemoryStream(); ZipHelper.Deflate(new MemoryStream(reader.ReadBytes((int)reader.BytesAvailable)), output); var uncompress = output.ToArray(); reader.Dispose(); reader = new FastBigEndianReader(uncompress); header = reader.ReadByte(); if (header != 77) { throw new FileLoadException("Wrong header file"); } } catch (Exception ex) { throw new FileLoadException("Wrong header file"); } } this.Version = reader.ReadByte(); this.Id = reader.ReadInt(); if (Version >= 7) { this.Encrypted = reader.ReadBoolean(); this.EncryptionVersion = reader.ReadByte(); int DataLen = reader.ReadInt(); byte[] decryptionKey = Encoding.Default.GetBytes(Map.DecryptionKey); if (this.Encrypted) { byte[] encryptedData = reader.ReadBytes(DataLen); for (int i = 0; i < encryptedData.Length; i++) { encryptedData[i] = (byte)(encryptedData[i] ^ decryptionKey[i % decryptionKey.Length]); } reader = new FastBigEndianReader(encryptedData); } } this.RelativeId = (uint)reader.ReadInt(); this.MapType = reader.ReadByte(); this.SubAreaId = reader.ReadInt(); this.TopNeighbourId = reader.ReadInt(); this.BottomNeighbourId = reader.ReadInt(); this.LeftNeighbourId = reader.ReadInt(); this.RightNeighbourId = reader.ReadInt(); this.ShadowBonusOnEntities = reader.ReadInt(); if (this.Version >= 3) { this.BackgroundColor = Color.FromArgb(reader.ReadByte(), reader.ReadByte(), reader.ReadByte()); } if (this.Version >= 4) { ZoomScale = reader.ReadUShort(); ZoomOffsetX = reader.ReadShort(); ZoomOffsetY = reader.ReadShort(); } this.UseLowPassFilter = reader.ReadByte() == 1; this.UseReverb = reader.ReadByte() == 1; if (UseReverb) { PresetId = reader.ReadInt(); } { PresetId = -1; } int backGroundsCount = reader.ReadByte(); List <Fixture> backgroundFixtures = new List <Fixture>(); for (int i = 0; i < backGroundsCount; i++) { backgroundFixtures.Add(new Fixture(this, reader)); } this.BackgroudFixtures = backgroundFixtures.AsReadOnly(); int foregroundsCount = reader.ReadByte(); List <Fixture> foregroundFixtures = new List <Fixture>(); for (int i = 0; i < foregroundsCount; i++) { foregroundFixtures.Add(new Fixture(this, reader)); } ForegroundFixtures = foregroundFixtures.AsReadOnly(); int cellCount = 560; reader.ReadInt(); this.GroundCRC = reader.ReadInt(); int layerCount = reader.ReadByte(); List <Layer> layers = new List <Layer>(); for (int i = 0; i < layerCount; i++) { layers.Add(new Layer(this, reader)); } this.Layers = layers.AsReadOnly(); List <CellData> cells = new List <CellData>(); for (int i = 0; i < cellCount; i++) { cells.Add(new CellData(this, reader)); } this.Cells = cells.AsReadOnly(); }
public CellData(Map map, FastBigEndianReader reader) { Map = map; Read(reader); }
public Layer(Map map, FastBigEndianReader reader) { Map = map; Read(reader); }
protected virtual bool BuildMessage(BufferSegment buffer) { if (m_semaphore.CurrentCount == 0) { Console.WriteLine("Client Busy"); } m_semaphore.Wait(); if (m_currentMessage == null) { m_currentMessage = new MessagePart(false); } var reader = new FastBigEndianReader(buffer) { Position = buffer.Offset + m_readOffset, MaxPosition = buffer.Offset + m_readOffset + m_remainingLength, }; // if message is complete if (m_currentMessage.Build(reader)) { var dataPos = reader.Position; // prevent to read above reader.MaxPosition = dataPos + m_currentMessage.Length.Value; Message message; try { message = MessageReceiver.BuildMessage((uint)m_currentMessage.MessageId.Value, reader); } catch (Exception) { if (m_currentMessage.ReadData) { logger.Debug("Message = {0}", m_currentMessage.Data.ToString(" ")); } else { reader.Seek(dataPos, SeekOrigin.Begin); logger.Debug("Message = {0}", reader.ReadBytes(m_currentMessage.Length.Value).ToString(" ")); } throw; } if (LogPackets) { Console.WriteLine($"(RECV) {this} : {message}"); } OnMessageReceived(message); m_remainingLength -= (int)(reader.Position - (buffer.Offset + m_readOffset)); m_writeOffset = m_readOffset = (int)reader.Position - buffer.Offset; m_currentMessage = null; return(m_remainingLength <= 0 || BuildMessage(buffer)); } logger.Debug("Message truncated, ensure buffer is big enough ..."); m_remainingLength -= (int)(reader.Position - (buffer.Offset + m_readOffset)); m_readOffset = (int)reader.Position - buffer.Offset; m_writeOffset = m_readOffset + m_remainingLength; EnsureBuffer(m_currentMessage.Length.HasValue ? m_currentMessage.Length.Value : 5); // 5 is the max header size m_semaphore.Release(); return(false); }
public SoundElement(Map map, FastBigEndianReader reader) { Map = map; Read(reader); }
public static DlmMap ReadFromStream(IDataReader givenReader, DlmReader dlmReader) { DlmMap map = null; try { var reader = givenReader; map = new DlmMap { Version = reader.ReadByte(), Id = reader.ReadInt() }; if (map.Version > DlmReader.VERSION) { throw new Exception(string.Format("Reader outdated for this map (old version:{0} new version:{1})", DlmReader.VERSION, map.Version)); } if (map.Version >= 7) { map.Encrypted = reader.ReadBoolean(); map.EncryptionVersion = reader.ReadByte(); var len = reader.ReadInt(); if (map.Encrypted) { var key = dlmReader.DecryptionKey; if (key == null && dlmReader.DecryptionKeyProvider != null) { key = dlmReader.DecryptionKeyProvider(map.Id); } if (key == null) { throw new InvalidOperationException(string.Format("Cannot decrypt the map {0} without decryption key", map.Id)); } var data = reader.ReadBytes(len); var encodedKey = Encoding.Default.GetBytes(key); if (key.Length > 0) { for (var i = 0; i < data.Length; i++) { data[i] = (byte)(data[i] ^ encodedKey[i % key.Length]); } reader = new FastBigEndianReader(data); } } } map.RelativeId = reader.ReadUInt(); map.MapType = reader.ReadByte(); // temp, just to know if the result is coherent if (map.MapType < 0 || map.MapType > 1) { throw new Exception("Invalid decryption key"); } map.SubAreaId = reader.ReadInt(); map.TopNeighbourId = reader.ReadInt(); map.BottomNeighbourId = reader.ReadInt(); map.LeftNeighbourId = reader.ReadInt(); map.RightNeighbourId = reader.ReadInt(); map.ShadowBonusOnEntities = reader.ReadInt(); if (map.Version >= 9) { map.BackgroundColor = Color.FromArgb(reader.ReadByte(), reader.ReadByte(), reader.ReadByte(), reader.ReadByte()); map.GridColor = Color.FromArgb(reader.ReadByte(), reader.ReadByte(), reader.ReadByte(), reader.ReadByte()); } else if (map.Version >= 3) { map.BackgroundColor = Color.FromArgb(reader.ReadByte(), reader.ReadByte(), reader.ReadByte()); } if (map.Version >= 4) { map.ZoomScale = reader.ReadUShort(); map.ZoomOffsetX = reader.ReadShort(); map.ZoomOffsetY = reader.ReadShort(); } map.UseLowPassFilter = reader.ReadByte() == 1; map.UseReverb = reader.ReadByte() == 1; if (map.UseReverb) { map.PresetId = reader.ReadInt(); } { map.PresetId = -1; } map.BackgroudFixtures = new DlmFixture[reader.ReadByte()]; for (var i = 0; i < map.BackgroudFixtures.Length; i++) { map.BackgroudFixtures[i] = DlmFixture.ReadFromStream(map, reader); } map.ForegroundFixtures = new DlmFixture[reader.ReadByte()]; for (var i = 0; i < map.ForegroundFixtures.Length; i++) { map.ForegroundFixtures[i] = DlmFixture.ReadFromStream(map, reader); } reader.ReadInt(); map.GroundCRC = reader.ReadInt(); map.Layers = new DlmLayer[reader.ReadByte()]; for (var i = 0; i < map.Layers.Length; i++) { map.Layers[i] = DlmLayer.ReadFromStream(map, reader); } map.Cells = new DlmCellData[CellCount]; int?lastMoveZone = null; for (short i = 0; i < map.Cells.Length; i++) { map.Cells[i] = DlmCellData.ReadFromStream(i, map.Version, reader); if (!lastMoveZone.HasValue) { lastMoveZone = map.Cells[i].MoveZone; } else if (lastMoveZone != map.Cells[i].MoveZone) // if a cell is different the new system is used { map.UsingNewMovementSystem = true; } } return(map); } catch (Exception ex) { throw new BadEncodedMapException(ex, map); } }
protected virtual bool BuildMessage(BufferSegment buffer) { if (m_messagePart == null) { m_messagePart = new IPCMessagePart(); } var reader = new FastBigEndianReader(buffer) { Position = buffer.Offset + m_readOffset, MaxPosition = buffer.Offset + m_readOffset + m_remainingLength, }; bool built; try { built = m_messagePart.Build(reader); } catch { logger.Error("Cannot build message. Length={0} LengthSize={3} RemainingLength={1} Data={2}", m_messagePart.Length, m_remainingLength, m_messagePart.Data, m_messagePart.LengthBytesCount); throw; } // if message is complete if (built) { var dataPos = reader.Position; // prevent to read above reader.MaxPosition = dataPos + m_messagePart.Length.Value; IPCMessage message; try { message = IPCMessageSerializer.Instance.Deserialize(m_messagePart.Data); } catch (Exception ex) { reader.Seek(dataPos, SeekOrigin.Begin); logger.Debug("Message = {0}", m_messagePart.Data.ToString(" ")); logger.Error("Error while deserializing IPC Message : " + ex); return(m_remainingLength <= 0 || BuildMessage(buffer)); } TaskPool.AddMessage(() => ProcessMessage(message)); m_remainingLength -= (int)(reader.Position - (buffer.Offset + m_readOffset)); m_writeOffset = m_readOffset = (int)reader.Position - buffer.Offset; m_messagePart = null; return(m_remainingLength <= 0 || BuildMessage(buffer)); } m_remainingLength -= (int)(reader.Position - (buffer.Offset + m_readOffset)); m_readOffset = (int)reader.Position - buffer.Offset; m_writeOffset = m_readOffset + m_remainingLength; EnsureBuffer(m_messagePart.Length.HasValue ? m_messagePart.Length.Value : 5); return(false); }
protected virtual bool BuildMessage(BufferSegment buffer) { if (m_currentMessage == null) { m_currentMessage = new MessagePart(false); } var reader = new FastBigEndianReader(buffer) { Position = buffer.Offset + m_readOffset, MaxPosition = buffer.Offset + m_readOffset + m_remainingLength, }; // if message is complete if (m_currentMessage.Build(reader)) { var dataPos = reader.Position; // prevent to read above reader.MaxPosition = dataPos + m_currentMessage.Length.Value; Message message; try { message = MessageReceiver.BuildMessage((uint)m_currentMessage.MessageId.Value, reader); } catch (Exception) { if (m_currentMessage.ReadData) { logger.Debug("Message = {0}", m_currentMessage.Data.ToString(" ")); } else { reader.Seek(dataPos, SeekOrigin.Begin); logger.Debug("Message = {0}", reader.ReadBytes(m_currentMessage.Length.Value).ToString(" ")); } throw; } if (!MessagesWhitelist.Contains(message.ToString())) { m_messagesHistory.Push(new Pair <DateTime, Message>(DateTime.Now, message)); } var time = m_messagesHistory.Last.Value.First.Subtract(m_messagesHistory.First.Value.First); //Flood check, if (FloodCheck && (m_messagesHistory.Count == m_messagesHistory.MaxItems && time.TotalSeconds < FloodMinTime)) { logger.Error($"Forced disconnection {this}: Flood: {m_messagesHistory.Count} messages in {time.TotalSeconds} seconds ! - LastMessages: {m_messagesHistory.Select(x => x.Second).ToCSV(",")}"); Disconnect(); return(false); } if (LogPackets) { Console.WriteLine($"(RECV) {this} : {message}"); } OnMessageReceived(message); m_remainingLength -= (int)(reader.Position - (buffer.Offset + m_readOffset)); m_writeOffset = m_readOffset = (int)reader.Position - buffer.Offset; m_currentMessage = null; return(m_remainingLength <= 0 || BuildMessage(buffer)); } logger.Debug("Message truncated, ensure buffer is big enough ..."); m_remainingLength -= (int)(reader.Position - (buffer.Offset + m_readOffset)); m_readOffset = (int)reader.Position - buffer.Offset; m_writeOffset = m_readOffset + m_remainingLength; EnsureBuffer(m_currentMessage.Length.HasValue ? m_currentMessage.Length.Value : 5); // 5 is the max header size return(false); }
public D2iFile(string uri) { this.uri = uri; reader = new FastBigEndianReader(File.ReadAllBytes(uri)); Initialize(); }