UDP Circuit basics, message changes

This commit is contained in:
Casper Warden
2017-11-26 01:14:02 +00:00
parent 261f28698a
commit 886fced88f
969 changed files with 46221 additions and 43960 deletions

View File

@@ -4,7 +4,7 @@ const fs = require('fs');
messages.forEach((message) =>
{
let classString = '// This file has been automatically generated by writePacketClasses.js\n\n';
let classString = '// This file has been automatically generated by writeMessageClasses.js\n\n';
//First import required classes
let uuid = false;
@@ -83,9 +83,10 @@ messages.forEach((message) =>
classString += 'import {Quaternion} from \'../Quaternion\';\n'
}
classString += 'import {MessageFlags} from \'../../enums/MessageFlags\';\n' +
'import {Packet} from \'../Packet\';\n\n';
'import {MessageBase} from \'../MessageBase\';\n' +
'import {Message} from \'../../enums/Message\';\n\n';
classString += 'export class ' + message.name + 'Packet implements Packet\n';
classString += 'export class ' + message.name + 'Message implements MessageBase\n';
classString += '{\n';
classString += ' name = \''+message.name+'\';\n';
@@ -139,12 +140,12 @@ messages.forEach((message) =>
console.log("UNKNOWN FREQUENCY: "+message.frequency);
break;
}
classString += ' flags = ' + flags.join(' | ')+';\n';
classString += ' messageFlags = ' + flags.join(' | ')+';\n';
classString += ' id = ' + id+';\n';
classString += ' id = Message.' + message.name+';\n';
classString += '\n';
let messageFixedSize = 0;
@@ -163,6 +164,7 @@ messages.forEach((message) =>
{
classString += ' '+param.name+': ';
let jstype = 'string';
param.size = parseInt(param.size);
switch(param.type)
{
case 'LLUUID':
@@ -318,11 +320,11 @@ messages.forEach((message) =>
' }\n\n';
}
classString+=' writeToBuffer(buf: Buffer, pos: number): number\n';
classString+=' {\n';
classString+=' writeToBuffer(buf: Buffer, pos: number): number\n';
classString+=' {\n';
if (message.blocks.length > 0)
{
classString += ' const startPos = pos;\n';
classString += ' const startPos = pos;\n';
let firstCount = true;
@@ -352,8 +354,8 @@ messages.forEach((message) =>
firstCount = false;
first = letConst + ' ';
}
blockIndex = ' ' + first + 'count = this.' + block.name + '.length;\n';
blockIndex += ' buf.writeUInt8(this.' + block.name + '.length, pos++);\n';
blockIndex = ' ' + first + 'count = this.' + block.name + '.length;\n';
blockIndex += ' buf.writeUInt8(this.' + block.name + '.length, pos++);\n';
}
else if (block.type === 'Multiple')
{
@@ -363,7 +365,7 @@ messages.forEach((message) =>
firstCount = false;
first = letConst + ' ';
}
blockIndex = ' ' + first + 'count = ' + block.count + ';\n';
blockIndex = ' ' + first + 'count = ' + block.count + ';\n';
}
else
{
@@ -374,8 +376,8 @@ messages.forEach((message) =>
{
spaces = ' ';
classString += blockIndex;
classString += ' for (let i = 0; i < count; i++)\n';
classString += ' {\n';
classString += ' for (let i = 0; i < count; i++)\n';
classString += ' {\n';
}
block.params.forEach((param) =>
{
@@ -391,86 +393,86 @@ messages.forEach((message) =>
switch (param.type)
{
case 'LLUUID':
classString += spaces + ' ' + val + '.writeToBuffer(buf, pos);\n';
classString += spaces + ' pos += 16;\n';
classString += spaces + ' ' + val + '.writeToBuffer(buf, pos);\n';
classString += spaces + ' pos += 16;\n';
break;
case 'F32':
classString += spaces + ' buf.writeFloatLE(' + val + ', pos);\n';
classString += spaces + ' pos += 4;\n';
classString += spaces + ' buf.writeFloatLE(' + val + ', pos);\n';
classString += spaces + ' pos += 4;\n';
break;
case 'S32':
classString += spaces + ' buf.writeInt32LE(' + val + ', pos);\n';
classString += spaces + ' pos += 4;\n';
classString += spaces + ' buf.writeInt32LE(' + val + ', pos);\n';
classString += spaces + ' pos += 4;\n';
break;
case 'U32':
classString += spaces + ' buf.writeUInt32LE(' + val + ', pos);\n';
classString += spaces + ' pos += 4;\n';
classString += spaces + ' buf.writeUInt32LE(' + val + ', pos);\n';
classString += spaces + ' pos += 4;\n';
break;
case 'U16':
case 'IPPORT':
classString += spaces + ' buf.writeUInt16LE(' + val + ', pos);\n';
classString += spaces + ' pos += 2;\n';
classString += spaces + ' buf.writeUInt16LE(' + val + ', pos);\n';
classString += spaces + ' pos += 2;\n';
break;
case 'S16':
classString += spaces + ' buf.writeInt16LE(' + val + ', pos);\n';
classString += spaces + ' pos += 2;\n';
classString += spaces + ' buf.writeInt16LE(' + val + ', pos);\n';
classString += spaces + ' pos += 2;\n';
break;
case 'U64':
case 'S64':
classString += spaces + ' buf.writeInt32LE(' + val + '.low, pos);\n';
classString += spaces + ' pos += 4;\n';
classString += spaces + ' buf.writeInt32LE(' + val + '.high, pos);\n';
classString += spaces + ' pos += 4;\n';
classString += spaces + ' buf.writeInt32LE(' + val + '.low, pos);\n';
classString += spaces + ' pos += 4;\n';
classString += spaces + ' buf.writeInt32LE(' + val + '.high, pos);\n';
classString += spaces + ' pos += 4;\n';
break;
case 'F64':
classString += spaces + ' buf.writeDoubleLE(' + val + ', pos);\n';
classString += spaces + ' pos += 8;\n';
classString += spaces + ' buf.writeDoubleLE(' + val + ', pos);\n';
classString += spaces + ' pos += 8;\n';
break;
case 'S8':
classString += spaces + ' buf.writeInt8(' + val + ', pos++);\n';
classString += spaces + ' buf.writeInt8(' + val + ', pos++);\n';
break;
case 'U8':
classString += spaces + ' buf.writeUInt8(' + val + ', pos++);\n';
classString += spaces + ' buf.writeUInt8(' + val + ', pos++);\n';
break;
case 'BOOL':
classString += spaces + ' buf.writeUInt8((' + val + ') ? 1 : 0, pos++);\n';
classString += spaces + ' buf.writeUInt8((' + val + ') ? 1 : 0, pos++);\n';
break;
case 'Variable':
if (param.size === 1)
{
classString += spaces + ' buf.writeUInt8(' + val + '.length, pos++);\n';
classString += spaces + ' buf.writeUInt8(' + val + '.length, pos++);\n';
}
if (param.size === 2)
{
classString += spaces + ' buf.writeUInt16BE(' + val + '.length, pos);\n';
classString += spaces + ' pos += 2;\n';
classString += spaces + ' buf.writeUInt16LE(' + val + '.length, pos);\n';
classString += spaces + ' pos += 2;\n';
}
classString += spaces + ' buf.write(' + val + ', pos);\n';
classString += spaces + ' pos += ' + val + '.length;\n';
classString += spaces + ' buf.write(' + val + ', pos);\n';
classString += spaces + ' pos += ' + val + '.length;\n';
break;
case 'LLVector4':
classString += spaces + ' ' + val + '.writeToBuffer(buf, pos);\n';
classString += spaces + ' pos += 16;\n';
classString += spaces + ' ' + val + '.writeToBuffer(buf, pos);\n';
classString += spaces + ' pos += 16;\n';
break;
case 'LLQuaternion':
classString += spaces + ' ' + val + '.writeToBuffer(buf, pos);\n';
classString += spaces + ' pos += 12;\n';
classString += spaces + ' ' + val + '.writeToBuffer(buf, pos);\n';
classString += spaces + ' pos += 12;\n';
break;
case 'LLVector3d':
classString += spaces + ' ' + val + '.writeToBuffer(buf, pos, true);\n';
classString += spaces + ' pos += 24;\n';
classString += spaces + ' ' + val + '.writeToBuffer(buf, pos, true);\n';
classString += spaces + ' pos += 24;\n';
break;
case 'LLVector3':
classString += spaces + ' ' + val + '.writeToBuffer(buf, pos, false);\n';
classString += spaces + ' pos += 12;\n';
classString += spaces + ' ' + val + '.writeToBuffer(buf, pos, false);\n';
classString += spaces + ' pos += 12;\n';
break;
case 'IPADDR':
classString += spaces + ' ' + val + '.writeToBuffer(buf, pos);\n';
classString += spaces + ' pos += 4;\n';
classString += spaces + ' ' + val + '.writeToBuffer(buf, pos);\n';
classString += spaces + ' pos += 4;\n';
break;
case 'Fixed':
classString += spaces + ' ' + val + '.copy(buf, pos);\n';
classString += spaces + ' pos += ' + param.size + ';\n';
classString += spaces + ' ' + val + '.copy(buf, pos);\n';
classString += spaces + ' pos += ' + param.size + ';\n';
break;
default:
console.log('Unknown type: ' + param.type);
@@ -478,23 +480,24 @@ messages.forEach((message) =>
});
if (!single)
{
classString += ' }\n';
classString += ' }\n';
}
});
classString += ' return pos - startPos;\n';
classString += ' return pos - startPos;\n';
}
else
{
classString += ' return 0;\n';
classString += ' return 0;\n';
}
classString +=' }\n';
classString +=' }\n';
classString +='\n';
classString+=' readFromBuffer(buf: Buffer, pos: number): number\n';
classString+=' {\n';
classString+=' readFromBuffer(buf: Buffer, pos: number): number\n';
classString+=' {\n';
if (message.blocks.length > 0)
{
classString += ' const startPos = pos;\n';
classString += ' const startPos = pos;\n';
classString += ' let varLength = 0;\n';
let firstCount = true;
@@ -518,11 +521,12 @@ messages.forEach((message) =>
varBlockConst = 'let';
}
let firstBlock = true;
let donelet = false;
message.blocks.forEach((block) =>
{
let single = false;
let blockIndex = '';
block.count = parseInt(block.count);
if (block.type === 'Variable')
{
let first = '';
@@ -531,8 +535,8 @@ messages.forEach((message) =>
firstCount = false;
first = letConst + ' ';
}
blockIndex = ' ' + first + 'count = buf.readUInt8(pos++);\n';
blockIndex += ' this.' + block.name + ' = [];\n';
blockIndex = ' ' + first + 'count = buf.readUInt8(pos++);\n';
blockIndex += ' this.' + block.name + ' = [];\n';
}
else if (block.type === 'Multiple')
{
@@ -542,8 +546,8 @@ messages.forEach((message) =>
firstCount = false;
first = letConst + ' ';
}
blockIndex = ' ' + first + 'count = ' + block.count + ';\n';
blockIndex += ' this.' + block.name + ' = [];';
blockIndex = ' ' + first + 'count = ' + block.count + ';\n';
blockIndex += ' this.' + block.name + ' = [];';
}
else
{
@@ -560,13 +564,13 @@ messages.forEach((message) =>
{
spaces = ' ';
classString += blockIndex;
classString += ' for (let i = 0; i < count; i++)\n';
classString += ' {\n';
classString += ' const newObj' + block.name + ': {\n';
classString += ' for (let i = 0; i < count; i++)\n';
classString += ' {\n';
classString += ' const newObj' + block.name + ': {\n';
}
else
{
classString += ' const newObj' + block.name + ': {\n';
classString += ' const newObj' + block.name + ': {\n';
}
const paramTypes = [];
const paramValues = [];
@@ -641,97 +645,101 @@ messages.forEach((message) =>
default:
console.log('Unknown type: '+param.type);
}
paramTypes.push(spaces + ' ' + param.name + ': '+jstype);
paramValues.push(spaces + ' ' + param.name + ': '+jsvalue);
paramTypes.push(spaces + ' ' + param.name + ': '+jstype);
paramValues.push(spaces + ' ' + param.name + ': '+jsvalue);
});
classString += paramTypes.join(',\n')+'\n';
classString += spaces + ' } = {\n';
classString += spaces + ' } = {\n';
classString += paramValues.join(',\n')+'\n';
classString += spaces + ' };\n';
classString += spaces + ' };\n';
block.params.forEach((param) =>
{
let val = '';
switch (param.type)
{
case 'LLUUID':
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = new UUID(buf, pos);\n';
classString += spaces + ' pos += 16;\n';
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = new UUID(buf, pos);\n';
classString += spaces + ' pos += 16;\n';
break;
case 'F32':
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = buf.readFloatLE(pos);\n';
classString += spaces + ' pos += 4;\n';
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = buf.readFloatLE(pos);\n';
classString += spaces + ' pos += 4;\n';
break;
case 'S32':
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = buf.readInt32LE(pos);\n';
classString += spaces + ' pos += 4;\n';
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = buf.readInt32LE(pos);\n';
classString += spaces + ' pos += 4;\n';
break;
case 'U32':
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = buf.readUInt32LE(pos);\n';
classString += spaces + ' pos += 4;\n';
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = buf.readUInt32LE(pos);\n';
classString += spaces + ' pos += 4;\n';
break;
case 'U16':
case 'IPPORT':
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = buf.readUInt16LE(pos);\n';
classString += spaces + ' pos += 2;\n';
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = buf.readUInt16LE(pos);\n';
classString += spaces + ' pos += 2;\n';
break;
case 'S16':
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = buf.readInt16LE(pos);\n';
classString += spaces + ' pos += 2;\n';
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = buf.readInt16LE(pos);\n';
classString += spaces + ' pos += 2;\n';
break;
case 'U64':
case 'S64':
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = new Long(buf.readInt32LE(pos), buf.readInt32LE(pos+4));\n';
classString += spaces + ' pos += 8;\n';
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = new Long(buf.readInt32LE(pos), buf.readInt32LE(pos+4));\n';
classString += spaces + ' pos += 8;\n';
break;
case 'F64':
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = buf.readDoubleLE(pos);\n';
classString += spaces + ' pos += 8;\n';
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = buf.readDoubleLE(pos);\n';
classString += spaces + ' pos += 8;\n';
break;
case 'S8':
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = buf.readInt8(pos++);\n';
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = buf.readInt8(pos++);\n';
break;
case 'U8':
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = buf.readUInt8(pos++);\n';
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = buf.readUInt8(pos++);\n';
break;
case 'BOOL':
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = (buf.readUInt8(pos++) === 1);\n';
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = (buf.readUInt8(pos++) === 1);\n';
break;
case 'Variable':
if (param.size === 1)
{
classString += spaces + ' let length = buf.readUInt8(pos++);\n';
classString += spaces + ' varLength = buf.readUInt8(pos++);\n';
}
if (param.size === 2)
else if (param.size === 2)
{
classString += spaces + ' let length = buf.readUInt16BE(pos);\n';
classString += spaces + ' pos += 2;\n';
classString += spaces + ' varLength = buf.readUInt16LE(pos);\n';
classString += spaces + ' pos += 2;\n';
}
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = buf.toString(\'utf8\', pos, length);\n';
classString += spaces + ' pos += length;\n';
else
{
console.error("INVALID VARIABLE LENGTH: " + param.size);
}
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = buf.toString(\'utf8\', pos, pos + (varLength - 1));\n';
classString += spaces + ' pos += varLength;\n';
break;
case 'LLVector4':
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = new Vector4(buf, pos);\n';
classString += spaces + ' pos += 16;\n';
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = new Vector4(buf, pos);\n';
classString += spaces + ' pos += 16;\n';
break;
case 'LLQuaternion':
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = new Quaternion(buf, pos);\n';
classString += spaces + ' pos += 12;\n';
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = new Quaternion(buf, pos);\n';
classString += spaces + ' pos += 12;\n';
break;
case 'LLVector3d':
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = new Vector3(buf, pos, true);\n';
classString += spaces + ' pos += 24;\n';
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = new Vector3(buf, pos, true);\n';
classString += spaces + ' pos += 24;\n';
break;
case 'LLVector3':
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = new Vector3(buf, pos, false);\n';
classString += spaces + ' pos += 12;\n';
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = new Vector3(buf, pos, false);\n';
classString += spaces + ' pos += 12;\n';
break;
case 'IPADDR':
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = new IPAddress(buf, pos);\n';
classString += spaces + ' pos += 4;\n';
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = new IPAddress(buf, pos);\n';
classString += spaces + ' pos += 4;\n';
break;
case 'Fixed':
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = buf.slice(pos, pos + ' + param.size + ');\n';
classString += spaces + ' pos += ' + param.size + ';\n';
classString += spaces + ' newObj' + block.name + '[\'' + param.name + '\'] = buf.slice(pos, pos + ' + param.size + ');\n';
classString += spaces + ' pos += ' + param.size + ';\n';
break;
default:
console.log('Unknown type: ' + param.type);
@@ -739,27 +747,27 @@ messages.forEach((message) =>
});
if (!single)
{
classString += ' this.'+block.name+'.push(newObj' + block.name + ');\n';
classString += ' }\n';
classString += ' this.'+block.name+'.push(newObj' + block.name + ');\n';
classString += ' }\n';
}
else
{
classString += ' this.'+block.name+' = newObj' + block.name + ';\n';
classString += ' this.'+block.name+' = newObj' + block.name + ';\n';
}
});
classString += ' return pos - startPos;\n';
classString += ' return pos - startPos;\n';
}
else
{
classString += ' return 0;\n';
classString += ' return 0;\n';
}
classString +=' }\n';
classString +=' }\n';
classString += '}\n';
classString +='\n';
const p = path.join(__dirname+'/../lib/classes/packets/'+message.name+'.ts');
const p = path.join(__dirname+'/../lib/classes/messages/'+message.name+'.ts');
fs.writeFile(p, classString, (err) =>
{
@@ -767,11 +775,11 @@ messages.forEach((message) =>
});
//Now write the Messages class
let classString = '// This file has been automatically generated by writePacketClasses.js\n\n';
let classString = '// This file has been automatically generated by writeMessageClasses.js\n\n';
messages.forEach((message) =>
{
const name = message.name;
classString += 'export * from \'./packets/'+name+'\';\n';
classString += 'export * from \'./messages/'+name+'\';\n';
});
classString += 'import {Message} from \'../enums/Message\';\n';
classString += '\n';
@@ -779,7 +787,7 @@ classString += 'const messages: {[index: number]: string} = {};\n';
const msgs = [];
messages.forEach((message) =>
{
msgs.push('messages[<number>Message.' + message.name + '] = \'' + message.name + 'Packet\'');
msgs.push('messages[<number>Message.' + message.name + '] = \'' + message.name + 'Message\'');
});
classString += msgs.join(';\n')+';\n';
classString += '\n';