mirror of
https://github.com/demostf/demo.js
synced 2026-06-04 00:54:14 +02:00
Summary
This commit is contained in:
parent
011625257d
commit
27ebb577df
5 changed files with 112 additions and 15 deletions
32
.gitignore
vendored
Normal file
32
.gitignore
vendored
Normal 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
|
||||
|
||||
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
75
parser.js
75
parser.js
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,10 @@ StringTable.prototype.parse = function () {
|
|||
}
|
||||
}
|
||||
//console.log(tables);
|
||||
return tables;
|
||||
return [{
|
||||
packetType: 'stringTable',
|
||||
tables : tables
|
||||
}];
|
||||
};
|
||||
|
||||
module.exports = StringTable;
|
||||
|
|
|
|||
13
test.js
13
test.js
|
|
@ -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();
|
||||
// }
|
||||
//}
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue