Initial working version
This commit is contained in:
+90
@@ -0,0 +1,90 @@
|
||||
## [2.3.2](https://github.com/socketio/socket.io-adapter/compare/2.3.1...2.3.2) (2021-08-28)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* fix race condition when leaving rooms ([#74](https://github.com/socketio/socket.io-adapter/issues/74)) ([912e13a](https://github.com/socketio/socket.io-adapter/commit/912e13ad30bd584e2ece747be96a1ba0669dd874))
|
||||
|
||||
|
||||
## [2.3.1](https://github.com/socketio/socket.io-adapter/compare/2.3.0...2.3.1) (2021-05-19)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* restore compatibility with binary parsers ([a33e42b](https://github.com/socketio/socket.io-adapter/commit/a33e42bb7b935ccdd3688b4c305714b791ade0db))
|
||||
|
||||
|
||||
# [2.3.0](https://github.com/socketio/socket.io-adapter/compare/2.2.0...2.3.0) (2021-05-10)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add a serverSideEmit empty function ([c4cbd4b](https://github.com/socketio/socket.io-adapter/commit/c4cbd4ba2d8997f9ab8e06cfb631c8f9a43d16f1))
|
||||
* add support for the "wsPreEncoded" writing option ([5579d40](https://github.com/socketio/socket.io-adapter/commit/5579d40c24d15f69e44246f788fb93beb367f994))
|
||||
|
||||
|
||||
# [2.2.0](https://github.com/socketio/socket.io-adapter/compare/2.1.0...2.2.0) (2021-02-27)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add some utility methods ([1c9827e](https://github.com/socketio/socket.io-adapter/commit/1c9827ec1136e24094295907efaf4d4e6c2fef2f))
|
||||
* allow excluding all sockets in a room ([#66](https://github.com/socketio/socket.io-adapter/issues/66)) ([985bb41](https://github.com/socketio/socket.io-adapter/commit/985bb41fa2c04f17f1cf3a17c14ab9acde8947f7))
|
||||
|
||||
|
||||
# [2.1.0](https://github.com/socketio/socket.io-adapter/compare/2.0.3...2.1.0) (2021-01-15)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add room events ([155fa63](https://github.com/socketio/socket.io-adapter/commit/155fa6333a504036e99a33667dc0397f6aede25e))
|
||||
* make rooms and sids public ([313c5a9](https://github.com/socketio/socket.io-adapter/commit/313c5a9fb60d913cd3a866001d67516399d8ee2f))
|
||||
|
||||
|
||||
## [2.0.3](https://github.com/socketio/socket.io-adapter/compare/1.1.2...2.0.3) (2020-11-05)
|
||||
|
||||
### Features
|
||||
|
||||
* add init() and close() methods ([2e023bf](https://github.com/socketio/socket.io-adapter/commit/2e023bf2b651e543a34147fab19497fbdb8bdb72))
|
||||
* use ES6 Sets and Maps ([53ed3f4](https://github.com/socketio/socket.io-adapter/commit/53ed3f4099c073546c66d911a95171adcefc524c))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Encoder#encode() is now synchronous ([c043650](https://github.com/socketio/socket.io-adapter/commit/c043650f1c6e58b20364383103314ddc733e4615))
|
||||
|
||||
|
||||
|
||||
## [2.0.3-rc2](https://github.com/socketio/socket.io-adapter/compare/2.0.3-rc1...2.0.3-rc2) (2020-10-20)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add init() and close() methods ([2e023bf](https://github.com/socketio/socket.io-adapter/commit/2e023bf2b651e543a34147fab19497fbdb8bdb72))
|
||||
|
||||
|
||||
|
||||
## [2.0.3-rc1](https://github.com/socketio/socket.io-adapter/compare/2.0.2...2.0.3-rc1) (2020-10-15)
|
||||
|
||||
|
||||
|
||||
## [2.0.2](https://github.com/socketio/socket.io-adapter/compare/2.0.1...2.0.2) (2020-09-28)
|
||||
|
||||
The dist/ directory was not up-to-date when publishing the previous version...
|
||||
|
||||
|
||||
|
||||
## [2.0.1](https://github.com/socketio/socket.io-adapter/compare/2.0.0...2.0.1) (2020-09-28)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Encoder#encode() is now synchronous ([c043650](https://github.com/socketio/socket.io-adapter/commit/c043650f1c6e58b20364383103314ddc733e4615))
|
||||
|
||||
|
||||
|
||||
# [2.0.0](https://github.com/socketio/socket.io-adapter/compare/1.1.2...2.0.0) (2020-09-25)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* use ES6 Sets and Maps ([53ed3f4](https://github.com/socketio/socket.io-adapter/commit/53ed3f4099c073546c66d911a95171adcefc524c))
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2014 Guillermo Rauch <guillermo@learnboost.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the 'Software'), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
|
||||
# socket.io-adapter
|
||||
|
||||
Default socket.io in-memory adapter class.
|
||||
|
||||
Compatibility table:
|
||||
|
||||
| Adapter version | Socket.IO server version |
|
||||
|-----------------| ------------------------ |
|
||||
| 1.x.x | 1.x.x / 2.x.x |
|
||||
| 2.x.x | 3.x.x |
|
||||
|
||||
## How to use
|
||||
|
||||
This module is not intended for end-user usage, but can be used as an
|
||||
interface to inherit from other adapters you might want to build.
|
||||
|
||||
As an example of an adapter that builds on top of this, please take a look
|
||||
at [socket.io-redis](https://github.com/learnboost/socket.io-redis).
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
+117
@@ -0,0 +1,117 @@
|
||||
/// <reference types="node" />
|
||||
import { EventEmitter } from "events";
|
||||
export declare type SocketId = string;
|
||||
export declare type Room = string;
|
||||
export interface BroadcastFlags {
|
||||
volatile?: boolean;
|
||||
compress?: boolean;
|
||||
local?: boolean;
|
||||
broadcast?: boolean;
|
||||
binary?: boolean;
|
||||
}
|
||||
export interface BroadcastOptions {
|
||||
rooms: Set<Room>;
|
||||
except?: Set<SocketId>;
|
||||
flags?: BroadcastFlags;
|
||||
}
|
||||
export declare class Adapter extends EventEmitter {
|
||||
readonly nsp: any;
|
||||
rooms: Map<Room, Set<SocketId>>;
|
||||
sids: Map<SocketId, Set<Room>>;
|
||||
private readonly encoder;
|
||||
/**
|
||||
* In-memory adapter constructor.
|
||||
*
|
||||
* @param {Namespace} nsp
|
||||
*/
|
||||
constructor(nsp: any);
|
||||
/**
|
||||
* To be overridden
|
||||
*/
|
||||
init(): Promise<void> | void;
|
||||
/**
|
||||
* To be overridden
|
||||
*/
|
||||
close(): Promise<void> | void;
|
||||
/**
|
||||
* Adds a socket to a list of room.
|
||||
*
|
||||
* @param {SocketId} id the socket id
|
||||
* @param {Set<Room>} rooms a set of rooms
|
||||
* @public
|
||||
*/
|
||||
addAll(id: SocketId, rooms: Set<Room>): Promise<void> | void;
|
||||
/**
|
||||
* Removes a socket from a room.
|
||||
*
|
||||
* @param {SocketId} id the socket id
|
||||
* @param {Room} room the room name
|
||||
*/
|
||||
del(id: SocketId, room: Room): Promise<void> | void;
|
||||
private _del;
|
||||
/**
|
||||
* Removes a socket from all rooms it's joined.
|
||||
*
|
||||
* @param {SocketId} id the socket id
|
||||
*/
|
||||
delAll(id: SocketId): void;
|
||||
/**
|
||||
* Broadcasts a packet.
|
||||
*
|
||||
* Options:
|
||||
* - `flags` {Object} flags for this packet
|
||||
* - `except` {Array} sids that should be excluded
|
||||
* - `rooms` {Array} list of rooms to broadcast to
|
||||
*
|
||||
* @param {Object} packet the packet object
|
||||
* @param {Object} opts the options
|
||||
* @public
|
||||
*/
|
||||
broadcast(packet: any, opts: BroadcastOptions): void;
|
||||
/**
|
||||
* Gets a list of sockets by sid.
|
||||
*
|
||||
* @param {Set<Room>} rooms the explicit set of rooms to check.
|
||||
*/
|
||||
sockets(rooms: Set<Room>): Promise<Set<SocketId>>;
|
||||
/**
|
||||
* Gets the list of rooms a given socket has joined.
|
||||
*
|
||||
* @param {SocketId} id the socket id
|
||||
*/
|
||||
socketRooms(id: SocketId): Set<Room> | undefined;
|
||||
/**
|
||||
* Returns the matching socket instances
|
||||
*
|
||||
* @param opts - the filters to apply
|
||||
*/
|
||||
fetchSockets(opts: BroadcastOptions): Promise<any[]>;
|
||||
/**
|
||||
* Makes the matching socket instances join the specified rooms
|
||||
*
|
||||
* @param opts - the filters to apply
|
||||
* @param rooms - the rooms to join
|
||||
*/
|
||||
addSockets(opts: BroadcastOptions, rooms: Room[]): void;
|
||||
/**
|
||||
* Makes the matching socket instances leave the specified rooms
|
||||
*
|
||||
* @param opts - the filters to apply
|
||||
* @param rooms - the rooms to leave
|
||||
*/
|
||||
delSockets(opts: BroadcastOptions, rooms: Room[]): void;
|
||||
/**
|
||||
* Makes the matching socket instances disconnect
|
||||
*
|
||||
* @param opts - the filters to apply
|
||||
* @param close - whether to close the underlying connection
|
||||
*/
|
||||
disconnectSockets(opts: BroadcastOptions, close: boolean): void;
|
||||
private apply;
|
||||
private computeExceptSids;
|
||||
/**
|
||||
* Send a packet to the other Socket.IO servers in the cluster
|
||||
* @param packet - an array of arguments, which may include an acknowledgement callback at the end
|
||||
*/
|
||||
serverSideEmit(packet: any[]): void;
|
||||
}
|
||||
+236
@@ -0,0 +1,236 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.Adapter = void 0;
|
||||
const events_1 = require("events");
|
||||
class Adapter extends events_1.EventEmitter {
|
||||
/**
|
||||
* In-memory adapter constructor.
|
||||
*
|
||||
* @param {Namespace} nsp
|
||||
*/
|
||||
constructor(nsp) {
|
||||
super();
|
||||
this.nsp = nsp;
|
||||
this.rooms = new Map();
|
||||
this.sids = new Map();
|
||||
this.encoder = nsp.server.encoder;
|
||||
}
|
||||
/**
|
||||
* To be overridden
|
||||
*/
|
||||
init() { }
|
||||
/**
|
||||
* To be overridden
|
||||
*/
|
||||
close() { }
|
||||
/**
|
||||
* Adds a socket to a list of room.
|
||||
*
|
||||
* @param {SocketId} id the socket id
|
||||
* @param {Set<Room>} rooms a set of rooms
|
||||
* @public
|
||||
*/
|
||||
addAll(id, rooms) {
|
||||
if (!this.sids.has(id)) {
|
||||
this.sids.set(id, new Set());
|
||||
}
|
||||
for (const room of rooms) {
|
||||
this.sids.get(id).add(room);
|
||||
if (!this.rooms.has(room)) {
|
||||
this.rooms.set(room, new Set());
|
||||
this.emit("create-room", room);
|
||||
}
|
||||
if (!this.rooms.get(room).has(id)) {
|
||||
this.rooms.get(room).add(id);
|
||||
this.emit("join-room", room, id);
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Removes a socket from a room.
|
||||
*
|
||||
* @param {SocketId} id the socket id
|
||||
* @param {Room} room the room name
|
||||
*/
|
||||
del(id, room) {
|
||||
if (this.sids.has(id)) {
|
||||
this.sids.get(id).delete(room);
|
||||
}
|
||||
this._del(room, id);
|
||||
}
|
||||
_del(room, id) {
|
||||
const _room = this.rooms.get(room);
|
||||
if (_room != null) {
|
||||
const deleted = _room.delete(id);
|
||||
if (deleted) {
|
||||
this.emit("leave-room", room, id);
|
||||
}
|
||||
if (_room.size === 0 && this.rooms.delete(room)) {
|
||||
this.emit("delete-room", room);
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Removes a socket from all rooms it's joined.
|
||||
*
|
||||
* @param {SocketId} id the socket id
|
||||
*/
|
||||
delAll(id) {
|
||||
if (!this.sids.has(id)) {
|
||||
return;
|
||||
}
|
||||
for (const room of this.sids.get(id)) {
|
||||
this._del(room, id);
|
||||
}
|
||||
this.sids.delete(id);
|
||||
}
|
||||
/**
|
||||
* Broadcasts a packet.
|
||||
*
|
||||
* Options:
|
||||
* - `flags` {Object} flags for this packet
|
||||
* - `except` {Array} sids that should be excluded
|
||||
* - `rooms` {Array} list of rooms to broadcast to
|
||||
*
|
||||
* @param {Object} packet the packet object
|
||||
* @param {Object} opts the options
|
||||
* @public
|
||||
*/
|
||||
broadcast(packet, opts) {
|
||||
const flags = opts.flags || {};
|
||||
const basePacketOpts = {
|
||||
preEncoded: true,
|
||||
volatile: flags.volatile,
|
||||
compress: flags.compress
|
||||
};
|
||||
packet.nsp = this.nsp.name;
|
||||
const encodedPackets = this.encoder.encode(packet);
|
||||
const packetOpts = encodedPackets.map(encodedPacket => {
|
||||
if (typeof encodedPacket === "string") {
|
||||
return Object.assign(Object.assign({}, basePacketOpts), { wsPreEncoded: "4" + encodedPacket // "4" being the "message" packet type in Engine.IO
|
||||
});
|
||||
}
|
||||
else {
|
||||
return basePacketOpts;
|
||||
}
|
||||
});
|
||||
this.apply(opts, socket => {
|
||||
for (let i = 0; i < encodedPackets.length; i++) {
|
||||
socket.client.writeToEngine(encodedPackets[i], packetOpts[i]);
|
||||
}
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Gets a list of sockets by sid.
|
||||
*
|
||||
* @param {Set<Room>} rooms the explicit set of rooms to check.
|
||||
*/
|
||||
sockets(rooms) {
|
||||
const sids = new Set();
|
||||
this.apply({ rooms }, socket => {
|
||||
sids.add(socket.id);
|
||||
});
|
||||
return Promise.resolve(sids);
|
||||
}
|
||||
/**
|
||||
* Gets the list of rooms a given socket has joined.
|
||||
*
|
||||
* @param {SocketId} id the socket id
|
||||
*/
|
||||
socketRooms(id) {
|
||||
return this.sids.get(id);
|
||||
}
|
||||
/**
|
||||
* Returns the matching socket instances
|
||||
*
|
||||
* @param opts - the filters to apply
|
||||
*/
|
||||
fetchSockets(opts) {
|
||||
const sockets = [];
|
||||
this.apply(opts, socket => {
|
||||
sockets.push(socket);
|
||||
});
|
||||
return Promise.resolve(sockets);
|
||||
}
|
||||
/**
|
||||
* Makes the matching socket instances join the specified rooms
|
||||
*
|
||||
* @param opts - the filters to apply
|
||||
* @param rooms - the rooms to join
|
||||
*/
|
||||
addSockets(opts, rooms) {
|
||||
this.apply(opts, socket => {
|
||||
socket.join(rooms);
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Makes the matching socket instances leave the specified rooms
|
||||
*
|
||||
* @param opts - the filters to apply
|
||||
* @param rooms - the rooms to leave
|
||||
*/
|
||||
delSockets(opts, rooms) {
|
||||
this.apply(opts, socket => {
|
||||
rooms.forEach(room => socket.leave(room));
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Makes the matching socket instances disconnect
|
||||
*
|
||||
* @param opts - the filters to apply
|
||||
* @param close - whether to close the underlying connection
|
||||
*/
|
||||
disconnectSockets(opts, close) {
|
||||
this.apply(opts, socket => {
|
||||
socket.disconnect(close);
|
||||
});
|
||||
}
|
||||
apply(opts, callback) {
|
||||
const rooms = opts.rooms;
|
||||
const except = this.computeExceptSids(opts.except);
|
||||
if (rooms.size) {
|
||||
const ids = new Set();
|
||||
for (const room of rooms) {
|
||||
if (!this.rooms.has(room))
|
||||
continue;
|
||||
for (const id of this.rooms.get(room)) {
|
||||
if (ids.has(id) || except.has(id))
|
||||
continue;
|
||||
const socket = this.nsp.sockets.get(id);
|
||||
if (socket) {
|
||||
callback(socket);
|
||||
ids.add(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (const [id] of this.sids) {
|
||||
if (except.has(id))
|
||||
continue;
|
||||
const socket = this.nsp.sockets.get(id);
|
||||
if (socket)
|
||||
callback(socket);
|
||||
}
|
||||
}
|
||||
}
|
||||
computeExceptSids(exceptRooms) {
|
||||
const exceptSids = new Set();
|
||||
if (exceptRooms && exceptRooms.size > 0) {
|
||||
for (const room of exceptRooms) {
|
||||
if (this.rooms.has(room)) {
|
||||
this.rooms.get(room).forEach(sid => exceptSids.add(sid));
|
||||
}
|
||||
}
|
||||
}
|
||||
return exceptSids;
|
||||
}
|
||||
/**
|
||||
* Send a packet to the other Socket.IO servers in the cluster
|
||||
* @param packet - an array of arguments, which may include an acknowledgement callback at the end
|
||||
*/
|
||||
serverSideEmit(packet) {
|
||||
throw new Error("this adapter does not support the serverSideEmit() functionality");
|
||||
}
|
||||
}
|
||||
exports.Adapter = Adapter;
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"_from": "socket.io-adapter@~2.3.2",
|
||||
"_id": "socket.io-adapter@2.3.2",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-PBZpxUPYjmoogY0aoaTmo1643JelsaS1CiAwNjRVdrI0X9Seuc19Y2Wife8k88avW6haG8cznvwbubAZwH4Mtg==",
|
||||
"_location": "/socket.io-adapter",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "socket.io-adapter@~2.3.2",
|
||||
"name": "socket.io-adapter",
|
||||
"escapedName": "socket.io-adapter",
|
||||
"rawSpec": "~2.3.2",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "~2.3.2"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/socket.io"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.2.tgz",
|
||||
"_shasum": "039cd7c71a52abad984a6d57da2c0b7ecdd3c289",
|
||||
"_spec": "socket.io-adapter@~2.3.2",
|
||||
"_where": "C:\\Users\\Maspenguin\\Documents\\Programming\\mas-site\\node_modules\\socket.io",
|
||||
"bugs": {
|
||||
"url": "https://github.com/socketio/socket.io-adapter/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"deprecated": false,
|
||||
"description": "default socket.io in-memory adapter",
|
||||
"devDependencies": {
|
||||
"@types/node": "^14.11.2",
|
||||
"expect.js": "^0.3.1",
|
||||
"mocha": "^8.1.3",
|
||||
"nyc": "^15.1.0",
|
||||
"prettier": "^1.19.1",
|
||||
"typescript": "^4.0.3"
|
||||
},
|
||||
"files": [
|
||||
"dist/"
|
||||
],
|
||||
"homepage": "https://github.com/socketio/socket.io-adapter#readme",
|
||||
"license": "MIT",
|
||||
"main": "./dist/index.js",
|
||||
"name": "socket.io-adapter",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/socketio/socket.io-adapter.git"
|
||||
},
|
||||
"scripts": {
|
||||
"format:check": "prettier --parser typescript --check 'lib/**/*.ts' 'test/**/*.js'",
|
||||
"format:fix": "prettier --parser typescript --write 'lib/**/*.ts' 'test/**/*.js'",
|
||||
"prepack": "tsc",
|
||||
"test": "npm run format:check && tsc && nyc mocha test/index.js"
|
||||
},
|
||||
"types": "./dist/index.d.ts",
|
||||
"version": "2.3.2"
|
||||
}
|
||||
Reference in New Issue
Block a user