1
0
Fork 0
mirror of https://github.com/demostf/demo.js synced 2026-06-04 00:54:14 +02:00
This commit is contained in:
Robin Appelman 2015-01-24 23:51:19 +01:00
commit 27ebb577df
5 changed files with 112 additions and 15 deletions

32
.gitignore vendored Normal file
View file

@ -0,0 +1,32 @@
# Created by .ignore support plugin (hsz.mobi)
### Node template
# Logs
logs
*.log
# Runtime data
pids
*.pid
*.seed
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directory
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git-
node_modules

View file

@ -29,7 +29,7 @@ Packet.prototype.parse = function () {
var type = this.stream.readBits(6);
if (Packet.parsers[type]) {
var packet = Packet.parsers[type](this.stream);
console.log(packet);
//console.log(packet);
packets.push(packet);
} else {
throw 'Unknown packet type ' + type;

View file

@ -5,6 +5,12 @@ var BitStream = require('bit-buffer').BitStream;
var Parser = function (steam) {
this.stream = steam;
this.state = {
chat : [],
users : {},
deaths: [],
rounds: []
};
};
Parser.MessageType = {
@ -34,12 +40,67 @@ Parser.prototype.readHeader = function () {
}
};
Parser.prototype.parseBody = function () {
var message, i;
while (message = this.readMessage()) {
if (message.parse) {
var packets = message.parse();
for (i = 0; i < packets.length; i++) {
var packet = packets[i];
if (!packet) {
continue;
}
switch (packet.packetType) {
case 'sayText2':
this.state.chat.push({
kind: packet.kind,
from: packet.from,
text: packet.text
});
break;
case 'stringTable':
if (packet.tables.userinfo) {
for (var j = 0; j < packet.tables.userinfo.length; j++) {
if (packet.tables.userinfo[j].extraData) {
this.state.users[packet.tables.userinfo[j].text] = packet.tables.userinfo[j].extraData
}
}
}
break;
case 'gameEvent':
switch (packet.event.name) {
case 'player_death':
// todo get player names, not same id as the name string table
var assister = packet.event.values.assister < 32 ? packet.event.values.assister : null;
this.state.deaths.push({
killer : packet.event.values.attacker,
assister: assister,
victim : packet.event.values.userid,
weapon : packet.event.values.weapon
});
break;
case 'teamplay_round_win':
if (packet.event.values.winreason !== 6) {// 6 = timelimit
this.state.rounds.push({
winner: packet.event.values.team === 2 ? 'red' : 'blue',
length: packet.event.values.round_time
});
}
}
break;
}
}
}
}
return this.state;
};
Parser.prototype.readMessage = function () {
console.log();
console.log('start message');
console.log(this.stream.byteIndex);
//console.log();
//console.log('start message');
//console.log(this.stream.byteIndex);
var type = this.stream.readBits(8);
console.log(type);
//console.log(type);
if (type === Parser.MessageType.Stop) {
return null;
}
@ -61,7 +122,7 @@ Parser.prototype.readMessage = function () {
}
length = this.stream.readInt32();
console.log('message length: ' + length + ' byte');
//console.log('message length: ' + length + ' byte');
start = this.stream.byteIndex;
buffer = this.stream.buffer.slice(start, start + length);
this.stream.byteIndex += length;
@ -77,13 +138,13 @@ Parser.prototype.readMessage = function () {
case Parser.MessageType.UserCmd:
return true;
case Parser.MessageType.DataTables:
console.log('datatable');
//console.log('datatable');
return true;
case Parser.MessageType.StringTables:
return new StringTable(type, tick, data, length);
default:
return true;
//throw 'Unknown message type: ' + type;
//throw 'Unknown message type: ' + type;
}
};

View file

@ -33,7 +33,10 @@ StringTable.prototype.parse = function () {
}
}
//console.log(tables);
return tables;
return [{
packetType: 'stringTable',
tables : tables
}];
};
module.exports = StringTable;

13
test.js
View file

@ -7,10 +7,11 @@ fs.readFile("snakewater.dem", function (err, data) {
var parser = demo.getParser();
var head = parser.readHeader();
//console.log(parser.readHeader());
var message;
while (message = parser.readMessage()) {
if (message.parse) {
message.parse();
}
}
//var message;
console.log(parser.parseBody());
//while (message = parser.readMessage()) {
// if (message.parse) {
// message.parse();
// }
//}
});