@4players/odin-plugin-web 1.0.0-alpha.6 → 1.0.0-alpha.60

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.
Files changed (50) hide show
  1. package/README.md +1 -1
  2. package/cmake/dependencies.cmake +31 -0
  3. package/cmake/options.cmake +53 -0
  4. package/esbuild.config.ts +49 -0
  5. package/lib/plugin/index.d.ts +45 -0
  6. package/lib/plugin/index.js +1 -0
  7. package/lib/worker/shared.js +1 -0
  8. package/lib/worker/unshared.js +1 -0
  9. package/package.json +38 -30
  10. package/backend/lib/audioController.d.ts +0 -102
  11. package/backend/lib/audioController.d.ts.map +0 -1
  12. package/backend/lib/audioController.js +0 -442
  13. package/backend/lib/audioController.js.map +0 -1
  14. package/backend/lib/config.d.ts +0 -11
  15. package/backend/lib/config.d.ts.map +0 -1
  16. package/backend/lib/config.js +0 -11
  17. package/backend/lib/config.js.map +0 -1
  18. package/backend/lib/connectionPool.d.ts +0 -17
  19. package/backend/lib/connectionPool.d.ts.map +0 -1
  20. package/backend/lib/connectionPool.js +0 -111
  21. package/backend/lib/connectionPool.js.map +0 -1
  22. package/backend/lib/index.d.ts +0 -53
  23. package/backend/lib/index.d.ts.map +0 -1
  24. package/backend/lib/index.js +0 -293
  25. package/backend/lib/index.js.map +0 -1
  26. package/backend/lib/mainConnection.d.ts +0 -40
  27. package/backend/lib/mainConnection.d.ts.map +0 -1
  28. package/backend/lib/mainConnection.js +0 -294
  29. package/backend/lib/mainConnection.js.map +0 -1
  30. package/backend/lib/roomConnection.d.ts +0 -37
  31. package/backend/lib/roomConnection.d.ts.map +0 -1
  32. package/backend/lib/roomConnection.js +0 -299
  33. package/backend/lib/roomConnection.js.map +0 -1
  34. package/backend/lib/rpcConnection.d.ts +0 -49
  35. package/backend/lib/rpcConnection.d.ts.map +0 -1
  36. package/backend/lib/rpcConnection.js +0 -235
  37. package/backend/lib/rpcConnection.js.map +0 -1
  38. package/backend/lib/token.d.ts +0 -16
  39. package/backend/lib/token.d.ts.map +0 -1
  40. package/backend/lib/token.js +0 -67
  41. package/backend/lib/token.js.map +0 -1
  42. package/backend/package.json +0 -16
  43. package/wasm/lib/index.d.ts +0 -97
  44. package/wasm/lib/index.js +0 -19
  45. package/wasm/package.json +0 -14
  46. package/worker/lib/common.d.ts +0 -27
  47. package/worker/lib/index.d.ts +0 -46
  48. package/worker/lib/index.js +0 -2
  49. package/worker/lib/messages.d.ts +0 -93
  50. package/worker/package.json +0 -16
@@ -1,11 +0,0 @@
1
- export declare const HealthCheckTimeout = 1000;
2
- export declare const ClockJumpCheckInterval = 1000;
3
- export declare const ClockJumpThreshold = 10000;
4
- export declare const MainConnectionPingInterval = 10000;
5
- export declare const WebRTCIceTimeout = 3000;
6
- export declare const WebRTCTimeout = 10000;
7
- export declare const ConnectTimeout = 5000;
8
- export declare const MinTokenLifetime = 60000;
9
- export declare const MinTokenRefreshInterval = 5000;
10
- export declare const ConnectInterval: number[];
11
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,OAAO,CAAC;AACvC,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AACxC,eAAO,MAAM,0BAA0B,QAAQ,CAAC;AAChD,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,aAAa,QAAQ,CAAC;AACnC,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AACtC,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,eAAe,UAAsC,CAAC"}
@@ -1,11 +0,0 @@
1
- export const HealthCheckTimeout = 1000; /* ms */
2
- export const ClockJumpCheckInterval = 1000; /* ms */
3
- export const ClockJumpThreshold = 10000; /* ms */
4
- export const MainConnectionPingInterval = 10000; /* ms */
5
- export const WebRTCIceTimeout = 3000; /* ms */
6
- export const WebRTCTimeout = 10000; /* ms */
7
- export const ConnectTimeout = 5000; /* ms */
8
- export const MinTokenLifetime = 60000; /* 1min */
9
- export const MinTokenRefreshInterval = 5000; /* 5sec */
10
- export const ConnectInterval = [0, 100, 200, 200, 500, 1000, 2000]; /* ms */
11
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC,CAAC,QAAQ;AAChD,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,CAAC,QAAQ;AACpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC,CAAC,QAAQ;AACjD,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC,CAAC,QAAQ;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,QAAQ;AAC9C,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,QAAQ;AAC5C,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,QAAQ;AAC5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,CAAC,UAAU;AACjD,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC,CAAC,UAAU;AACvD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ"}
@@ -1,17 +0,0 @@
1
- import { DatagramHandler, MainConnection } from './mainConnection';
2
- import { Result } from '@4players/odin-common';
3
- export declare class ConnectionPool {
4
- readonly onDatagram: DatagramHandler;
5
- private _LastConnectionId;
6
- private readonly _ConnectionsByUrl;
7
- private readonly _ConnectionsById;
8
- private readonly _Close;
9
- get closed(): boolean;
10
- constructor(onDatagram: DatagramHandler);
11
- sendDatagram(connectionId: number, packet: Uint8Array): void;
12
- acquireConnection(url: URL, signal: AbortSignal): Promise<Result<MainConnection> | 'closed'>;
13
- releaseConnection(connection: MainConnection): void;
14
- checkHealth(): Promise<void>;
15
- close(): void;
16
- }
17
- //# sourceMappingURL=connectionPool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connectionPool.d.ts","sourceRoot":"","sources":["../src/connectionPool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,MAAM,EAA8B,MAAM,uBAAuB,CAAC;AAc3E,qBAAa,cAAc;IAUb,QAAQ,CAAC,UAAU,EAAE,eAAe;IAThD,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyB;IAC3D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA4B;IAC7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAEhD,IAAI,MAAM,IAAI,OAAO,CAEpB;gBAEoB,UAAU,EAAE,eAAe;IA2BhD,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU;IAO/C,iBAAiB,CACrB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,QAAQ,CAAC;IAsC7C,iBAAiB,CAAC,UAAU,EAAE,cAAc;IAetC,WAAW;IAQjB,KAAK;CAGN"}
@@ -1,111 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { ClockJumpCheckInterval, ClockJumpThreshold } from './config';
11
- import { MainConnection } from './mainConnection';
12
- import { failure, nextTick, success } from '@4players/odin-common';
13
- export class ConnectionPool {
14
- get closed() {
15
- return this._Close.signal.aborted;
16
- }
17
- constructor(onDatagram) {
18
- this.onDatagram = onDatagram;
19
- this._LastConnectionId = 0;
20
- this._ConnectionsByUrl = new Map();
21
- this._ConnectionsById = new Map();
22
- this._Close = new AbortController();
23
- let lastCheckAt = Date.now();
24
- const clockJumpDetector = setInterval(() => {
25
- const elapsed = Math.abs(Date.now() - lastCheckAt);
26
- if (elapsed > ClockJumpThreshold)
27
- this.checkHealth();
28
- lastCheckAt = Date.now();
29
- }, ClockJumpCheckInterval);
30
- addEventListener('offline', () => this.checkHealth(), {
31
- signal: this._Close.signal,
32
- });
33
- this._Close.signal.addEventListener('abort', () => {
34
- clearInterval(clockJumpDetector);
35
- for (const entry of this._ConnectionsById.values()) {
36
- if (entry.status === 'ready') {
37
- entry.connection.close();
38
- }
39
- }
40
- this._ConnectionsById.clear();
41
- this._ConnectionsByUrl.clear();
42
- }, { once: true });
43
- }
44
- sendDatagram(connectionId, packet) {
45
- const connection = this._ConnectionsById.get(connectionId);
46
- if (connection !== undefined && connection.status === 'ready') {
47
- connection.connection.sendDatagram(packet);
48
- }
49
- }
50
- acquireConnection(url, signal) {
51
- return __awaiter(this, void 0, void 0, function* () {
52
- yield nextTick(); // slow down acquireConnection
53
- if (this.closed)
54
- return 'closed';
55
- let entry = this._ConnectionsByUrl.get(url);
56
- if (entry === undefined ||
57
- (entry.status === 'ready' && entry.connection.closed)) {
58
- const id = this._LastConnectionId++;
59
- const promise = MainConnection.create(id, url, this.onDatagram, signal);
60
- entry = { status: 'init', id, promise };
61
- this._ConnectionsByUrl.set(url, entry);
62
- this._ConnectionsById.set(id, entry);
63
- const connection = yield promise;
64
- if (connection.type !== 'Success') {
65
- this._ConnectionsByUrl.delete(url);
66
- this._ConnectionsById.delete(id);
67
- return connection;
68
- }
69
- entry = { status: 'ready', connection: connection.value, references: 1 };
70
- this._ConnectionsByUrl.set(url, entry);
71
- this._ConnectionsById.set(id, entry);
72
- return success(entry.connection);
73
- }
74
- else if (entry.status === 'init') {
75
- const onAbort = new Promise((accept) => signal.addEventListener('abort', () => accept(), { once: true }));
76
- const result = yield Promise.race([entry.promise, onAbort]);
77
- if (result === undefined)
78
- return failure('aborted');
79
- return result;
80
- }
81
- else {
82
- entry.references += 1;
83
- return success(entry.connection);
84
- }
85
- });
86
- }
87
- releaseConnection(connection) {
88
- const entry = this._ConnectionsById.get(connection.id);
89
- if (entry === undefined)
90
- return;
91
- if (entry.status === 'init') {
92
- console.error('released connection before it was acquired!');
93
- return;
94
- }
95
- entry.references -= 1;
96
- if (entry.references === 0) {
97
- entry.connection.close();
98
- this._ConnectionsByUrl.delete(connection.url);
99
- this._ConnectionsById.delete(connection.id);
100
- }
101
- }
102
- checkHealth() {
103
- return __awaiter(this, void 0, void 0, function* () {
104
- yield Promise.all(Array.from(this._ConnectionsById.values()).map((entry) => entry.status === 'ready' ? entry.connection.healthCheck() : undefined));
105
- });
106
- }
107
- close() {
108
- this._Close.abort();
109
- }
110
- }
111
- //# sourceMappingURL=connectionPool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connectionPool.js","sourceRoot":"","sources":["../src/connectionPool.ts"],"names":[],"mappings":"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"}
@@ -1,53 +0,0 @@
1
- import { ConnectionPool } from './connectionPool';
2
- import { Backend } from '@4players/odin-common';
3
- import { AudioCapture, AudioContextFactory, AudioPlayback, CreateAudioCaptureParameters, CreateAudioPlaybackParameters, Device, Volume } from './audioController';
4
- import { MainConnection } from './mainConnection';
5
- export type Media = Backend.Media;
6
- export type JoinRoomParameters = Backend.JoinRoomParameters;
7
- export interface DeviceParameters {
8
- readonly device?: Device;
9
- onStatusChanged?: Backend.OnStatusChanged;
10
- }
11
- export declare class WebPlugin implements Backend.Plugin {
12
- readonly version = "1";
13
- private _NextRoomId;
14
- private _PlaybackVolume;
15
- private readonly _ConnectionPool;
16
- private readonly _AudioController;
17
- get playbackVolume(): Backend.Volume;
18
- static create(audioContextFactory: AudioContextFactory): Promise<WebPlugin>;
19
- private constructor();
20
- joinRoom(parameters: JoinRoomParameters): Room;
21
- createAudioPlayback(parameters: CreateAudioPlaybackParameters): Promise<AudioPlayback>;
22
- createAudioCapture(parameters: CreateAudioCaptureParameters): Promise<AudioCapture>;
23
- enumerateDevices(): Promise<Device[]>;
24
- setOutputVolume(volume: Volume): void;
25
- setOutputDevice(device: DeviceParameters): Promise<void>;
26
- close(): void;
27
- }
28
- export declare class Room implements Backend.Room {
29
- private readonly _Id;
30
- private readonly _Connection;
31
- private readonly _OnEvent;
32
- private readonly _Captures;
33
- private readonly _Playbacks;
34
- private readonly _Peers;
35
- private readonly _AvailableMediaIds;
36
- get mainConnection(): MainConnection | undefined;
37
- constructor(id: number, connectionPool: ConnectionPool, parameters: JoinRoomParameters);
38
- request(method: string, properties: unknown): Promise<unknown>;
39
- link(media: Media): void;
40
- unlink(media: Media): void;
41
- close(): void;
42
- private _HandleEvent;
43
- private _HandleKnownEvent;
44
- private _HandleConnectionLost;
45
- private _HandleRoomUpdate;
46
- private _HandleRoomJoined;
47
- private _HandlePeerUpdate;
48
- private _HandlePeerJoined;
49
- private _HandlePeerLeft;
50
- private _HandleMediaStart;
51
- private _HandleMediaStopped;
52
- }
53
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EACL,OAAO,EAUR,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,YAAY,EAEZ,mBAAmB,EAEnB,aAAa,EACb,4BAA4B,EAC5B,6BAA6B,EAC7B,MAAM,EAEN,MAAM,EACP,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;AAClC,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;CAC3C;AAED,qBAAa,SAAU,YAAW,OAAO,CAAC,MAAM;IAC9C,QAAQ,CAAC,OAAO,OAAO;IAEvB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IAEnD,IAAI,cAAc,mBAEjB;WAEY,MAAM,CACjB,mBAAmB,EAAE,mBAAmB,GACvC,OAAO,CAAC,SAAS,CAAC;IAerB,OAAO;IAQP,QAAQ,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI;IAIxC,mBAAmB,CACvB,UAAU,EAAE,6BAA6B,GACxC,OAAO,CAAC,aAAa,CAAC;IAInB,kBAAkB,CACtB,UAAU,EAAE,4BAA4B,GACvC,OAAO,CAAC,YAAY,CAAC;IAIxB,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIrC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D,KAAK,IAAI,IAAI;CAId;AAED,qBAAa,IAAK,YAAW,OAAO,CAAC,IAAI;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiB;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAGtB;IAEJ,OAAO,CAAC,QAAQ,CAAC,UAAU,CAGvB;IAEJ,OAAO,CAAC,QAAQ,CAAC,MAAM,CAGnB;IAEJ,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IAExD,IAAI,cAAc,IAAI,cAAc,GAAG,SAAS,CAE/C;gBAGC,EAAE,EAAE,MAAM,EACV,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,kBAAkB;IAqBhC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAI9D,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAuCxB,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAsB1B,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,mBAAmB;CAc5B"}
@@ -1,293 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { ConnectionPool } from './connectionPool';
11
- import { RoomConnection } from './roomConnection';
12
- import { assert, unwrap, parseRpcMessage, RoomNotificationsRpc, } from '@4players/odin-common';
13
- import { Token } from './token';
14
- import { AudioCapture, AudioContextCollection, AudioController, AudioPlayback, } from './audioController';
15
- import * as uuid from 'uuid';
16
- export class WebPlugin {
17
- get playbackVolume() {
18
- return this._PlaybackVolume;
19
- }
20
- static create(audioContextFactory) {
21
- return __awaiter(this, void 0, void 0, function* () {
22
- // eslint-disable-next-line prefer-const
23
- let audioController;
24
- const pool = new ConnectionPool((connectionId, packet) => audioController.receivePacket(connectionId, packet));
25
- const audioContexts = new AudioContextCollection(audioContextFactory);
26
- audioController = new AudioController(audioContexts, pool.sendDatagram.bind(pool));
27
- return new WebPlugin(pool, audioController);
28
- });
29
- }
30
- constructor(connectionPool, audioController) {
31
- this.version = '1';
32
- this._NextRoomId = 0;
33
- this._PlaybackVolume = 1;
34
- this._ConnectionPool = connectionPool;
35
- this._AudioController = audioController;
36
- }
37
- joinRoom(parameters) {
38
- return new Room(this._NextRoomId++, this._ConnectionPool, parameters);
39
- }
40
- createAudioPlayback(parameters) {
41
- return __awaiter(this, void 0, void 0, function* () {
42
- return this._AudioController.createAudioPlayback(parameters);
43
- });
44
- }
45
- createAudioCapture(parameters) {
46
- return __awaiter(this, void 0, void 0, function* () {
47
- return this._AudioController.createAudioCapture(parameters);
48
- });
49
- }
50
- enumerateDevices() {
51
- return this._AudioController.enumerateDevices();
52
- }
53
- setOutputVolume(volume) {
54
- this._AudioController.playbackSetGlobalVolume(volume);
55
- }
56
- setOutputDevice(device) {
57
- return __awaiter(this, void 0, void 0, function* () {
58
- yield this._AudioController.playbackSetDevice(device.device);
59
- });
60
- }
61
- close() {
62
- this._AudioController.close();
63
- this._ConnectionPool.close();
64
- }
65
- }
66
- export class Room {
67
- get mainConnection() {
68
- return this._Connection.mainConnection;
69
- }
70
- constructor(id, connectionPool, parameters) {
71
- var _a, _b, _c;
72
- this._Captures = new Map();
73
- this._Playbacks = new Map();
74
- this._Peers = new Map();
75
- this._AvailableMediaIds = [];
76
- const { gateway, onEvent } = parameters;
77
- const token = unwrap(Token.parse(parameters.token));
78
- const roomId = (_a = parameters.roomId) !== null && _a !== void 0 ? _a : token.defaultRoomId;
79
- const userData = (_b = parameters.userData) !== null && _b !== void 0 ? _b : new Uint8Array(0);
80
- const position = (_c = parameters.position) !== null && _c !== void 0 ? _c : [0, 0, 0];
81
- assert(roomId !== undefined, 'room id required for multi-room-tokens');
82
- this._Id = id;
83
- this._OnEvent = onEvent;
84
- this._Connection = new RoomConnection(connectionPool, this._HandleEvent.bind(this), gateway ? new URL(gateway) : undefined, token, roomId, userData, position);
85
- }
86
- request(method, properties) {
87
- return this._Connection.request(method, properties);
88
- }
89
- link(media) {
90
- var _a;
91
- if (media instanceof AudioPlayback) {
92
- const entry = (_a = this._Playbacks.get(media.uid)) !== null && _a !== void 0 ? _a : {
93
- media: undefined,
94
- playback: undefined,
95
- };
96
- if (entry.playback !== undefined) {
97
- this.unlink(entry.playback);
98
- }
99
- if (entry.media !== undefined) {
100
- media.start(entry.media);
101
- }
102
- entry.playback = media;
103
- this._Playbacks.set(media.uid, entry);
104
- }
105
- else if (media instanceof AudioCapture) {
106
- let entry = this._Captures.get(media);
107
- if (entry) {
108
- this.unlink(media);
109
- }
110
- const mediaId = this.mainConnection !== undefined && this._AvailableMediaIds.shift();
111
- entry = {
112
- media: mediaId
113
- ? {
114
- connectionId: this.mainConnection.id,
115
- mediaId,
116
- }
117
- : undefined,
118
- uid: uuid.v4(),
119
- };
120
- this._Captures.set(media, entry);
121
- if (entry.media !== undefined) {
122
- media.start(this._Connection, entry.media, entry.uid);
123
- }
124
- }
125
- else {
126
- throw new Error('invalid media');
127
- }
128
- }
129
- unlink(media) {
130
- if (media instanceof AudioPlayback) {
131
- const entry = this._Playbacks.get(media.uid);
132
- if ((entry === null || entry === void 0 ? void 0 : entry.playback) !== media)
133
- return;
134
- entry.playback = undefined;
135
- if (entry.media !== undefined) {
136
- media.stop(entry.media);
137
- }
138
- this._Playbacks.set(media.uid, entry);
139
- }
140
- else if (media instanceof AudioCapture) {
141
- const entry = this._Captures.get(media);
142
- if (entry === undefined)
143
- return;
144
- if (entry.media !== undefined) {
145
- media.stop(this._Connection, entry.media);
146
- this._AvailableMediaIds.push(entry.media.mediaId);
147
- }
148
- this._Captures.delete(media);
149
- }
150
- else {
151
- throw new Error('invalid media');
152
- }
153
- }
154
- close() {
155
- this._Connection.close();
156
- }
157
- _HandleEvent(method, properties) {
158
- const rpc = parseRpcMessage(RoomNotificationsRpc, {
159
- name: method,
160
- properties,
161
- });
162
- if (rpc !== undefined) {
163
- this._HandleKnownEvent(rpc);
164
- properties = rpc.properties;
165
- }
166
- console.log(`handle event ${method} ${this._OnEvent !== undefined}`);
167
- this._OnEvent(method, properties);
168
- }
169
- _HandleKnownEvent(event) {
170
- switch (event.name) {
171
- case 'RoomStatusChanged':
172
- if (event.properties.status !== 'Joined') {
173
- this._HandleConnectionLost();
174
- }
175
- break;
176
- case 'RoomUpdated':
177
- for (const update of event.properties.updates) {
178
- this._HandleRoomUpdate(update);
179
- }
180
- break;
181
- case 'PeerUpdated':
182
- this._HandlePeerUpdate(event.properties);
183
- break;
184
- }
185
- }
186
- _HandleConnectionLost() {
187
- for (const peerId of this._Peers.keys()) {
188
- this._HandlePeerLeft(peerId);
189
- }
190
- for (const [capture, entry] of this._Captures) {
191
- if (entry.media === undefined)
192
- continue;
193
- capture.stop(this._Connection, entry.media);
194
- entry.media = undefined;
195
- }
196
- this._AvailableMediaIds.length = 0;
197
- }
198
- _HandleRoomUpdate(update) {
199
- if (update.kind === 'Joined') {
200
- assert(this._AvailableMediaIds.length === 0, 'left over media ids');
201
- this._AvailableMediaIds.push(...update.media_ids);
202
- this._HandleRoomJoined();
203
- for (const peer of update.room.peers) {
204
- this._HandlePeerJoined(peer);
205
- }
206
- }
207
- else if (update.kind === 'PeerJoined') {
208
- this._HandlePeerJoined(update.peer);
209
- }
210
- else if (update.kind === 'PeerLeft') {
211
- this._HandlePeerLeft(update.peer_id);
212
- }
213
- }
214
- _HandleRoomJoined() {
215
- for (const [capture, entry] of this._Captures) {
216
- if (this._AvailableMediaIds.length === 0 ||
217
- this.mainConnection === undefined) {
218
- continue;
219
- }
220
- entry.media = {
221
- connectionId: this.mainConnection.id,
222
- mediaId: this._AvailableMediaIds.shift(),
223
- };
224
- capture.start(this._Connection, entry.media, entry.uid);
225
- }
226
- }
227
- _HandlePeerUpdate(update) {
228
- if (update.kind === 'MediaStarted') {
229
- this._HandleMediaStart(update.peer_id, update.media);
230
- }
231
- else if (update.kind === 'MediaStopped') {
232
- this._HandleMediaStopped(update.peer_id, update.media_id);
233
- }
234
- }
235
- _HandlePeerJoined(peer) {
236
- if (!this._Peers.has(peer.id)) {
237
- this._Peers.set(peer.id, { mediaIds: new Map() });
238
- }
239
- for (const media of peer.medias) {
240
- this._HandleMediaStart(peer.id, media);
241
- }
242
- }
243
- _HandlePeerLeft(peerId) {
244
- const entry = this._Peers.get(peerId);
245
- if (entry === undefined)
246
- return;
247
- for (const mediaId of entry.mediaIds.keys()) {
248
- this._HandleMediaStopped(peerId, mediaId);
249
- }
250
- this._Peers.delete(peerId);
251
- }
252
- _HandleMediaStart(peerId, media) {
253
- var _a, _b;
254
- if (this.mainConnection === undefined)
255
- return;
256
- const peer = this._Peers.get(peerId);
257
- if (peer === undefined || media.properties.kind !== 'audio')
258
- return;
259
- const uid = String((_a = media.properties.uid) !== null && _a !== void 0 ? _a : uuid.v4());
260
- console.log(`uuid ${media.properties.uid} ${uid}`);
261
- media.properties.uid = uid; // feed the uid back, so it can be seen be seen down the chain.
262
- const entry = (_b = this._Playbacks.get(uid)) !== null && _b !== void 0 ? _b : {
263
- media: undefined,
264
- playback: undefined,
265
- };
266
- this._Playbacks.set(uid, entry);
267
- peer.mediaIds.set(media.id, uid);
268
- entry.media = {
269
- connectionId: this.mainConnection.id,
270
- mediaId: media.id,
271
- };
272
- if (entry.playback !== undefined) {
273
- entry.playback.start(entry.media);
274
- }
275
- }
276
- _HandleMediaStopped(peerId, mediaId) {
277
- const peer = this._Peers.get(peerId);
278
- if (peer === undefined)
279
- return;
280
- const uid = peer === null || peer === void 0 ? void 0 : peer.mediaIds.get(mediaId);
281
- if (uid === undefined)
282
- return;
283
- const entry = this._Playbacks.get(uid);
284
- if (entry === undefined)
285
- return;
286
- if (entry.media !== undefined && entry.playback !== undefined) {
287
- entry.playback.stop(entry.media);
288
- }
289
- entry.media = undefined;
290
- peer.mediaIds.delete(mediaId);
291
- }
292
- }
293
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,40 +0,0 @@
1
- import { TypedRpcConnection } from './rpcConnection';
2
- import { Token } from './token';
3
- import { MainCommands, MainNotifications, Result } from '@4players/odin-common';
4
- type RpcConnection = TypedRpcConnection<MainCommands, MainNotifications>;
5
- export type DatagramHandler = (connectionId: number, datagram: Uint8Array) => void;
6
- export declare class MainConnection {
7
- readonly id: number;
8
- readonly url: URL;
9
- readonly onDatagram: DatagramHandler;
10
- readonly connection: RpcConnection;
11
- readonly webRtc: RTCPeerConnection;
12
- static create(id: number, url: URL, onDatagram: DatagramHandler, signal: AbortSignal): Promise<Result<MainConnection>>;
13
- private readonly _AudioChannel;
14
- private readonly _PeerIdMap;
15
- private _PeriodicHealthCheck;
16
- private _WebRtcIceTimeout;
17
- private _WebRtcTimeout;
18
- private _ClosePromise;
19
- get closePromise(): Promise<"closed">;
20
- get closeSignal(): AbortSignal;
21
- get closed(): boolean;
22
- webRtcReady(): Promise<boolean>;
23
- private constructor();
24
- close(): void;
25
- joinRoom(token: Token, roomId: string, userData: Uint8Array, position: [number, number, number]): Promise<Result<WebSocket> | 'closed'>;
26
- getReconnectToken(webSocket: WebSocket): Promise<Result<Token>>;
27
- sendDatagram(datagram: Uint8Array): void;
28
- healthCheck(): Promise<boolean>;
29
- private _Request;
30
- private _readEvents;
31
- private _SendOffer;
32
- private _OnWebRtcStatusChanged;
33
- private _OnWebRtcUpdate;
34
- private _UpdateRemoteSdp;
35
- private _AddIceCandidate;
36
- private _OnIceCandidate;
37
- private _CleanUp;
38
- }
39
- export {};
40
- //# sourceMappingURL=mainConnection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mainConnection.d.ts","sourceRoot":"","sources":["../src/mainConnection.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,kBAAkB,EAAW,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EACL,YAAY,EAEZ,iBAAiB,EAEjB,MAAM,EAKP,MAAM,uBAAuB,CAAC;AAG/B,KAAK,aAAa,GAAG,kBAAkB,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAEzE,MAAM,MAAM,eAAe,GAAG,CAC5B,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,UAAU,KACjB,IAAI,CAAC;AAEV,qBAAa,cAAc;IAgFvB,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,QAAQ,CAAC,GAAG,EAAE,GAAG;IACjB,QAAQ,CAAC,UAAU,EAAE,eAAe;IACpC,QAAQ,CAAC,UAAU,EAAE,aAAa;IAClC,QAAQ,CAAC,MAAM,EAAE,iBAAiB;WAnFvB,MAAM,CACjB,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,eAAe,EAC3B,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAsBlC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;IAC/D,OAAO,CAAC,oBAAoB,CAA4C;IACxE,OAAO,CAAC,iBAAiB,CAA4C;IACrE,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,aAAa,CAAoB;IAEzC,IAAI,YAAY,sBAEf;IAED,IAAI,WAAW,gBAEd;IAED,IAAI,MAAM,YAET;IAED,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAgC/B,OAAO;IAuCP,KAAK;IAIC,QAAQ,CACZ,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GACjC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;IAqBlC,iBAAiB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAYrE,YAAY,CAAC,QAAQ,EAAE,UAAU;IAM3B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;YAOvB,QAAQ;YAuBR,WAAW;YAeX,UAAU;IAuBxB,OAAO,CAAC,sBAAsB;IA8B9B,OAAO,CAAC,eAAe;YAcT,gBAAgB;IAO9B,OAAO,CAAC,gBAAgB;YAmBV,eAAe;IAgB7B,OAAO,CAAC,QAAQ;CAQjB"}