Handle disconnects gracefully! Handle KillObject to prevent perpetually inflating object store. Unsubscribe from rxjs subscription in bot.ts on disconnect. Stop ping timer. Don't re-create clientEvents on each login.

This commit is contained in:
Casper Warden
2017-12-14 01:21:18 +00:00
parent 4e8feb181f
commit c9831ab427
20 changed files with 223 additions and 82 deletions

View File

@@ -23,7 +23,8 @@ class ObjectStore {
Message_1.Message.ObjectUpdateCached,
Message_1.Message.ObjectUpdateCompressed,
Message_1.Message.ImprovedTerseObjectUpdate,
Message_1.Message.MultipleObjectUpdate
Message_1.Message.MultipleObjectUpdate,
Message_1.Message.KillObject
], (packet) => {
switch (packet.message.id) {
case Message_1.Message.ObjectUpdate:
@@ -269,9 +270,39 @@ class ObjectStore {
const multipleObjectUpdate = packet.message;
console.error('TODO: MultipleObjectUpdate');
break;
case Message_1.Message.KillObject:
const killObj = packet.message;
killObj.ObjectData.forEach((obj) => {
const objectID = obj.ID;
this.deleteObject(objectID);
});
break;
}
});
}
deleteObject(objectID) {
if (this.objects[objectID]) {
if (this.objectsByParent[objectID]) {
this.objectsByParent[objectID].forEach((childObjID) => {
this.deleteObject(childObjID);
});
}
delete this.objectsByParent[objectID];
const objct = this.objects[objectID];
const uuid = objct.FullID.toString();
if (this.objectsByUUID[uuid]) {
delete this.objectsByUUID[uuid];
}
const parentID = objct.ParentID;
if (this.objectsByParent[parentID]) {
const ind = this.objectsByParent[parentID].indexOf(objectID);
if (ind !== -1) {
this.objectsByParent[parentID].splice(ind, 1);
}
}
delete this.objects[objectID];
}
}
readExtraParams(buf, pos, o) {
if (pos >= buf.length) {
return 0;