@epicgames-ps/lib-pixelstreamingsignalling-ue5.8 0.1.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/.lintstagedrc.mjs +7 -0
- package/.prettierignore +0 -0
- package/CHANGELOG.md +21 -0
- package/README.md +32 -0
- package/dist/cjs/Logger.js +148 -0
- package/dist/cjs/Logger.js.map +1 -0
- package/dist/cjs/LoggingUtils.js +64 -0
- package/dist/cjs/LoggingUtils.js.map +1 -0
- package/dist/cjs/PlayerConnection.js +220 -0
- package/dist/cjs/PlayerConnection.js.map +1 -0
- package/dist/cjs/PlayerRegistry.js +77 -0
- package/dist/cjs/PlayerRegistry.js.map +1 -0
- package/dist/cjs/SFUConnection.js +264 -0
- package/dist/cjs/SFUConnection.js.map +1 -0
- package/dist/cjs/SignallingServer.js +149 -0
- package/dist/cjs/SignallingServer.js.map +1 -0
- package/dist/cjs/StreamerConnection.js +172 -0
- package/dist/cjs/StreamerConnection.js.map +1 -0
- package/dist/cjs/StreamerRegistry.js +149 -0
- package/dist/cjs/StreamerRegistry.js.map +1 -0
- package/dist/cjs/Utils.js +19 -0
- package/dist/cjs/Utils.js.map +1 -0
- package/dist/cjs/WebServer.js +124 -0
- package/dist/cjs/WebServer.js.map +1 -0
- package/dist/cjs/pixelstreamingsignalling.js +28 -0
- package/dist/cjs/pixelstreamingsignalling.js.map +1 -0
- package/dist/esm/Logger.js +141 -0
- package/dist/esm/Logger.js.map +1 -0
- package/dist/esm/LoggingUtils.js +58 -0
- package/dist/esm/LoggingUtils.js.map +1 -0
- package/dist/esm/PlayerConnection.js +183 -0
- package/dist/esm/PlayerConnection.js.map +1 -0
- package/dist/esm/PlayerRegistry.js +73 -0
- package/dist/esm/PlayerRegistry.js.map +1 -0
- package/dist/esm/SFUConnection.js +227 -0
- package/dist/esm/SFUConnection.js.map +1 -0
- package/dist/esm/SignallingServer.js +112 -0
- package/dist/esm/SignallingServer.js.map +1 -0
- package/dist/esm/StreamerConnection.js +135 -0
- package/dist/esm/StreamerConnection.js.map +1 -0
- package/dist/esm/StreamerRegistry.js +145 -0
- package/dist/esm/StreamerRegistry.js.map +1 -0
- package/dist/esm/Utils.js +15 -0
- package/dist/esm/Utils.js.map +1 -0
- package/dist/esm/WebServer.js +117 -0
- package/dist/esm/WebServer.js.map +1 -0
- package/dist/esm/pixelstreamingsignalling.js +12 -0
- package/dist/esm/pixelstreamingsignalling.js.map +1 -0
- package/dist/types/Logger.d.ts +20 -0
- package/dist/types/LoggingUtils.d.ts +44 -0
- package/dist/types/PlayerConnection.d.ts +66 -0
- package/dist/types/PlayerRegistry.d.ts +66 -0
- package/dist/types/SFUConnection.d.ts +85 -0
- package/dist/types/SignallingServer.d.ts +48 -0
- package/dist/types/StreamerConnection.d.ts +61 -0
- package/dist/types/StreamerRegistry.d.ts +96 -0
- package/dist/types/Utils.d.ts +8 -0
- package/dist/types/WebServer.d.ts +42 -0
- package/dist/types/pixelstreamingsignalling.d.ts +9 -0
- package/docs/Logger/README.md +19 -0
- package/docs/Logger/functions/InitLogging.md +26 -0
- package/docs/Logger/interfaces/IConfig.md +41 -0
- package/docs/Logger/variables/Logger.md +15 -0
- package/docs/LoggingUtils/README.md +19 -0
- package/docs/LoggingUtils/functions/createHandlerListener.md +42 -0
- package/docs/LoggingUtils/functions/logForward.md +36 -0
- package/docs/LoggingUtils/functions/logIncoming.md +30 -0
- package/docs/LoggingUtils/functions/logOutgoing.md +30 -0
- package/docs/LoggingUtils/interfaces/IMessageLogger.md +29 -0
- package/docs/LoggingUtils/interfaces/IProtoLogObj.md +57 -0
- package/docs/PlayerConnection/README.md +11 -0
- package/docs/PlayerConnection/classes/PlayerConnection.md +177 -0
- package/docs/PlayerRegistry/README.md +16 -0
- package/docs/PlayerRegistry/classes/PlayerRegistry.md +423 -0
- package/docs/PlayerRegistry/interfaces/IPlayer.md +86 -0
- package/docs/PlayerRegistry/interfaces/IPlayerInfo.md +43 -0
- package/docs/README.md +19 -0
- package/docs/SFUConnection/README.md +11 -0
- package/docs/SFUConnection/classes/SFUConnection.md +554 -0
- package/docs/SignallingServer/README.md +19 -0
- package/docs/SignallingServer/classes/SignallingServer.md +76 -0
- package/docs/SignallingServer/interfaces/IServerConfig.md +92 -0
- package/docs/SignallingServer/type-aliases/ProtocolConfig.md +15 -0
- package/docs/StreamerConnection/README.md +11 -0
- package/docs/StreamerConnection/classes/StreamerConnection.md +507 -0
- package/docs/StreamerRegistry/README.md +16 -0
- package/docs/StreamerRegistry/classes/StreamerRegistry.md +431 -0
- package/docs/StreamerRegistry/interfaces/IStreamer.md +375 -0
- package/docs/StreamerRegistry/interfaces/IStreamerInfo.md +51 -0
- package/docs/Utils/README.md +12 -0
- package/docs/Utils/functions/beautify.md +23 -0
- package/docs/Utils/functions/stringify.md +23 -0
- package/docs/WebServer/README.md +15 -0
- package/docs/WebServer/classes/WebServer.md +50 -0
- package/docs/WebServer/interfaces/IWebServerConfig.md +76 -0
- package/docs/pixelstreamingsignalling/README.md +145 -0
- package/eslint.config.mjs +39 -0
- package/package.json +58 -0
- package/src/Logger.ts +189 -0
- package/src/LoggingUtils.ts +80 -0
- package/src/PlayerConnection.ts +257 -0
- package/src/PlayerRegistry.ts +116 -0
- package/src/SFUConnection.ts +329 -0
- package/src/SignallingServer.ts +214 -0
- package/src/StreamerConnection.ts +194 -0
- package/src/StreamerRegistry.ts +252 -0
- package/src/Utils.ts +16 -0
- package/src/WebServer.ts +213 -0
- package/src/pixelstreamingsignalling.ts +11 -0
- package/tsconfig.cjs.json +8 -0
- package/tsconfig.esm.json +8 -0
- package/tsconfig.json +29 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { IncomingMessage } from 'http';
|
|
2
|
+
import { SignallingProtocol, BaseMessage, EventEmitter } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.8';
|
|
3
|
+
import { IMessageLogger } from './LoggingUtils';
|
|
4
|
+
import { IStreamer } from './StreamerRegistry';
|
|
5
|
+
/**
|
|
6
|
+
* An interface that describes a player that can be added to the
|
|
7
|
+
* player registry.
|
|
8
|
+
*/
|
|
9
|
+
export interface IPlayer extends IMessageLogger {
|
|
10
|
+
playerId: string;
|
|
11
|
+
protocol: SignallingProtocol;
|
|
12
|
+
subscribedStreamer: IStreamer | null;
|
|
13
|
+
request?: IncomingMessage;
|
|
14
|
+
sendMessage(message: BaseMessage): void;
|
|
15
|
+
getPlayerInfo(): IPlayerInfo;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Used by the API to describe the current state of the player.
|
|
19
|
+
*/
|
|
20
|
+
export interface IPlayerInfo {
|
|
21
|
+
playerId: string;
|
|
22
|
+
type: string;
|
|
23
|
+
subscribedTo: string | undefined;
|
|
24
|
+
remoteAddress: string | undefined;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Handles all the player connections of a signalling server and
|
|
28
|
+
* can be used to lookup connections by id etc.
|
|
29
|
+
* Fires events when players are added or removed.
|
|
30
|
+
* Events:
|
|
31
|
+
* 'added': (playerId: string) Player was added.
|
|
32
|
+
* 'removed': (playerId: string) Player was removed.
|
|
33
|
+
*/
|
|
34
|
+
export declare class PlayerRegistry extends EventEmitter {
|
|
35
|
+
private players;
|
|
36
|
+
private nextPlayerId;
|
|
37
|
+
constructor();
|
|
38
|
+
/**
|
|
39
|
+
* Assigns a unique id to the player and adds it to the registry
|
|
40
|
+
*/
|
|
41
|
+
add(player: IPlayer): void;
|
|
42
|
+
/**
|
|
43
|
+
* Removes a player from the registry. Does nothing if the id
|
|
44
|
+
* does not exist.
|
|
45
|
+
*/
|
|
46
|
+
remove(player: IPlayer): void;
|
|
47
|
+
/**
|
|
48
|
+
* Tests if a player id exists in the registry.
|
|
49
|
+
*/
|
|
50
|
+
has(playerId: string): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Gets a player from the registry using the player id.
|
|
53
|
+
* Returns undefined if the player doesn't exist.
|
|
54
|
+
*/
|
|
55
|
+
get(playerId: string): IPlayer | undefined;
|
|
56
|
+
listPlayers(): IPlayer[];
|
|
57
|
+
/**
|
|
58
|
+
* Returns true when the registry is empty.
|
|
59
|
+
*/
|
|
60
|
+
empty(): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Gets the total number of connected players.
|
|
63
|
+
*/
|
|
64
|
+
count(): number;
|
|
65
|
+
private getUniquePlayerId;
|
|
66
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { IncomingMessage } from 'http';
|
|
2
|
+
import WebSocket from 'ws';
|
|
3
|
+
import { ITransport, SignallingProtocol, BaseMessage, EventEmitter } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.8';
|
|
4
|
+
import { IPlayer, IPlayerInfo } from './PlayerRegistry';
|
|
5
|
+
import { IStreamer, IStreamerInfo } from './StreamerRegistry';
|
|
6
|
+
import * as LogUtils from './LoggingUtils';
|
|
7
|
+
import { SignallingServer } from './SignallingServer';
|
|
8
|
+
/**
|
|
9
|
+
* A SFU connection to the signalling server.
|
|
10
|
+
* An SFU can act as both a streamer and a player. It can subscribe to
|
|
11
|
+
* streamers like a player, and other players can subscribe to the sfu.
|
|
12
|
+
* Therefore the SFU will have a streamer id and a player id and be
|
|
13
|
+
* registered in both streamer registries and player registries.
|
|
14
|
+
*
|
|
15
|
+
* Interesting internals:
|
|
16
|
+
* playerId: The player id of this connectiom.
|
|
17
|
+
* streamerId: The streamer id of this connection.
|
|
18
|
+
* transport: The ITransport where transport events can be subscribed to
|
|
19
|
+
* protocol: The SignallingProtocol where signalling messages can be
|
|
20
|
+
* subscribed to.
|
|
21
|
+
* streaming: True when the streamer is ready to accept subscriptions.
|
|
22
|
+
*/
|
|
23
|
+
export declare class SFUConnection extends EventEmitter implements IPlayer, IStreamer, LogUtils.IMessageLogger {
|
|
24
|
+
playerId: string;
|
|
25
|
+
streamerId: string;
|
|
26
|
+
transport: ITransport;
|
|
27
|
+
protocol: SignallingProtocol;
|
|
28
|
+
streaming: boolean;
|
|
29
|
+
subscribedStreamer: IStreamer | null;
|
|
30
|
+
remoteAddress?: string;
|
|
31
|
+
request?: IncomingMessage;
|
|
32
|
+
maxSubscribers: number;
|
|
33
|
+
subscribers: Set<string>;
|
|
34
|
+
private server;
|
|
35
|
+
private layerPreferenceListener;
|
|
36
|
+
private streamerIdChangeListener;
|
|
37
|
+
private streamerDisconnectedListener;
|
|
38
|
+
/**
|
|
39
|
+
* Construct a new SFU connection.
|
|
40
|
+
* @param server - The signalling server object that spawned this sfu.
|
|
41
|
+
* @param ws - The websocket coupled to this sfu connection.
|
|
42
|
+
* @param remoteAddress - The remote address of this connection. Only used as display.
|
|
43
|
+
* @param request - The HTTP upgrade request that opened this connection, if available.
|
|
44
|
+
*/
|
|
45
|
+
constructor(server: SignallingServer, ws: WebSocket, remoteAddress?: string, request?: IncomingMessage);
|
|
46
|
+
/**
|
|
47
|
+
* Returns an identifier that is displayed in logs.
|
|
48
|
+
* @returns A string describing this connection.
|
|
49
|
+
*/
|
|
50
|
+
getReadableIdentifier(): string;
|
|
51
|
+
/**
|
|
52
|
+
* Sends a signalling message to the SFU.
|
|
53
|
+
* @param message - The message to send.
|
|
54
|
+
*/
|
|
55
|
+
sendMessage(message: BaseMessage): void;
|
|
56
|
+
/**
|
|
57
|
+
* Returns a descriptive object for the REST API inspection operations.
|
|
58
|
+
* @returns An IStreamerInfo object containing viewable information about this connection.
|
|
59
|
+
*/
|
|
60
|
+
getStreamerInfo(): IStreamerInfo;
|
|
61
|
+
/**
|
|
62
|
+
* Returns a descriptive object for the REST API inspection operations.
|
|
63
|
+
* @returns An IPlayerInfo object containing viewable information about this connection.
|
|
64
|
+
*/
|
|
65
|
+
getPlayerInfo(): IPlayerInfo;
|
|
66
|
+
private registerMessageHandlers;
|
|
67
|
+
private subscribe;
|
|
68
|
+
private unsubscribe;
|
|
69
|
+
private sendToStreamer;
|
|
70
|
+
private sendToPlayer;
|
|
71
|
+
private disconnect;
|
|
72
|
+
private onLayerPreference;
|
|
73
|
+
private onStreamerIdChanged;
|
|
74
|
+
private onStreamerDisconnected;
|
|
75
|
+
private onTransportError;
|
|
76
|
+
private onTransportClose;
|
|
77
|
+
private onSubscribeMessage;
|
|
78
|
+
private onUnsubscribeMessage;
|
|
79
|
+
private onListStreamers;
|
|
80
|
+
private onStreamerDataChannels;
|
|
81
|
+
private onEndpointId;
|
|
82
|
+
private onStartStreaming;
|
|
83
|
+
private onStopStreaming;
|
|
84
|
+
private onPingMessage;
|
|
85
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import http from 'http';
|
|
2
|
+
import https from 'https';
|
|
3
|
+
import * as wslib from 'ws';
|
|
4
|
+
import { StreamerRegistry, StreamerIdAuthorizer } from './StreamerRegistry';
|
|
5
|
+
import { PlayerRegistry } from './PlayerRegistry';
|
|
6
|
+
/**
|
|
7
|
+
* An interface describing the possible options to pass when creating
|
|
8
|
+
* a new SignallingServer object.
|
|
9
|
+
*/
|
|
10
|
+
export interface IServerConfig {
|
|
11
|
+
httpServer?: http.Server;
|
|
12
|
+
httpsServer?: https.Server;
|
|
13
|
+
streamerPort: number;
|
|
14
|
+
playerPort?: number;
|
|
15
|
+
sfuPort?: number;
|
|
16
|
+
peerOptions: unknown;
|
|
17
|
+
streamerWsOptions?: wslib.ServerOptions;
|
|
18
|
+
playerWsOptions?: wslib.ServerOptions;
|
|
19
|
+
sfuWsOptions?: wslib.ServerOptions;
|
|
20
|
+
maxSubscribers?: number;
|
|
21
|
+
playerKeepaliveTimeout?: number;
|
|
22
|
+
authorizeStreamerId?: StreamerIdAuthorizer;
|
|
23
|
+
}
|
|
24
|
+
export type ProtocolConfig = {
|
|
25
|
+
[key: string]: any;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* The main signalling server object.
|
|
29
|
+
* Contains a streamer and player registry and handles setting up of websockets
|
|
30
|
+
* to listen for incoming connections.
|
|
31
|
+
*/
|
|
32
|
+
export declare class SignallingServer {
|
|
33
|
+
config: IServerConfig;
|
|
34
|
+
protocolConfig: ProtocolConfig;
|
|
35
|
+
streamerRegistry: StreamerRegistry;
|
|
36
|
+
playerRegistry: PlayerRegistry;
|
|
37
|
+
startTime: Date;
|
|
38
|
+
/**
|
|
39
|
+
* Initializes the server object and sets up listening sockets for streamers
|
|
40
|
+
* players and optionally SFU connections.
|
|
41
|
+
* @param config - A collection of options for this server.
|
|
42
|
+
*/
|
|
43
|
+
constructor(config: IServerConfig);
|
|
44
|
+
private sendConfigMessage;
|
|
45
|
+
private onStreamerConnected;
|
|
46
|
+
private onPlayerConnected;
|
|
47
|
+
private onSFUConnected;
|
|
48
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { IncomingMessage } from 'http';
|
|
2
|
+
import WebSocket from 'ws';
|
|
3
|
+
import { ITransport, SignallingProtocol, BaseMessage, EventEmitter } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.8';
|
|
4
|
+
import { IStreamer, IStreamerInfo } from './StreamerRegistry';
|
|
5
|
+
import * as LogUtils from './LoggingUtils';
|
|
6
|
+
import { SignallingServer } from './SignallingServer';
|
|
7
|
+
/**
|
|
8
|
+
* A connection between the signalling server and a streamer connection.
|
|
9
|
+
* This is where messages expected to be handled by the streamer come in
|
|
10
|
+
* and where messages are sent to the streamer.
|
|
11
|
+
*
|
|
12
|
+
* Interesting internals:
|
|
13
|
+
* streamerId: The unique id string of this streamer.
|
|
14
|
+
* transport: The ITransport where transport events can be subscribed to
|
|
15
|
+
* protocol: The SignallingProtocol where signalling messages can be
|
|
16
|
+
* subscribed to.
|
|
17
|
+
* streaming: True when the streamer is ready to accept subscriptions.
|
|
18
|
+
*/
|
|
19
|
+
export declare class StreamerConnection extends EventEmitter implements IStreamer, LogUtils.IMessageLogger {
|
|
20
|
+
streamerId: string;
|
|
21
|
+
transport: ITransport;
|
|
22
|
+
protocol: SignallingProtocol;
|
|
23
|
+
streaming: boolean;
|
|
24
|
+
remoteAddress?: string;
|
|
25
|
+
request?: IncomingMessage;
|
|
26
|
+
maxSubscribers: number;
|
|
27
|
+
subscribers: Set<string>;
|
|
28
|
+
private server;
|
|
29
|
+
/**
|
|
30
|
+
* Initializes a new connection with given and sane values. Adds listeners for the
|
|
31
|
+
* websocket close and error and will emit a disconnected event when disconneted.
|
|
32
|
+
* @param server - The signalling server object that spawned this streamer.
|
|
33
|
+
* @param ws - The websocket coupled to this streamer connection.
|
|
34
|
+
* @param remoteAddress - The remote address of this connection. Only used as display.
|
|
35
|
+
* @param request - The HTTP upgrade request that opened this connection, if available.
|
|
36
|
+
*/
|
|
37
|
+
constructor(server: SignallingServer, ws: WebSocket, remoteAddress?: string, request?: IncomingMessage);
|
|
38
|
+
/**
|
|
39
|
+
* Returns an identifier that is displayed in logs.
|
|
40
|
+
* @returns A string describing this connection.
|
|
41
|
+
*/
|
|
42
|
+
getReadableIdentifier(): string;
|
|
43
|
+
/**
|
|
44
|
+
* Sends a signalling message to the player.
|
|
45
|
+
* @param message - The message to send.
|
|
46
|
+
*/
|
|
47
|
+
sendMessage(message: BaseMessage): void;
|
|
48
|
+
/**
|
|
49
|
+
* Returns a descriptive object for the REST API inspection operations.
|
|
50
|
+
* @returns An IStreamerInfo object containing viewable information about this connection.
|
|
51
|
+
*/
|
|
52
|
+
getStreamerInfo(): IStreamerInfo;
|
|
53
|
+
private registerMessageHandlers;
|
|
54
|
+
private forwardMessage;
|
|
55
|
+
private onTransportError;
|
|
56
|
+
private onTransportClose;
|
|
57
|
+
private onEndpointId;
|
|
58
|
+
private onDisconnectPlayerRequest;
|
|
59
|
+
private onLayerPreference;
|
|
60
|
+
private onPingMessage;
|
|
61
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { ITransport, SignallingProtocol, BaseMessage, EventEmitter } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.8';
|
|
2
|
+
import type { IncomingMessage } from 'http';
|
|
3
|
+
import { IMessageLogger } from './LoggingUtils';
|
|
4
|
+
import { IPlayerInfo } from './PlayerRegistry';
|
|
5
|
+
/**
|
|
6
|
+
* An interface that describes a streamer that can be added to the
|
|
7
|
+
* streamer registry.
|
|
8
|
+
*/
|
|
9
|
+
export interface IStreamer extends EventEmitter, IMessageLogger {
|
|
10
|
+
streamerId: string;
|
|
11
|
+
transport: ITransport;
|
|
12
|
+
protocol: SignallingProtocol;
|
|
13
|
+
streaming: boolean;
|
|
14
|
+
maxSubscribers: number;
|
|
15
|
+
subscribers: Set<string>;
|
|
16
|
+
request?: IncomingMessage;
|
|
17
|
+
sendMessage(message: BaseMessage): void;
|
|
18
|
+
getStreamerInfo(): IStreamerInfo;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The details of a streamer's request to be known by a given id, passed to a
|
|
22
|
+
* {@link StreamerIdAuthorizer} so a consumer can decide whether to allow it.
|
|
23
|
+
*/
|
|
24
|
+
export interface IStreamerIdAuthRequest {
|
|
25
|
+
streamer: IStreamer;
|
|
26
|
+
requestedId: string;
|
|
27
|
+
sanitizedId: string;
|
|
28
|
+
collided: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* An optional consumer-supplied hook that decides the id a streamer is allowed to register as.
|
|
32
|
+
* Return the id to commit (the sanitized id to accept the default, or any other unique id to
|
|
33
|
+
* override, e.g. to namespace per tenant), or null to reject the streamer and disconnect it.
|
|
34
|
+
* This is the seam for implementing anti-squatting / ownership policy without the project
|
|
35
|
+
* providing an authentication scheme.
|
|
36
|
+
*/
|
|
37
|
+
export type StreamerIdAuthorizer = (request: IStreamerIdAuthRequest) => string | null;
|
|
38
|
+
/**
|
|
39
|
+
* Used by the API to describe a streamer.
|
|
40
|
+
*/
|
|
41
|
+
export interface IStreamerInfo {
|
|
42
|
+
streamerId: string;
|
|
43
|
+
type: string;
|
|
44
|
+
streaming: boolean;
|
|
45
|
+
remoteAddress: string | undefined;
|
|
46
|
+
subscribers: IPlayerInfo[];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Handles all the streamer connections of a signalling server and
|
|
50
|
+
* can be used to lookup connections by id etc.
|
|
51
|
+
* Fires events when streamers are added or removed.
|
|
52
|
+
* Events:
|
|
53
|
+
* 'added': (playerId: string) Player was added.
|
|
54
|
+
* 'removed': (playerId: string) Player was removed.
|
|
55
|
+
*/
|
|
56
|
+
export declare class StreamerRegistry extends EventEmitter {
|
|
57
|
+
streamers: IStreamer[];
|
|
58
|
+
defaultStreamerIdPrefix: string;
|
|
59
|
+
authorizeStreamerId?: StreamerIdAuthorizer;
|
|
60
|
+
constructor(authorizeStreamerId?: StreamerIdAuthorizer);
|
|
61
|
+
/**
|
|
62
|
+
* Adds a streamer to the registry. If the streamer already has an id
|
|
63
|
+
* it will be sanitized (checked against existing ids and altered if
|
|
64
|
+
* there are collisions), or if it has no id it will be assigned a
|
|
65
|
+
* default unique id.
|
|
66
|
+
* @returns True if the add was successful.
|
|
67
|
+
*/
|
|
68
|
+
add(streamer: IStreamer): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Removes a streamer from the registry. If the streamer isn't found
|
|
71
|
+
* it does nothing.
|
|
72
|
+
* @returns True if the streamer was removed.
|
|
73
|
+
*/
|
|
74
|
+
remove(streamer: IStreamer): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Attempts to find the given streamer id in the registry.
|
|
77
|
+
*/
|
|
78
|
+
find(streamerId: string): IStreamer | undefined;
|
|
79
|
+
/**
|
|
80
|
+
* Used by players who haven't subscribed but try to send a message.
|
|
81
|
+
* This is to cover legacy connections that do not know how to subscribe.
|
|
82
|
+
* The player will be assigned the first streamer in the list.
|
|
83
|
+
* @returns The first streamerId in the registry or null if there are none.
|
|
84
|
+
*/
|
|
85
|
+
getFirstStreamerId(): string | null;
|
|
86
|
+
/**
|
|
87
|
+
* Returns true when the registry is empty.
|
|
88
|
+
*/
|
|
89
|
+
empty(): boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Returns the total number of connected streamers.
|
|
92
|
+
*/
|
|
93
|
+
count(): number;
|
|
94
|
+
private onEndpointId;
|
|
95
|
+
private sanitizeStreamerId;
|
|
96
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import http from 'http';
|
|
3
|
+
import https from 'https';
|
|
4
|
+
/**
|
|
5
|
+
* Options for configuring CORS on the Express app. When `enabled` is true the
|
|
6
|
+
* `cors` middleware is registered so that browser-based clients hosted on a
|
|
7
|
+
* different origin (e.g. a custom frontend) can call the REST API or other
|
|
8
|
+
* routes mounted on the app. Use `allowedOrigins` to restrict which origins
|
|
9
|
+
* are accepted; an empty / unset list means "allow all origins" (`*`).
|
|
10
|
+
*/
|
|
11
|
+
export interface ICorsConfig {
|
|
12
|
+
enabled?: boolean;
|
|
13
|
+
allowedOrigins?: string[];
|
|
14
|
+
allowedMethods?: string[];
|
|
15
|
+
allowedHeaders?: string[];
|
|
16
|
+
credentials?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* An interface that describes the possible options to pass to
|
|
20
|
+
* WebServer.
|
|
21
|
+
*/
|
|
22
|
+
export interface IWebServerConfig {
|
|
23
|
+
httpPort: number;
|
|
24
|
+
root: string;
|
|
25
|
+
homepageFile: string;
|
|
26
|
+
perMinuteRateLimit?: number;
|
|
27
|
+
httpsPort?: number;
|
|
28
|
+
ssl_key?: Buffer;
|
|
29
|
+
ssl_cert?: Buffer;
|
|
30
|
+
https_redirect?: boolean;
|
|
31
|
+
serveStatic?: boolean;
|
|
32
|
+
cors?: ICorsConfig;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* An object to manage the initialization of a web server. Used to serve the
|
|
36
|
+
* pixel streaming frontend.
|
|
37
|
+
*/
|
|
38
|
+
export declare class WebServer {
|
|
39
|
+
httpServer: http.Server | undefined;
|
|
40
|
+
httpsServer: https.Server | undefined;
|
|
41
|
+
constructor(app: express.Express, config: IWebServerConfig);
|
|
42
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './Logger';
|
|
2
|
+
export * from './LoggingUtils';
|
|
3
|
+
export * from './PlayerConnection';
|
|
4
|
+
export * from './PlayerRegistry';
|
|
5
|
+
export * from './SFUConnection';
|
|
6
|
+
export * from './SignallingServer';
|
|
7
|
+
export * from './StreamerConnection';
|
|
8
|
+
export * from './StreamerRegistry';
|
|
9
|
+
export * from './WebServer';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
[**@epicgames-ps/lib-pixelstreamingsignalling-ue5.5**](../README.md)
|
|
2
|
+
|
|
3
|
+
***
|
|
4
|
+
|
|
5
|
+
[@epicgames-ps/lib-pixelstreamingsignalling-ue5.5](../README.md) / Logger
|
|
6
|
+
|
|
7
|
+
# Logger
|
|
8
|
+
|
|
9
|
+
## Interfaces
|
|
10
|
+
|
|
11
|
+
- [IConfig](interfaces/IConfig.md)
|
|
12
|
+
|
|
13
|
+
## Variables
|
|
14
|
+
|
|
15
|
+
- [Logger](variables/Logger.md)
|
|
16
|
+
|
|
17
|
+
## Functions
|
|
18
|
+
|
|
19
|
+
- [InitLogging](functions/InitLogging.md)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
[**@epicgames-ps/lib-pixelstreamingsignalling-ue5.5**](../../README.md)
|
|
2
|
+
|
|
3
|
+
***
|
|
4
|
+
|
|
5
|
+
[@epicgames-ps/lib-pixelstreamingsignalling-ue5.5](../../README.md) / [Logger](../README.md) / InitLogging
|
|
6
|
+
|
|
7
|
+
# Function: InitLogging()
|
|
8
|
+
|
|
9
|
+
> **InitLogging**(`config`): `void`
|
|
10
|
+
|
|
11
|
+
Defined in: [Signalling/src/Logger.ts:68](https://github.com/EpicGamesExt/PixelStreamingInfrastructure/blob/4dc9339cfc185a91d37d078aa9dd0951dfbae1a5/Signalling/src/Logger.ts#L68)
|
|
12
|
+
|
|
13
|
+
Call this as early as possible to setup the logging module with your
|
|
14
|
+
preferred settings.
|
|
15
|
+
|
|
16
|
+
## Parameters
|
|
17
|
+
|
|
18
|
+
### config
|
|
19
|
+
|
|
20
|
+
[`IConfig`](../interfaces/IConfig.md)
|
|
21
|
+
|
|
22
|
+
The settings to init the logger with. See IConfig interface
|
|
23
|
+
|
|
24
|
+
## Returns
|
|
25
|
+
|
|
26
|
+
`void`
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
[**@epicgames-ps/lib-pixelstreamingsignalling-ue5.5**](../../README.md)
|
|
2
|
+
|
|
3
|
+
***
|
|
4
|
+
|
|
5
|
+
[@epicgames-ps/lib-pixelstreamingsignalling-ue5.5](../../README.md) / [Logger](../README.md) / IConfig
|
|
6
|
+
|
|
7
|
+
# Interface: IConfig
|
|
8
|
+
|
|
9
|
+
Defined in: [Signalling/src/Logger.ts:20](https://github.com/EpicGamesExt/PixelStreamingInfrastructure/blob/4dc9339cfc185a91d37d078aa9dd0951dfbae1a5/Signalling/src/Logger.ts#L20)
|
|
10
|
+
|
|
11
|
+
## Properties
|
|
12
|
+
|
|
13
|
+
### logDir?
|
|
14
|
+
|
|
15
|
+
> `optional` **logDir**: `string`
|
|
16
|
+
|
|
17
|
+
Defined in: [Signalling/src/Logger.ts:22](https://github.com/EpicGamesExt/PixelStreamingInfrastructure/blob/4dc9339cfc185a91d37d078aa9dd0951dfbae1a5/Signalling/src/Logger.ts#L22)
|
|
18
|
+
|
|
19
|
+
***
|
|
20
|
+
|
|
21
|
+
### logLevelConsole?
|
|
22
|
+
|
|
23
|
+
> `optional` **logLevelConsole**: `string`
|
|
24
|
+
|
|
25
|
+
Defined in: [Signalling/src/Logger.ts:28](https://github.com/EpicGamesExt/PixelStreamingInfrastructure/blob/4dc9339cfc185a91d37d078aa9dd0951dfbae1a5/Signalling/src/Logger.ts#L28)
|
|
26
|
+
|
|
27
|
+
***
|
|
28
|
+
|
|
29
|
+
### logLevelFile?
|
|
30
|
+
|
|
31
|
+
> `optional` **logLevelFile**: `string`
|
|
32
|
+
|
|
33
|
+
Defined in: [Signalling/src/Logger.ts:31](https://github.com/EpicGamesExt/PixelStreamingInfrastructure/blob/4dc9339cfc185a91d37d078aa9dd0951dfbae1a5/Signalling/src/Logger.ts#L31)
|
|
34
|
+
|
|
35
|
+
***
|
|
36
|
+
|
|
37
|
+
### logMessagesToConsole?
|
|
38
|
+
|
|
39
|
+
> `optional` **logMessagesToConsole**: `string`
|
|
40
|
+
|
|
41
|
+
Defined in: [Signalling/src/Logger.ts:25](https://github.com/EpicGamesExt/PixelStreamingInfrastructure/blob/4dc9339cfc185a91d37d078aa9dd0951dfbae1a5/Signalling/src/Logger.ts#L25)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
[**@epicgames-ps/lib-pixelstreamingsignalling-ue5.5**](../../README.md)
|
|
2
|
+
|
|
3
|
+
***
|
|
4
|
+
|
|
5
|
+
[@epicgames-ps/lib-pixelstreamingsignalling-ue5.5](../../README.md) / [Logger](../README.md) / Logger
|
|
6
|
+
|
|
7
|
+
# Variable: Logger
|
|
8
|
+
|
|
9
|
+
> **Logger**: `Logger`
|
|
10
|
+
|
|
11
|
+
Defined in: [Signalling/src/Logger.ts:18](https://github.com/EpicGamesExt/PixelStreamingInfrastructure/blob/4dc9339cfc185a91d37d078aa9dd0951dfbae1a5/Signalling/src/Logger.ts#L18)
|
|
12
|
+
|
|
13
|
+
The actual logger object. This is just a winston logger.
|
|
14
|
+
You can use InitLogging to get a decent result, or you can
|
|
15
|
+
completely create your own winston logger and assign it.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
[**@epicgames-ps/lib-pixelstreamingsignalling-ue5.5**](../README.md)
|
|
2
|
+
|
|
3
|
+
***
|
|
4
|
+
|
|
5
|
+
[@epicgames-ps/lib-pixelstreamingsignalling-ue5.5](../README.md) / LoggingUtils
|
|
6
|
+
|
|
7
|
+
# LoggingUtils
|
|
8
|
+
|
|
9
|
+
## Interfaces
|
|
10
|
+
|
|
11
|
+
- [IMessageLogger](interfaces/IMessageLogger.md)
|
|
12
|
+
- [IProtoLogObj](interfaces/IProtoLogObj.md)
|
|
13
|
+
|
|
14
|
+
## Functions
|
|
15
|
+
|
|
16
|
+
- [createHandlerListener](functions/createHandlerListener.md)
|
|
17
|
+
- [logForward](functions/logForward.md)
|
|
18
|
+
- [logIncoming](functions/logIncoming.md)
|
|
19
|
+
- [logOutgoing](functions/logOutgoing.md)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
[**@epicgames-ps/lib-pixelstreamingsignalling-ue5.5**](../../README.md)
|
|
2
|
+
|
|
3
|
+
***
|
|
4
|
+
|
|
5
|
+
[@epicgames-ps/lib-pixelstreamingsignalling-ue5.5](../../README.md) / [LoggingUtils](../README.md) / createHandlerListener
|
|
6
|
+
|
|
7
|
+
# Function: createHandlerListener()
|
|
8
|
+
|
|
9
|
+
> **createHandlerListener**(`obj`, `handler`): (`message`) => `void`
|
|
10
|
+
|
|
11
|
+
Defined in: [Signalling/src/LoggingUtils.ts:74](https://github.com/EpicGamesExt/PixelStreamingInfrastructure/blob/4dc9339cfc185a91d37d078aa9dd0951dfbae1a5/Signalling/src/LoggingUtils.ts#L74)
|
|
12
|
+
|
|
13
|
+
We don't want to log every incoming and outgoing messages. This is because some messages are simply
|
|
14
|
+
forwarded to other connections. This results in duplicated spam. So we only want to log incoming
|
|
15
|
+
messages that we handle internally, and any messages that we forward we only log once for the recv
|
|
16
|
+
and send events.
|
|
17
|
+
This creation method allows a simple way to enforce this. Any events we handle directly will
|
|
18
|
+
be preceded by the logging call.
|
|
19
|
+
|
|
20
|
+
## Parameters
|
|
21
|
+
|
|
22
|
+
### obj
|
|
23
|
+
|
|
24
|
+
[`IMessageLogger`](../interfaces/IMessageLogger.md)
|
|
25
|
+
|
|
26
|
+
### handler
|
|
27
|
+
|
|
28
|
+
(`message`) => `void`
|
|
29
|
+
|
|
30
|
+
## Returns
|
|
31
|
+
|
|
32
|
+
`Function`
|
|
33
|
+
|
|
34
|
+
### Parameters
|
|
35
|
+
|
|
36
|
+
#### message
|
|
37
|
+
|
|
38
|
+
`BaseMessage`
|
|
39
|
+
|
|
40
|
+
### Returns
|
|
41
|
+
|
|
42
|
+
`void`
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
[**@epicgames-ps/lib-pixelstreamingsignalling-ue5.5**](../../README.md)
|
|
2
|
+
|
|
3
|
+
***
|
|
4
|
+
|
|
5
|
+
[@epicgames-ps/lib-pixelstreamingsignalling-ue5.5](../../README.md) / [LoggingUtils](../README.md) / logForward
|
|
6
|
+
|
|
7
|
+
# Function: logForward()
|
|
8
|
+
|
|
9
|
+
> **logForward**(`recvr`, `target`, `message`): `void`
|
|
10
|
+
|
|
11
|
+
Defined in: [Signalling/src/LoggingUtils.ts:56](https://github.com/EpicGamesExt/PixelStreamingInfrastructure/blob/4dc9339cfc185a91d37d078aa9dd0951dfbae1a5/Signalling/src/LoggingUtils.ts#L56)
|
|
12
|
+
|
|
13
|
+
Call this for messages being forwarded to this connection. That is messages received on
|
|
14
|
+
one connection and being sent to another with only minor changes being made.
|
|
15
|
+
|
|
16
|
+
## Parameters
|
|
17
|
+
|
|
18
|
+
### recvr
|
|
19
|
+
|
|
20
|
+
[`IMessageLogger`](../interfaces/IMessageLogger.md)
|
|
21
|
+
|
|
22
|
+
The connection the message was received on.
|
|
23
|
+
|
|
24
|
+
### target
|
|
25
|
+
|
|
26
|
+
[`IMessageLogger`](../interfaces/IMessageLogger.md)
|
|
27
|
+
|
|
28
|
+
The connection the message is being sent to.
|
|
29
|
+
|
|
30
|
+
### message
|
|
31
|
+
|
|
32
|
+
`BaseMessage`
|
|
33
|
+
|
|
34
|
+
## Returns
|
|
35
|
+
|
|
36
|
+
`void`
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
[**@epicgames-ps/lib-pixelstreamingsignalling-ue5.5**](../../README.md)
|
|
2
|
+
|
|
3
|
+
***
|
|
4
|
+
|
|
5
|
+
[@epicgames-ps/lib-pixelstreamingsignalling-ue5.5](../../README.md) / [LoggingUtils](../README.md) / logIncoming
|
|
6
|
+
|
|
7
|
+
# Function: logIncoming()
|
|
8
|
+
|
|
9
|
+
> **logIncoming**(`recvr`, `message`): `void`
|
|
10
|
+
|
|
11
|
+
Defined in: [Signalling/src/LoggingUtils.ts:26](https://github.com/EpicGamesExt/PixelStreamingInfrastructure/blob/4dc9339cfc185a91d37d078aa9dd0951dfbae1a5/Signalling/src/LoggingUtils.ts#L26)
|
|
12
|
+
|
|
13
|
+
Call to log messages received on a connection that we will handle here at the server.
|
|
14
|
+
Do not call this for messages being forwarded to another connection.
|
|
15
|
+
|
|
16
|
+
## Parameters
|
|
17
|
+
|
|
18
|
+
### recvr
|
|
19
|
+
|
|
20
|
+
[`IMessageLogger`](../interfaces/IMessageLogger.md)
|
|
21
|
+
|
|
22
|
+
IMessageLogger The connection the message was received on.
|
|
23
|
+
|
|
24
|
+
### message
|
|
25
|
+
|
|
26
|
+
`BaseMessage`
|
|
27
|
+
|
|
28
|
+
## Returns
|
|
29
|
+
|
|
30
|
+
`void`
|