socio
Version:
A WebSocket Real-Time Communication (RTC) API framework.
95 lines (94 loc) • 4.2 kB
JavaScript
export var ServerMessageKind;
(function (ServerMessageKind) {
ServerMessageKind[ServerMessageKind["SUB"] = 0] = "SUB";
ServerMessageKind[ServerMessageKind["UNSUB"] = 1] = "UNSUB";
ServerMessageKind[ServerMessageKind["SQL"] = 2] = "SQL";
ServerMessageKind[ServerMessageKind["PING"] = 3] = "PING";
ServerMessageKind[ServerMessageKind["AUTH"] = 4] = "AUTH";
ServerMessageKind[ServerMessageKind["GET_PERM"] = 5] = "GET_PERM";
ServerMessageKind[ServerMessageKind["PROP_SUB"] = 6] = "PROP_SUB";
ServerMessageKind[ServerMessageKind["PROP_UNSUB"] = 7] = "PROP_UNSUB";
ServerMessageKind[ServerMessageKind["PROP_GET"] = 8] = "PROP_GET";
ServerMessageKind[ServerMessageKind["PROP_SET"] = 9] = "PROP_SET";
ServerMessageKind[ServerMessageKind["PROP_REG"] = 10] = "PROP_REG";
ServerMessageKind[ServerMessageKind["SERV"] = 11] = "SERV";
ServerMessageKind[ServerMessageKind["ADMIN"] = 12] = "ADMIN";
ServerMessageKind[ServerMessageKind["RECON"] = 13] = "RECON";
ServerMessageKind[ServerMessageKind["UP_FILES"] = 14] = "UP_FILES";
ServerMessageKind[ServerMessageKind["GET_FILES"] = 15] = "GET_FILES";
ServerMessageKind[ServerMessageKind["IDENTIFY"] = 16] = "IDENTIFY";
ServerMessageKind[ServerMessageKind["DISCOVERY"] = 17] = "DISCOVERY";
ServerMessageKind[ServerMessageKind["RPC"] = 18] = "RPC";
ServerMessageKind[ServerMessageKind["OK"] = 19] = "OK";
})(ServerMessageKind || (ServerMessageKind = {}));
;
export var ClientMessageKind;
(function (ClientMessageKind) {
ClientMessageKind[ClientMessageKind["CON"] = 0] = "CON";
ClientMessageKind[ClientMessageKind["UPD"] = 1] = "UPD";
ClientMessageKind[ClientMessageKind["PONG"] = 2] = "PONG";
ClientMessageKind[ClientMessageKind["AUTH"] = 3] = "AUTH";
ClientMessageKind[ClientMessageKind["GET_PERM"] = 4] = "GET_PERM";
ClientMessageKind[ClientMessageKind["RES"] = 5] = "RES";
ClientMessageKind[ClientMessageKind["PROP_UPD"] = 6] = "PROP_UPD";
ClientMessageKind[ClientMessageKind["PROP_DROP"] = 7] = "PROP_DROP";
ClientMessageKind[ClientMessageKind["CMD"] = 8] = "CMD";
ClientMessageKind[ClientMessageKind["RECON"] = 9] = "RECON";
ClientMessageKind[ClientMessageKind["RECV_FILES"] = 10] = "RECV_FILES";
ClientMessageKind[ClientMessageKind["TIMEOUT"] = 11] = "TIMEOUT";
ClientMessageKind[ClientMessageKind["RPC"] = 12] = "RPC";
})(ClientMessageKind || (ClientMessageKind = {}));
;
export const socio_string_markers_regex = /--(?<markers>(?:-?(?:socio|auth|perm))*)/i;
export function SocioStringParse(str) {
const markers = str.match(socio_string_markers_regex)?.groups?.markers;
return { str, markers: markers ? markers.split('-') : [] };
}
export function SocioMarkerHas(marker, { parsed = null, str = '' }) {
return marker ? (parsed ? parsed.includes(marker) : (str ? SocioStringParse(str).markers.includes(marker) : false)) : false;
}
export function initLifecycleHooks() {
return {};
}
export function sleep(seconds = 2) {
return new Promise(res => setTimeout(res, seconds * 1000));
}
export function clamp(x, min, max) {
return Math.min(Math.max(x, min), max);
}
export function GetAllMethodNamesOf(obj) {
const methods = new Set();
while (obj = Reflect.getPrototypeOf(obj)) {
Reflect.ownKeys(obj)
.map(k => k.toString())
.filter(k => k != 'constructor'
&& !k.startsWith('__')).forEach((k) => methods.add(k));
}
return [...methods];
}
export const perMessageDeflate = {
zlibDeflateOptions: {
chunkSize: 1024,
memLevel: 7,
level: 3
},
zlibInflateOptions: {
chunkSize: 10 * 1024
},
clientNoContextTakeover: true,
serverNoContextTakeover: true,
serverMaxWindowBits: 10,
concurrencyLimit: 10,
threshold: 1024
};
import { encode, decode } from "@msgpack/msgpack";
export function socio_encode(o) { return encode(o); }
export function socio_decode(buffer) { return decode(buffer); }
export function FastHash(str) {
let hash = 0;
for (let i = 0; i < str.length; i++) {
hash = ((hash << 5) - hash) + str.charCodeAt(i);
hash = hash & hash;
}
return hash;
}