/** * @return Q3DemoMessage return a next message buffer or null if EOD is reached * @throws Exception in case stream is corrupted */ public Q3DemoMessage nextMessage() { byte[] headerBuffer = binaryReader.ReadBytes(8); if (headerBuffer.Length != 8) { return(null); } //if (BitConverter.IsLittleEndian) { // Array.Reverse(headerBuffer); //} int sequence = BitConverter.ToInt32(headerBuffer, 0); int msgLength = BitConverter.ToInt32(headerBuffer, 4); if (sequence == -1 && msgLength == -1) { // a normal case, end of message-sequence return(null); } if (msgLength < 0 || msgLength > Constants.Q3_MESSAGE_MAX_SIZE) { throw new Exception("Demo file is corrupted, wrong message length: {msgLength}"); } var msg = new Q3DemoMessage(sequence, msgLength); msg.data = binaryReader.ReadBytes(msgLength); this.readMessages++; return(msg); }
private AbstractDemoMessageParser doParse(AbstractDemoMessageParser msgParser) { Q3MessageStream messageStream = new Q3MessageStream(this.file_name); try { Q3DemoMessage msg = null; while ((msg = messageStream.nextMessage()) != null) { if (!msgParser.parse(msg)) { break; } } } catch (Exception r) { } messageStream.close(); return(msgParser); }
public bool parse(Q3DemoMessage message) { ++this.count; return(true); }