Example #1
0
        /**
         * @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);
        }
Example #2
0
        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);
        }
Example #3
0
 public bool parse(Q3DemoMessage message)
 {
     ++this.count;
     return(true);
 }