aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--package-lock.json24
-rw-r--r--webAO/client.ts67
-rw-r--r--webAO/encoding.ts2
3 files changed, 71 insertions, 22 deletions
diff --git a/package-lock.json b/package-lock.json
index 9157104..54b7b62 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8532,9 +8532,9 @@
}
},
"node_modules/jest-snapshot/node_modules/semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
@@ -10539,9 +10539,9 @@
}
},
"node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -11305,9 +11305,9 @@
}
},
"node_modules/tough-cookie": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz",
- "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
+ "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
"dependencies": {
"psl": "^1.1.33",
"punycode": "^2.1.1",
@@ -11418,9 +11418,9 @@
}
},
"node_modules/ts-loader/node_modules/semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dependencies": {
"lru-cache": "^6.0.0"
},
diff --git a/webAO/client.ts b/webAO/client.ts
index 0cc89cf..e5c5e2b 100644
--- a/webAO/client.ts
+++ b/webAO/client.ts
@@ -38,6 +38,7 @@ export const UPDATE_INTERVAL = 60;
*/
export let oldLoading = false;
export const setOldLoading = (val: boolean) => {
+ console.warn("old loading set to "+val)
oldLoading = val
}
@@ -105,6 +106,8 @@ class Client extends EventEmitter {
_lastTimeICReceived: any;
manifest: string[];
viewport: Viewport;
+ partial_packet: boolean;
+ temp_packet: String;
connect: () => void;
loadResources: () => void
isLowMemory: () => void
@@ -150,6 +153,8 @@ class Client extends EventEmitter {
this.sender = sender
this.viewport = masterViewport();
this._lastTimeICReceived = new Date(0);
+ this.partial_packet = false;
+ this.temp_packet = "";
loadResources
isLowMemory
}
@@ -229,19 +234,63 @@ class Client extends EventEmitter {
const msg = e.data;
console.debug(`S: ${msg}`);
- const packets = Array(msg.split("%"));
+ this.handle_server_packet(msg);
+
+ }
- packets.forEach(function(data: String){
- const splitPacket = String(data).split('#')
- const packetHeader = splitPacket[0];
+ /**
+ * Decode the packet
+ * @param {MessageEvent} e
+ */
+ handle_server_packet(p_data: string)
+{
+ let in_data = p_data;
+
+ if (!p_data.endsWith("%")) {
+ this.partial_packet = true;
+ this.temp_packet = this.temp_packet + in_data
+ console.log("Partial packet")
+ return;
+ }
- packetHandler.has(packetHeader)
- ? packetHandler.get(packetHeader)(splitPacket)
- : console.warn(`Invalid packet header ${packetHeader}`);
- });
-
+ else {
+ if (this.partial_packet) {
+ in_data = this.temp_packet + in_data
+ this.temp_packet = "";
+ this.partial_packet = false;
+ }
}
+ const packet_list = in_data.split("%");
+
+ for (var packet of packet_list) {
+ let f_contents;
+ // Packet should *always* end with #
+ if (packet.endsWith("#")) {
+ f_contents = packet.slice(0, -1).split("#");
+ }
+ // But, if it somehow doesn't, we should still be able to handle it
+ else {
+ f_contents = packet.split("#");
+ }
+ // Empty packets are suspicious!
+ if (f_contents.length == 0) {
+ console.warn("WARNING: Empty packet received from server, skipping...");
+ continue;
+ }
+ // Take the first arg as the command
+ const command = f_contents[0];
+ if(command!=="")
+ {
+ // The rest is contents of the packet
+ packetHandler.has(command)
+ ? packetHandler.get(command)(f_contents)
+ : console.warn(`Invalid packet header ${command}`);
+ };
+ }
+ }
+
+
/**
* Triggered when an network error occurs.
* @param {ErrorEvent} e
diff --git a/webAO/encoding.ts b/webAO/encoding.ts
index 3477d7b..697e1d0 100644
--- a/webAO/encoding.ts
+++ b/webAO/encoding.ts
@@ -52,5 +52,5 @@ export function decodeChat(estring: string): string {
*/
export function prepChat(msg: string): string {
// TODO: make this less awful
- return unescapeChat(decodeChat(msg));
+ return safeTags(unescapeChat(decodeChat(msg)));
}