sonic-ws 1.0.0-rc.7 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -11
- package/dist/index.js +1 -1
- package/dist/version.d.ts +5 -3
- package/dist/version.js +8 -5
- package/dist/ws/Connection.d.ts +19 -0
- package/dist/ws/Connection.js +17 -0
- package/dist/ws/client/core/ClientCore.d.ts +27 -9
- package/dist/ws/client/core/ClientCore.js +162 -64
- package/dist/ws/client/node/ClientNode.js +2 -2
- package/dist/ws/packets/PacketProcessors.d.ts +11 -6
- package/dist/ws/packets/PacketProcessors.js +233 -175
- package/dist/ws/packets/PacketType.d.ts +30 -16
- package/dist/ws/packets/PacketType.js +31 -17
- package/dist/ws/packets/Packets.d.ts +15 -14
- package/dist/ws/packets/Packets.js +117 -99
- package/dist/ws/server/SonicWSConnection.d.ts +30 -8
- package/dist/ws/server/SonicWSConnection.js +67 -25
- package/dist/ws/server/SonicWSServer.d.ts +22 -0
- package/dist/ws/server/SonicWSServer.js +50 -8
- package/dist/ws/util/ArrayUtil.js +1 -1
- package/dist/ws/util/BufferUtil.d.ts +4 -0
- package/dist/ws/util/BufferUtil.js +40 -0
- package/dist/ws/util/StringUtil.d.ts +6 -0
- package/dist/ws/util/StringUtil.js +66 -0
- package/dist/ws/util/enums/EnumHandler.d.ts +2 -3
- package/dist/ws/util/enums/EnumHandler.js +4 -7
- package/dist/ws/util/enums/EnumType.d.ts +3 -2
- package/dist/ws/util/enums/EnumType.js +21 -10
- package/dist/ws/util/packets/BatchHelper.d.ts +10 -6
- package/dist/ws/util/packets/BatchHelper.js +28 -16
- package/dist/ws/util/packets/CompressionUtil.d.ts +44 -0
- package/dist/ws/util/packets/CompressionUtil.js +321 -0
- package/dist/ws/util/packets/PacketHolder.d.ts +5 -10
- package/dist/ws/util/packets/PacketHolder.js +25 -13
- package/dist/ws/util/packets/PacketUtils.d.ts +11 -8
- package/dist/ws/util/packets/PacketUtils.js +31 -26
- package/dist/ws/util/packets/RateHandler.js +16 -1
- package/package.json +2 -2
- package/dist/ws/util/packets/CodePointUtil.d.ts +0 -22
- package/dist/ws/util/packets/CodePointUtil.js +0 -220
|
@@ -1,35 +1,37 @@
|
|
|
1
1
|
import { EnumPackage } from "../util/enums/EnumType";
|
|
2
2
|
import { SonicWSConnection } from "../server/SonicWSConnection";
|
|
3
3
|
import { PacketType } from "./PacketType";
|
|
4
|
+
export type ValidatorFunction = ((socket: SonicWSConnection, values: any[]) => boolean) | null;
|
|
4
5
|
export declare class Packet {
|
|
5
6
|
tag: string;
|
|
7
|
+
defaultEnabled: boolean;
|
|
6
8
|
maxSize: number;
|
|
7
9
|
minSize: number;
|
|
8
10
|
type: PacketType | PacketType[];
|
|
9
11
|
enumData: EnumPackage[];
|
|
10
12
|
dataMax: number | number[];
|
|
11
13
|
dataMin: number | number[];
|
|
12
|
-
packetDelimitSize: number;
|
|
13
14
|
dataBatching: number;
|
|
14
15
|
maxBatchSize: number;
|
|
15
16
|
dontSpread: boolean;
|
|
16
17
|
autoFlatten: boolean;
|
|
17
18
|
rateLimit: number;
|
|
18
19
|
object: boolean;
|
|
20
|
+
client: boolean;
|
|
19
21
|
private receiveProcessor;
|
|
20
22
|
private sendProcessor;
|
|
21
|
-
private
|
|
22
|
-
processReceive: (data:
|
|
23
|
-
processSend: (data: any[]) =>
|
|
24
|
-
validate: (data:
|
|
23
|
+
private validator;
|
|
24
|
+
processReceive: (data: Uint8Array, validationResult: any) => any;
|
|
25
|
+
processSend: (data: any[]) => number[];
|
|
26
|
+
validate: (data: Uint8Array) => boolean;
|
|
25
27
|
customValidator: ((socket: SonicWSConnection, ...values: any[]) => boolean) | null;
|
|
26
|
-
constructor(tag: string, schema: PacketSchema, customValidator:
|
|
27
|
-
listen(value:
|
|
28
|
-
private
|
|
29
|
-
serialize():
|
|
30
|
-
private static
|
|
31
|
-
static deserialize(
|
|
32
|
-
static deserializeAll(
|
|
28
|
+
constructor(tag: string, schema: PacketSchema, customValidator: ValidatorFunction, enabled: boolean, client: boolean);
|
|
29
|
+
listen(value: Uint8Array, socket: SonicWSConnection | null): [processed: any, flatten: boolean] | string;
|
|
30
|
+
private serializeNumber;
|
|
31
|
+
serialize(): number[];
|
|
32
|
+
private static readVarInts;
|
|
33
|
+
static deserialize(data: Uint8Array, offset: number, client: boolean): [packet: Packet, offset: number];
|
|
34
|
+
static deserializeAll(data: Uint8Array, client: boolean): Packet[];
|
|
33
35
|
}
|
|
34
36
|
export declare class PacketSchema {
|
|
35
37
|
types: PacketType[];
|
|
@@ -38,7 +40,6 @@ export declare class PacketSchema {
|
|
|
38
40
|
type: PacketType;
|
|
39
41
|
dataMax: number;
|
|
40
42
|
dataMin: number;
|
|
41
|
-
packetDelimitSize: number;
|
|
42
43
|
dataBatching: number;
|
|
43
44
|
maxBatchSize: number;
|
|
44
45
|
rateLimit: number;
|
|
@@ -48,5 +49,5 @@ export declare class PacketSchema {
|
|
|
48
49
|
object: boolean;
|
|
49
50
|
constructor(object: boolean);
|
|
50
51
|
static single(type: PacketType | EnumPackage, dataMax: number, dataMin: number, dontSpread: boolean, dataBatching: number, maxBatchSize: number, rateLimit: number): PacketSchema;
|
|
51
|
-
static object(types: (PacketType | EnumPackage)[], dataMaxes: number[], dataMins: number[], dontSpread: boolean, autoFlatten: boolean,
|
|
52
|
+
static object(types: (PacketType | EnumPackage)[], dataMaxes: number[], dataMins: number[], dontSpread: boolean, autoFlatten: boolean, dataBatching: number, maxBatchSize: number, rateLimit: number): PacketSchema;
|
|
52
53
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
* Copyright 2025 Lily (
|
|
3
|
+
* Copyright 2025 Lily (liwybloc)
|
|
4
4
|
*
|
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
6
|
* you may not use this file except in compliance with the License.
|
|
@@ -27,32 +27,34 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
27
27
|
exports.PacketSchema = exports.Packet = void 0;
|
|
28
28
|
var EnumHandler_1 = require("../util/enums/EnumHandler");
|
|
29
29
|
var EnumType_1 = require("../util/enums/EnumType");
|
|
30
|
-
var
|
|
31
|
-
var CodePointUtil_1 = require("../util/packets/CodePointUtil");
|
|
30
|
+
var CompressionUtil_1 = require("../util/packets/CompressionUtil");
|
|
32
31
|
var PacketUtils_1 = require("../util/packets/PacketUtils");
|
|
33
32
|
var PacketProcessors_1 = require("./PacketProcessors");
|
|
34
33
|
var PacketType_1 = require("./PacketType");
|
|
34
|
+
var BufferUtil_1 = require("../util/BufferUtil");
|
|
35
|
+
var StringUtil_1 = require("../util/StringUtil");
|
|
35
36
|
var Packet = /** @class */ (function () {
|
|
36
|
-
function Packet(tag, schema, customValidator, client) {
|
|
37
|
+
function Packet(tag, schema, customValidator, enabled, client) {
|
|
37
38
|
var _this = this;
|
|
38
39
|
this.tag = tag;
|
|
40
|
+
this.defaultEnabled = enabled;
|
|
41
|
+
this.client = client;
|
|
39
42
|
this.enumData = schema.enumData;
|
|
40
43
|
this.rateLimit = schema.rateLimit;
|
|
41
44
|
this.dontSpread = schema.dontSpread;
|
|
42
45
|
this.autoFlatten = schema.autoFlatten;
|
|
43
46
|
this.dataBatching = schema.dataBatching;
|
|
44
47
|
this.maxBatchSize = client ? Infinity : schema.maxBatchSize;
|
|
45
|
-
this.
|
|
46
|
-
if (
|
|
48
|
+
this.object = schema.object;
|
|
49
|
+
if (this.object) {
|
|
47
50
|
this.type = schema.types;
|
|
48
51
|
this.dataMax = schema.dataMaxes;
|
|
49
52
|
this.dataMin = schema.dataMins;
|
|
50
53
|
this.maxSize = this.type.length;
|
|
51
54
|
this.minSize = this.type.length;
|
|
52
|
-
this.
|
|
53
|
-
this.
|
|
54
|
-
this.
|
|
55
|
-
this.sendProcessor = (0, PacketProcessors_1.createObjSendProcessor)(this.type, this.packetDelimitSize);
|
|
55
|
+
this.receiveProcessor = (0, PacketProcessors_1.createObjReceiveProcessor)(this);
|
|
56
|
+
this.validator = (0, PacketProcessors_1.createObjValidator)(this);
|
|
57
|
+
this.sendProcessor = (0, PacketProcessors_1.createObjSendProcessor)(this);
|
|
56
58
|
}
|
|
57
59
|
else {
|
|
58
60
|
this.type = schema.type;
|
|
@@ -60,21 +62,22 @@ var Packet = /** @class */ (function () {
|
|
|
60
62
|
this.dataMin = schema.dataMin;
|
|
61
63
|
this.maxSize = this.dataMax;
|
|
62
64
|
this.minSize = this.dataMin;
|
|
63
|
-
this.
|
|
64
|
-
this.
|
|
65
|
-
this.
|
|
66
|
-
this.sendProcessor = PacketProcessors_1.PacketSendProcessors[this.type];
|
|
65
|
+
this.receiveProcessor = (0, PacketProcessors_1.createReceiveProcessor)(this.type, this.enumData, this.dataMax);
|
|
66
|
+
this.validator = (0, PacketProcessors_1.createValidator)(this.type, this.dataMax, this.dataMin, this.enumData);
|
|
67
|
+
this.sendProcessor = (0, PacketProcessors_1.createSendProcessor)(this.type);
|
|
67
68
|
}
|
|
68
|
-
this.processReceive = function (data) { return _this.receiveProcessor(data,
|
|
69
|
+
this.processReceive = function (data, validationResult) { return _this.receiveProcessor(data, validationResult, 0); };
|
|
69
70
|
this.processSend = function (data) { return _this.sendProcessor(data); };
|
|
70
|
-
this.validate =
|
|
71
|
+
this.validate = function (data) { return _this.validator(data, 0); };
|
|
71
72
|
this.customValidator = customValidator;
|
|
73
|
+
this.serializeNumber = this.serializeNumber.bind(this);
|
|
72
74
|
}
|
|
73
75
|
Packet.prototype.listen = function (value, socket) {
|
|
74
76
|
try {
|
|
75
|
-
|
|
77
|
+
var validationResult = this.validate(value);
|
|
78
|
+
if (!this.client && validationResult == false)
|
|
76
79
|
return "Invalid packet";
|
|
77
|
-
var processed = this.processReceive(value);
|
|
80
|
+
var processed = this.processReceive(value, validationResult);
|
|
78
81
|
var useableData = this.autoFlatten ? (0, PacketUtils_1.UnFlattenData)(processed) : processed;
|
|
79
82
|
if (this.customValidator != null) {
|
|
80
83
|
if (!this.dontSpread) {
|
|
@@ -93,114 +96,129 @@ var Packet = /** @class */ (function () {
|
|
|
93
96
|
return "Error: " + err;
|
|
94
97
|
}
|
|
95
98
|
};
|
|
96
|
-
Packet.prototype.
|
|
97
|
-
return
|
|
99
|
+
Packet.prototype.serializeNumber = function (n) {
|
|
100
|
+
return (0, CompressionUtil_1.convertVarInt)(n, false);
|
|
98
101
|
};
|
|
99
102
|
Packet.prototype.serialize = function () {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
var rateLimit = String.fromCharCode(this.rateLimit + 1);
|
|
103
|
+
// shared values for both
|
|
104
|
+
var sharedData = __spreadArray(__spreadArray(__spreadArray([
|
|
105
|
+
this.tag.length
|
|
106
|
+
], (0, StringUtil_1.processCharCodes)(this.tag), true), [
|
|
107
|
+
this.dontSpread ? 1 : 0,
|
|
108
|
+
this.dataBatching, this.maxBatchSize,
|
|
109
|
+
this.enumData.length
|
|
110
|
+
], false), this.enumData.map(function (x) { return x.serialize(); }).flat(), true);
|
|
109
111
|
// single-value packet (not an object schema)
|
|
110
112
|
if (!this.object) {
|
|
111
|
-
return
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
String.fromCharCode(this.tag.length + 1) + // tag length, offset by 1 for NULL
|
|
117
|
-
this.tag; // the tag
|
|
113
|
+
return __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], sharedData, true), [
|
|
114
|
+
0
|
|
115
|
+
], false), this.serializeNumber(this.dataMax), true), this.serializeNumber(this.dataMin), true), [
|
|
116
|
+
this.type,
|
|
117
|
+
], false);
|
|
118
118
|
}
|
|
119
119
|
// object packet
|
|
120
|
-
return
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
this.
|
|
125
|
-
|
|
126
|
-
this.type.map(function (x) { return String.fromCharCode(x + 1); }).join("") + // all types, offset by 1 for NULL
|
|
127
|
-
String.fromCharCode(this.tag.length + 1) + // tag length, offset by 1 for NULL
|
|
128
|
-
this.tag; // the tag
|
|
120
|
+
return __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], sharedData, true), [
|
|
121
|
+
this.maxSize + 1, // size, and +1 because of 0 for single
|
|
122
|
+
this.autoFlatten ? 1 : 0
|
|
123
|
+
], false), this.dataMax.map(this.serializeNumber).flat(), true), this.dataMin.map(this.serializeNumber).flat(), true), this.type, true), [
|
|
124
|
+
this.tag.length, // tag length, offset by 1 for NULL
|
|
125
|
+
], false);
|
|
129
126
|
};
|
|
130
|
-
Packet.
|
|
131
|
-
|
|
127
|
+
Packet.readVarInts = function (data, offset, size) {
|
|
128
|
+
var res = [];
|
|
129
|
+
for (var i = 0; i < size; i++) {
|
|
130
|
+
var _a = (0, CompressionUtil_1.readVarInt)(data, offset, false), off = _a[0], varint = _a[1];
|
|
131
|
+
offset = off;
|
|
132
|
+
res.push(varint);
|
|
133
|
+
}
|
|
134
|
+
return [res, offset];
|
|
132
135
|
};
|
|
133
|
-
|
|
134
|
-
// probably ^^
|
|
135
|
-
Packet.deserialize = function (text, offset, client) {
|
|
136
|
+
Packet.deserialize = function (data, offset, client) {
|
|
136
137
|
var beginningOffset = offset;
|
|
137
|
-
|
|
138
|
-
var
|
|
139
|
-
|
|
140
|
-
var
|
|
141
|
-
|
|
138
|
+
// read length, go up 1
|
|
139
|
+
var tagLength = data[offset++];
|
|
140
|
+
// read tag as it's up 1, and add offset
|
|
141
|
+
var tag = (0, BufferUtil_1.as8String)(data.slice(offset, offset += tagLength));
|
|
142
|
+
// then read dont spread, go up 1
|
|
143
|
+
var dontSpread = data[offset++] == 1;
|
|
144
|
+
// read batching, up 1
|
|
145
|
+
var dataBatching = data[offset++];
|
|
146
|
+
// read max batch size, up 1; can prob remove? idk
|
|
147
|
+
var maxBatchSize = data[offset++];
|
|
148
|
+
// read enum length, up 1
|
|
149
|
+
var enumLength = data[offset++];
|
|
142
150
|
var enums = [];
|
|
143
151
|
for (var i = 0; i < enumLength; i++) {
|
|
144
|
-
|
|
145
|
-
var
|
|
146
|
-
offset
|
|
147
|
-
var
|
|
152
|
+
// read tag length, go up 1
|
|
153
|
+
var enumTagLength = data[offset++];
|
|
154
|
+
// up 1 so read offset -> offset += tag length, to add tag length and skip over it
|
|
155
|
+
var enumTag = (0, BufferUtil_1.as8String)(data.slice(offset, offset += enumTagLength));
|
|
156
|
+
// read amount of values
|
|
157
|
+
var valueCount = data[offset++];
|
|
148
158
|
var values = [];
|
|
149
159
|
for (var j = 0; j < valueCount; j++) {
|
|
150
|
-
|
|
151
|
-
var
|
|
152
|
-
|
|
153
|
-
offset
|
|
160
|
+
// read the length of the value, go up 1
|
|
161
|
+
var valueLength = data[offset++];
|
|
162
|
+
// then read the type of value, up 1
|
|
163
|
+
var valueType = data[offset++];
|
|
164
|
+
// now can just read the values, increase offset for later use
|
|
165
|
+
var value = (0, BufferUtil_1.as8String)(data.slice(offset, offset += valueLength));
|
|
166
|
+
// process it
|
|
154
167
|
values.push(EnumType_1.TYPE_CONVERSION_MAP[valueType](value));
|
|
155
168
|
}
|
|
169
|
+
// define the enum with the values
|
|
156
170
|
enums.push((0, EnumHandler_1.DefineEnum)(enumTag, values));
|
|
157
171
|
}
|
|
158
|
-
|
|
172
|
+
// read type count; prob should change sometime
|
|
173
|
+
var size = data[offset++] - 1;
|
|
159
174
|
// objects
|
|
160
|
-
//
|
|
175
|
+
// single packet is 0, 0 - 1 = -1
|
|
161
176
|
if (size != -1) {
|
|
162
|
-
//
|
|
163
|
-
var autoFlatten =
|
|
164
|
-
//
|
|
165
|
-
var
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
var
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
var
|
|
172
|
-
|
|
173
|
-
var tagStart_1 = tEnd + 1; // tag string starts after tag length byte
|
|
174
|
-
var dataMaxes = this.processINT_Ds(text.substring(dcStart, dcEnd), packetDelimitSize);
|
|
175
|
-
var dataMins = this.processINT_Ds(text.substring(dmStart, dmEnd), packetDelimitSize);
|
|
176
|
-
var types = (0, CodePointUtil_1.processCharCodes)(text.substring(tStart, tEnd)).map(function (x) { return x - 1; });
|
|
177
|
+
// 1 for true, 0 for false
|
|
178
|
+
var autoFlatten = data[offset++] == 1;
|
|
179
|
+
// read var ints for the datamaxes
|
|
180
|
+
var _a = this.readVarInts(data, offset, size), dataMaxes = _a[0], o1_1 = _a[1];
|
|
181
|
+
offset = o1_1;
|
|
182
|
+
// read var ints for the datamins
|
|
183
|
+
var _b = this.readVarInts(data, offset, size), dataMins = _b[0], o2_1 = _b[1];
|
|
184
|
+
offset = o2_1;
|
|
185
|
+
// get types, skip past size since there'll be size of these
|
|
186
|
+
var types = Array.from(data.slice(offset, offset += size));
|
|
187
|
+
// convert any enums into their indexed form for best bandwidth
|
|
177
188
|
var index_1 = 0;
|
|
178
189
|
var finalTypes = types.map(function (x) { return x == PacketType_1.PacketType.ENUMS ? enums[index_1++] : x; }); // convert enums to their enum packages
|
|
179
|
-
|
|
180
|
-
var
|
|
190
|
+
// make schema
|
|
191
|
+
var schema_1 = PacketSchema.object(finalTypes, dataMaxes, dataMins, dontSpread, autoFlatten, dataBatching, maxBatchSize, -1);
|
|
181
192
|
return [
|
|
182
|
-
new Packet(
|
|
183
|
-
|
|
193
|
+
new Packet(tag, schema_1, null, false, client),
|
|
194
|
+
// +1 to go next
|
|
195
|
+
(offset - beginningOffset) + 1,
|
|
184
196
|
];
|
|
185
197
|
}
|
|
186
|
-
// single packet
|
|
187
|
-
|
|
188
|
-
var
|
|
189
|
-
|
|
198
|
+
// single packet
|
|
199
|
+
// read varint for datamax
|
|
200
|
+
var _c = (0, CompressionUtil_1.readVarInt)(data, offset, false), o1 = _c[0], dataMax = _c[1];
|
|
201
|
+
offset = o1;
|
|
202
|
+
// read varint for datamin
|
|
203
|
+
var _d = (0, CompressionUtil_1.readVarInt)(data, offset, false), o2 = _d[0], dataMin = _d[1];
|
|
204
|
+
offset = o2;
|
|
205
|
+
// read type, no more so no +1
|
|
206
|
+
var type = data[offset];
|
|
207
|
+
// do enum stuff
|
|
190
208
|
var finalType = type == PacketType_1.PacketType.ENUMS ? enums[0] : type; // convert enum to enum package
|
|
191
|
-
|
|
192
|
-
var
|
|
193
|
-
var tag = text.substring(tagStart + 1, tagStart + 1 + tagLength);
|
|
209
|
+
// make schema
|
|
210
|
+
var schema = PacketSchema.single(finalType, dataMax, dataMin, dontSpread, dataBatching, maxBatchSize, -1);
|
|
194
211
|
return [
|
|
195
|
-
new Packet(tag,
|
|
196
|
-
|
|
212
|
+
new Packet(tag, schema, null, false, client),
|
|
213
|
+
// +1 to go next
|
|
214
|
+
(offset - beginningOffset) + 1,
|
|
197
215
|
];
|
|
198
216
|
};
|
|
199
|
-
Packet.deserializeAll = function (
|
|
217
|
+
Packet.deserializeAll = function (data, client) {
|
|
200
218
|
var arr = [];
|
|
201
219
|
var offset = 0;
|
|
202
|
-
while (offset <
|
|
203
|
-
var _a = this.deserialize(
|
|
220
|
+
while (offset < data.length) {
|
|
221
|
+
var _a = this.deserialize(data, offset, client), packet = _a[0], len = _a[1];
|
|
204
222
|
arr.push(packet);
|
|
205
223
|
offset += len;
|
|
206
224
|
}
|
|
@@ -217,7 +235,6 @@ var PacketSchema = /** @class */ (function () {
|
|
|
217
235
|
this.type = PacketType_1.PacketType.NONE;
|
|
218
236
|
this.dataMax = -1;
|
|
219
237
|
this.dataMin = -1;
|
|
220
|
-
this.packetDelimitSize = 1;
|
|
221
238
|
this.dataBatching = 0;
|
|
222
239
|
this.maxBatchSize = 10;
|
|
223
240
|
this.rateLimit = 0;
|
|
@@ -230,6 +247,8 @@ var PacketSchema = /** @class */ (function () {
|
|
|
230
247
|
var schema = new PacketSchema(false);
|
|
231
248
|
if (typeof type == 'number') {
|
|
232
249
|
schema.type = type;
|
|
250
|
+
if (type == PacketType_1.PacketType.NONE)
|
|
251
|
+
dataMax = dataMin = 0; // remove garbage data issues
|
|
233
252
|
}
|
|
234
253
|
else {
|
|
235
254
|
schema.type = PacketType_1.PacketType.ENUMS;
|
|
@@ -243,7 +262,7 @@ var PacketSchema = /** @class */ (function () {
|
|
|
243
262
|
schema.rateLimit = rateLimit;
|
|
244
263
|
return schema;
|
|
245
264
|
};
|
|
246
|
-
PacketSchema.object = function (types, dataMaxes, dataMins, dontSpread, autoFlatten,
|
|
265
|
+
PacketSchema.object = function (types, dataMaxes, dataMins, dontSpread, autoFlatten, dataBatching, maxBatchSize, rateLimit) {
|
|
247
266
|
if (types.length != dataMaxes.length || types.length != dataMins.length)
|
|
248
267
|
throw new Error("There is an inbalance between the amount of types, data maxes, and data mins!");
|
|
249
268
|
var schema = new PacketSchema(true);
|
|
@@ -260,7 +279,6 @@ var PacketSchema = /** @class */ (function () {
|
|
|
260
279
|
schema.dataMins = dataMins;
|
|
261
280
|
schema.dontSpread = dontSpread;
|
|
262
281
|
schema.autoFlatten = autoFlatten;
|
|
263
|
-
schema.packetDelimitSize = packetDelimitSize;
|
|
264
282
|
schema.dataBatching = dataBatching;
|
|
265
283
|
schema.maxBatchSize = maxBatchSize;
|
|
266
284
|
schema.rateLimit = rateLimit;
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
import * as WS from 'ws';
|
|
2
2
|
import { SonicWSServer } from './SonicWSServer';
|
|
3
3
|
import { Packet } from '../packets/Packets';
|
|
4
|
-
|
|
4
|
+
import { Connection } from '../Connection';
|
|
5
|
+
export declare class SonicWSConnection implements Connection {
|
|
5
6
|
/** Raw 'ws' library socket */
|
|
6
7
|
socket: WS.WebSocket;
|
|
7
8
|
private host;
|
|
8
9
|
private listeners;
|
|
9
10
|
private print;
|
|
10
|
-
private timers;
|
|
11
11
|
private handshakePacket;
|
|
12
12
|
private handshakeLambda;
|
|
13
13
|
private messageLambda;
|
|
14
14
|
private handshakedMessageLambda;
|
|
15
15
|
private batcher;
|
|
16
16
|
private rater;
|
|
17
|
+
private enabledPackets;
|
|
17
18
|
/** If the packet handshake has been completed; `wss.requireHandshake(packet)` */
|
|
18
19
|
handshakeComplete: boolean;
|
|
19
20
|
/** The index of the connection; unique for all connected, recycles old disconnected ids. Should be safe for INTS_C unless you have more than 27,647 connected at once. */
|
|
20
21
|
id: number;
|
|
21
|
-
|
|
22
|
-
code: string;
|
|
22
|
+
timers: Record<number, number>;
|
|
23
23
|
constructor(socket: WS.WebSocket, host: SonicWSServer, id: number, handshakePacket: string | null, clientRateLimit: number, serverRateLimit: number);
|
|
24
24
|
private parseData;
|
|
25
25
|
private handshakeHandler;
|
|
@@ -28,7 +28,17 @@ export declare class SonicWSConnection {
|
|
|
28
28
|
private messageHandler;
|
|
29
29
|
private hideNewLines;
|
|
30
30
|
/** Sends raw data to the user; will likely fail validity checks if used externally */
|
|
31
|
-
raw_send(data:
|
|
31
|
+
raw_send(data: Uint8Array): void;
|
|
32
|
+
/**
|
|
33
|
+
* Enables a packet for the client.
|
|
34
|
+
* @param tag The tag of the packet
|
|
35
|
+
*/
|
|
36
|
+
enablePacket(tag: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* Disables a packet for the client.
|
|
39
|
+
* @param tag The tag of the packet
|
|
40
|
+
*/
|
|
41
|
+
disablePacket(tag: string): void;
|
|
32
42
|
/**
|
|
33
43
|
* Checks if the connection is closed
|
|
34
44
|
* @returns If it's closed or not
|
|
@@ -48,7 +58,7 @@ export declare class SonicWSConnection {
|
|
|
48
58
|
/**
|
|
49
59
|
* For internal use.
|
|
50
60
|
*/
|
|
51
|
-
send_processed(code:
|
|
61
|
+
send_processed(code: number, data: number[], packet: Packet): void;
|
|
52
62
|
/**
|
|
53
63
|
* Sends a packet with the tag and values
|
|
54
64
|
* @param tag The tag to send
|
|
@@ -72,19 +82,31 @@ export declare class SonicWSConnection {
|
|
|
72
82
|
*/
|
|
73
83
|
togglePrint(): void;
|
|
74
84
|
/**
|
|
75
|
-
* Closes the
|
|
85
|
+
* Closes the connection
|
|
76
86
|
*/
|
|
77
|
-
close(code?: number): void;
|
|
87
|
+
close(code?: number, reason?: string): void;
|
|
78
88
|
/**
|
|
79
89
|
* Sets a timeout that will automatically end when the socket closes
|
|
80
90
|
* @param call The function to call
|
|
81
91
|
* @param time The time between now and the call (ms)
|
|
92
|
+
* @returns The timeout id to be used with socket.clearInterval(id)
|
|
82
93
|
*/
|
|
83
94
|
setTimeout(call: () => void, time: number): number;
|
|
84
95
|
/**
|
|
85
96
|
* Sets an interval that will automatically end when the socket closes
|
|
86
97
|
* @param call The function to call
|
|
87
98
|
* @param time The time between calls (ms)
|
|
99
|
+
* @returns The interval id to be used with socket.clearInterval(id)
|
|
88
100
|
*/
|
|
89
101
|
setInterval(call: () => void, time: number): number;
|
|
102
|
+
/**
|
|
103
|
+
* Clears a timeout
|
|
104
|
+
* @param id The timeout id
|
|
105
|
+
*/
|
|
106
|
+
clearTimeout(id: number): void;
|
|
107
|
+
/**
|
|
108
|
+
* Clears an interval
|
|
109
|
+
* @param id The interval id
|
|
110
|
+
*/
|
|
111
|
+
clearInterval(id: number): void;
|
|
90
112
|
}
|