Significant tidy-up. Update msg_template and add new ObjectAnimation message. Tidy up imports. Added buffer overrun check to the packet decoders since the message template doesn't seem to always correspond with what we receive (Specifically, MapBlockReply's new Size parameter)
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
// This file has been automatically generated by writeMessageClasses.js
|
||||
|
||||
import {UUID} from '../UUID';
|
||||
import {MessageFlags} from '../../enums/MessageFlags';
|
||||
import {MessageBase} from '../MessageBase';
|
||||
import {Message} from '../../enums/Message';
|
||||
import { UUID } from '../UUID';
|
||||
import { MessageFlags } from '../../enums/MessageFlags';
|
||||
import { MessageBase } from '../MessageBase';
|
||||
import { Message } from '../../enums/Message';
|
||||
|
||||
export class MapBlockReplyMessage implements MessageBase
|
||||
{
|
||||
@@ -25,10 +25,14 @@ export class MapBlockReplyMessage implements MessageBase
|
||||
Agents: number;
|
||||
MapImageID: UUID;
|
||||
}[];
|
||||
Size: {
|
||||
SizeX: number;
|
||||
SizeY: number;
|
||||
}[];
|
||||
|
||||
getSize(): number
|
||||
{
|
||||
return this.calculateVarVarSize(this.Data, 'Name', 1) + ((27) * this.Data.length) + 21;
|
||||
return this.calculateVarVarSize(this.Data, 'Name', 1) + ((27) * this.Data.length) + ((4) * this.Size.length) + 22;
|
||||
}
|
||||
|
||||
calculateVarVarSize(block: object[], paramName: string, extraPerVar: number): number
|
||||
@@ -48,7 +52,7 @@ export class MapBlockReplyMessage implements MessageBase
|
||||
pos += 16;
|
||||
buf.writeUInt32LE(this.AgentData['Flags'], pos);
|
||||
pos += 4;
|
||||
const count = this.Data.length;
|
||||
let count = this.Data.length;
|
||||
buf.writeUInt8(this.Data.length, pos++);
|
||||
for (let i = 0; i < count; i++)
|
||||
{
|
||||
@@ -67,6 +71,15 @@ export class MapBlockReplyMessage implements MessageBase
|
||||
this.Data[i]['MapImageID'].writeToBuffer(buf, pos);
|
||||
pos += 16;
|
||||
}
|
||||
count = this.Size.length;
|
||||
buf.writeUInt8(this.Size.length, pos++);
|
||||
for (let i = 0; i < count; i++)
|
||||
{
|
||||
buf.writeUInt16LE(this.Size[i]['SizeX'], pos);
|
||||
pos += 2;
|
||||
buf.writeUInt16LE(this.Size[i]['SizeY'], pos);
|
||||
pos += 2;
|
||||
}
|
||||
return pos - startPos;
|
||||
}
|
||||
|
||||
@@ -86,7 +99,11 @@ export class MapBlockReplyMessage implements MessageBase
|
||||
newObjAgentData['Flags'] = buf.readUInt32LE(pos);
|
||||
pos += 4;
|
||||
this.AgentData = newObjAgentData;
|
||||
const count = buf.readUInt8(pos++);
|
||||
if (pos >= buf.length)
|
||||
{
|
||||
return pos - startPos;
|
||||
}
|
||||
let count = buf.readUInt8(pos++);
|
||||
this.Data = [];
|
||||
for (let i = 0; i < count; i++)
|
||||
{
|
||||
@@ -125,6 +142,27 @@ export class MapBlockReplyMessage implements MessageBase
|
||||
pos += 16;
|
||||
this.Data.push(newObjData);
|
||||
}
|
||||
if (pos >= buf.length)
|
||||
{
|
||||
return pos - startPos;
|
||||
}
|
||||
count = buf.readUInt8(pos++);
|
||||
this.Size = [];
|
||||
for (let i = 0; i < count; i++)
|
||||
{
|
||||
const newObjSize: {
|
||||
SizeX: number,
|
||||
SizeY: number
|
||||
} = {
|
||||
SizeX: 0,
|
||||
SizeY: 0
|
||||
};
|
||||
newObjSize['SizeX'] = buf.readUInt16LE(pos);
|
||||
pos += 2;
|
||||
newObjSize['SizeY'] = buf.readUInt16LE(pos);
|
||||
pos += 2;
|
||||
this.Size.push(newObjSize);
|
||||
}
|
||||
return pos - startPos;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user