@photon-os/sdk 0.5.0-beta1 → 0.5.1-beta1

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 (59) hide show
  1. package/lib/CoreServices/Apps/App.d.ts +6 -6
  2. package/lib/CoreServices/Apps/App.js +9 -9
  3. package/lib/CoreServices/Apps/AppRegistry.d.ts +6 -6
  4. package/lib/CoreServices/Apps/AppRegistry.js +15 -15
  5. package/lib/CoreServices/Apps/Launcher.d.ts +5 -5
  6. package/lib/CoreServices/Apps/Launcher.js +9 -9
  7. package/lib/CoreServices/Apps/PhotonApp.d.ts +6 -6
  8. package/lib/CoreServices/Apps/PhotonApp.js +33 -33
  9. package/lib/CoreServices/Apps/PhotonAppMode.d.ts +5 -5
  10. package/lib/CoreServices/Apps/PhotonAppMode.js +8 -8
  11. package/lib/CoreServices/Apps/UserPreferences.d.ts +6 -6
  12. package/lib/CoreServices/Apps/UserPreferences.js +15 -15
  13. package/lib/CoreServices/HomeBar.d.ts +4 -4
  14. package/lib/CoreServices/HomeBar.js +8 -8
  15. package/lib/CoreServices/StatusBar/StatusBar.d.ts +9 -8
  16. package/lib/CoreServices/StatusBar/StatusBar.js +37 -36
  17. package/lib/CoreServices/StatusBar/StatusBarContentType.d.ts +5 -5
  18. package/lib/CoreServices/StatusBar/StatusBarContentType.js +8 -8
  19. package/lib/SecondLife/PhotonTool.d.ts +33 -33
  20. package/lib/SecondLife/PhotonTool.js +100 -100
  21. package/lib/SecondLife/SecondLifeDevice.d.ts +9 -9
  22. package/lib/SecondLife/SecondLifeDevice.js +12 -12
  23. package/lib/SecondLife/SecondLifeIdentity.d.ts +4 -4
  24. package/lib/SecondLife/SecondLifeIdentity.js +9 -9
  25. package/lib/SecondLife/SecondLifeProxy.d.ts +5 -5
  26. package/lib/SecondLife/SecondLifeProxy.js +8 -8
  27. package/lib/SecondLife/SecondLifeRegistry.d.ts +5 -5
  28. package/lib/SecondLife/SecondLifeRegistry.js +22 -22
  29. package/lib/Sensor/Sensor.d.ts +6 -6
  30. package/lib/Sensor/Sensor.js +31 -31
  31. package/lib/Sensor/SensorResult.d.ts +14 -14
  32. package/lib/Sensor/SensorResult.js +1 -1
  33. package/lib/SystemEvents/EventManager.d.ts +14 -14
  34. package/lib/SystemEvents/EventManager.js +38 -38
  35. package/lib/SystemEvents/LifecycleEventNames.d.ts +5 -5
  36. package/lib/SystemEvents/LifecycleEventNames.js +8 -8
  37. package/lib/SystemEvents/LifecycleEvents.d.ts +5 -7
  38. package/lib/SystemEvents/LifecycleEvents.js +18 -19
  39. package/lib/SystemMessaging/BrowserMessageListener.d.ts +10 -11
  40. package/lib/SystemMessaging/BrowserMessageListener.js +21 -21
  41. package/lib/SystemMessaging/BrowserMessagingTarget.d.ts +9 -9
  42. package/lib/SystemMessaging/BrowserMessagingTarget.js +13 -13
  43. package/lib/SystemMessaging/IMessage.d.ts +6 -6
  44. package/lib/SystemMessaging/IMessage.js +2 -2
  45. package/lib/SystemMessaging/IMessageListener.d.ts +8 -9
  46. package/lib/SystemMessaging/IMessageListener.js +2 -2
  47. package/lib/SystemMessaging/IMessagingTarget.d.ts +5 -5
  48. package/lib/SystemMessaging/IMessagingTarget.js +2 -2
  49. package/lib/SystemMessaging/MessageBroker.d.ts +30 -30
  50. package/lib/SystemMessaging/MessageBroker.js +147 -147
  51. package/lib/SystemMessaging/SecondLIfeMessagingListener.d.ts +13 -14
  52. package/lib/SystemMessaging/SecondLIfeMessagingListener.js +28 -28
  53. package/lib/SystemMessaging/SecondLifeMessagingTarget.d.ts +9 -9
  54. package/lib/SystemMessaging/SecondLifeMessagingTarget.js +13 -13
  55. package/lib/SystemMessaging/VoidMessagingTarget.d.ts +7 -7
  56. package/lib/SystemMessaging/VoidMessagingTarget.js +12 -12
  57. package/lib/index.d.ts +22 -22
  58. package/lib/index.js +46 -46
  59. package/package.json +29 -29
@@ -1,19 +1,18 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const events_1 = require("events");
4
- const __1 = require("..");
5
- class LifecycleEvents extends events_1.EventEmitter {
6
- static on(eventName, handler) {
7
- switch (eventName) {
8
- case 'willEnterBackground':
9
- __1.EventManager.defaultEventManager.on('os_Launcher_WillEnterBackground', handler);
10
- break;
11
- case 'willEnterForeground':
12
- __1.EventManager.defaultEventManager.on('os_Launcher_WillEnterForeground', handler);
13
- break;
14
- default:
15
- throw new Error('Invalid Lifecycle Event: ' + eventName);
16
- }
17
- }
18
- }
19
- exports.default = LifecycleEvents;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const __1 = require("..");
4
+ class LifecycleEvents {
5
+ static on(eventName, handler) {
6
+ switch (eventName) {
7
+ case "willEnterBackground":
8
+ __1.EventManager.defaultEventManager.on("os_Launcher_WillEnterBackground", handler);
9
+ break;
10
+ case "willEnterForeground":
11
+ __1.EventManager.defaultEventManager.on("os_Launcher_WillEnterForeground", handler);
12
+ break;
13
+ default:
14
+ throw new Error("Invalid Lifecycle Event: " + eventName);
15
+ }
16
+ }
17
+ }
18
+ exports.default = LifecycleEvents;
@@ -1,11 +1,10 @@
1
- /// <reference types="node" />
2
- import IMessageListener from "./IMessageListener";
3
- import MessageBroker from "./MessageBroker";
4
- import { EventEmitter } from "events";
5
- declare class BrowserMessageListener extends EventEmitter implements IMessageListener {
6
- id: string;
7
- subscribe(broker: MessageBroker): void;
8
- unsubscribe(broker: MessageBroker): void;
9
- private messageEventHandler;
10
- }
11
- export default BrowserMessageListener;
1
+ import IMessageListener from "./IMessageListener";
2
+ import MessageBroker from "./MessageBroker";
3
+ import EventEmitter from "eventemitter3";
4
+ declare class BrowserMessageListener extends EventEmitter implements IMessageListener {
5
+ id: string;
6
+ subscribe(broker: MessageBroker): void;
7
+ unsubscribe(broker: MessageBroker): void;
8
+ private messageEventHandler;
9
+ }
10
+ export default BrowserMessageListener;
@@ -1,21 +1,21 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const events_1 = require("events");
4
- const BrowserMessagingTarget_1 = require("./BrowserMessagingTarget");
5
- class BrowserMessageListener extends events_1.EventEmitter {
6
- constructor() {
7
- super(...arguments);
8
- this.id = "browser";
9
- }
10
- subscribe(broker) {
11
- window.addEventListener("message", this.messageEventHandler.bind(this));
12
- }
13
- unsubscribe(broker) {
14
- window.removeEventListener("message", this.messageEventHandler.bind(this));
15
- }
16
- messageEventHandler(e) {
17
- const source = new BrowserMessagingTarget_1.default("randomid", e.source);
18
- this.emit("message", { source, data: e.data });
19
- }
20
- }
21
- exports.default = BrowserMessageListener;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const BrowserMessagingTarget_1 = require("./BrowserMessagingTarget");
4
+ const eventemitter3_1 = require("eventemitter3");
5
+ class BrowserMessageListener extends eventemitter3_1.default {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.id = "browser";
9
+ }
10
+ subscribe(broker) {
11
+ window.addEventListener("message", this.messageEventHandler.bind(this));
12
+ }
13
+ unsubscribe(broker) {
14
+ window.removeEventListener("message", this.messageEventHandler.bind(this));
15
+ }
16
+ messageEventHandler(e) {
17
+ const source = new BrowserMessagingTarget_1.default("randomid", e.source);
18
+ this.emit("message", { source, data: e.data });
19
+ }
20
+ }
21
+ exports.default = BrowserMessageListener;
@@ -1,9 +1,9 @@
1
- import IMessagingTarget from './IMessagingTarget';
2
- declare class BrowserMessagingTarget implements IMessagingTarget {
3
- id: string;
4
- target: Window;
5
- origin: string;
6
- constructor(id: string, target: Window, origin?: string);
7
- postMessage(message: any): void;
8
- }
9
- export default BrowserMessagingTarget;
1
+ import IMessagingTarget from './IMessagingTarget';
2
+ declare class BrowserMessagingTarget implements IMessagingTarget {
3
+ id: string;
4
+ target: Window;
5
+ origin: string;
6
+ constructor(id: string, target: Window, origin?: string);
7
+ postMessage(message: any): void;
8
+ }
9
+ export default BrowserMessagingTarget;
@@ -1,13 +1,13 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- class BrowserMessagingTarget {
4
- constructor(id, target, origin = '*') {
5
- this.id = id;
6
- this.target = target;
7
- this.origin = origin;
8
- }
9
- postMessage(message) {
10
- this.target.postMessage(message, this.origin);
11
- }
12
- }
13
- exports.default = BrowserMessagingTarget;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class BrowserMessagingTarget {
4
+ constructor(id, target, origin = '*') {
5
+ this.id = id;
6
+ this.target = target;
7
+ this.origin = origin;
8
+ }
9
+ postMessage(message) {
10
+ this.target.postMessage(message, this.origin);
11
+ }
12
+ }
13
+ exports.default = BrowserMessagingTarget;
@@ -1,6 +1,6 @@
1
- import IMessagingTarget from "./IMessagingTarget";
2
- interface IMessage {
3
- source: IMessagingTarget;
4
- data: any;
5
- }
6
- export default IMessage;
1
+ import IMessagingTarget from "./IMessagingTarget";
2
+ interface IMessage {
3
+ source: IMessagingTarget;
4
+ data: any;
5
+ }
6
+ export default IMessage;
@@ -1,2 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,9 +1,8 @@
1
- /// <reference types="node" />
2
- import MessageBroker from "./MessageBroker";
3
- import { EventEmitter } from "events";
4
- interface IMessageListener extends EventEmitter {
5
- id: string;
6
- subscribe(broker: MessageBroker): void;
7
- unsubscribe(broker: MessageBroker): void;
8
- }
9
- export default IMessageListener;
1
+ import EventEmitter from "eventemitter3";
2
+ import MessageBroker from "./MessageBroker";
3
+ interface IMessageListener extends EventEmitter {
4
+ id: string;
5
+ subscribe(broker: MessageBroker): void;
6
+ unsubscribe(broker: MessageBroker): void;
7
+ }
8
+ export default IMessageListener;
@@ -1,2 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,5 +1,5 @@
1
- interface IMessagingTarget {
2
- id: string;
3
- postMessage(message: any): void;
4
- }
5
- export default IMessagingTarget;
1
+ interface IMessagingTarget {
2
+ id: string;
3
+ postMessage(message: any): void;
4
+ }
5
+ export default IMessagingTarget;
@@ -1,2 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,30 +1,30 @@
1
- import IMessagingTarget from "./IMessagingTarget";
2
- import IMessageListener from "./IMessageListener";
3
- declare class MessageBroker {
4
- static defaultMessageBroker: MessageBroker;
5
- targets: IMessagingTarget[];
6
- services: any[];
7
- listeners: IMessageListener[];
8
- returnHandlers: any;
9
- constructor();
10
- static setDefault(defaultMessageBroker: MessageBroker): void;
11
- registerTarget(target: IMessagingTarget): void;
12
- unregisterTarget(targetId: string): void;
13
- getTargetById(targetId: string): IMessagingTarget;
14
- hasTarget(targetId: string): boolean;
15
- invoke(target: IMessagingTarget, serviceId: string, methodName: string, methodArgs?: any[]): Promise<any>;
16
- invokeEverywhere(serviceId: string, methodName: string, methodArgs?: any[]): void;
17
- private registerReturnHandler;
18
- private unregisterReturnHandler;
19
- private handleReturn;
20
- registerService(serviceId: string, service: any): void;
21
- unregisterService(serviceId: string): void;
22
- getServiceById(serviceId: string): any;
23
- registerListener(listener: IMessageListener): void;
24
- unregisterListener(listenerId: string): void;
25
- getListenerByid(listenerId: string): IMessageListener | undefined;
26
- private handleMessageEvent;
27
- private handleInvoke;
28
- private sendReturnValue;
29
- }
30
- export default MessageBroker;
1
+ import IMessagingTarget from "./IMessagingTarget";
2
+ import IMessageListener from "./IMessageListener";
3
+ declare class MessageBroker {
4
+ static defaultMessageBroker: MessageBroker;
5
+ targets: IMessagingTarget[];
6
+ services: any[];
7
+ listeners: IMessageListener[];
8
+ returnHandlers: any;
9
+ constructor();
10
+ static setDefault(defaultMessageBroker: MessageBroker): void;
11
+ registerTarget(target: IMessagingTarget): void;
12
+ unregisterTarget(targetId: string): void;
13
+ getTargetById(targetId: string): IMessagingTarget;
14
+ hasTarget(targetId: string): boolean;
15
+ invoke(target: IMessagingTarget, serviceId: string, methodName: string, methodArgs?: any[]): Promise<any>;
16
+ invokeEverywhere(serviceId: string, methodName: string, methodArgs?: any[]): void;
17
+ private registerReturnHandler;
18
+ private unregisterReturnHandler;
19
+ private handleReturn;
20
+ registerService(serviceId: string, service: any): void;
21
+ unregisterService(serviceId: string): void;
22
+ getServiceById(serviceId: string): any;
23
+ registerListener(listener: IMessageListener): void;
24
+ unregisterListener(listenerId: string): void;
25
+ getListenerByid(listenerId: string): IMessageListener | undefined;
26
+ private handleMessageEvent;
27
+ private handleInvoke;
28
+ private sendReturnValue;
29
+ }
30
+ export default MessageBroker;
@@ -1,147 +1,147 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const VoidMessagingTarget_1 = require("./VoidMessagingTarget");
13
- const uuid_1 = require("uuid");
14
- class MessageBroker {
15
- constructor() {
16
- this.targets = [];
17
- this.services = [];
18
- this.listeners = [];
19
- this.returnHandlers = {};
20
- }
21
- static setDefault(defaultMessageBroker) {
22
- MessageBroker.defaultMessageBroker = defaultMessageBroker;
23
- }
24
- registerTarget(target) {
25
- if (this.hasTarget(target.id)) {
26
- console.warn(`Attempted to register duplicate target: ${target.id}`);
27
- return;
28
- }
29
- this.targets.push(target);
30
- }
31
- unregisterTarget(targetId) {
32
- this.targets = this.targets.filter((t) => t.id !== targetId);
33
- }
34
- getTargetById(targetId) {
35
- const matchingTarget = this.targets.find((t) => t.id === targetId);
36
- return matchingTarget || new VoidMessagingTarget_1.default(targetId);
37
- }
38
- hasTarget(targetId) {
39
- return this.targets.find((t) => t.id === targetId) !== undefined;
40
- }
41
- invoke(target, serviceId, methodName, methodArgs) {
42
- return new Promise((resolve) => {
43
- const returnId = `${methodName}_${uuid_1.v4()}`;
44
- this.registerReturnHandler(returnId, resolve);
45
- target.postMessage({
46
- __type: "invoke",
47
- serviceId,
48
- methodName,
49
- methodArgs,
50
- returnId,
51
- });
52
- });
53
- }
54
- invokeEverywhere(serviceId, methodName, methodArgs) {
55
- this.targets.forEach((target) => this.invoke(target, serviceId, methodName, methodArgs));
56
- }
57
- registerReturnHandler(returnId, callback) {
58
- this.returnHandlers[returnId] = callback;
59
- }
60
- unregisterReturnHandler(returnId) {
61
- delete this.returnHandlers[returnId];
62
- }
63
- handleReturn(message) {
64
- const { returnId, returnValue } = message.data;
65
- const returnHandler = this.returnHandlers[returnId];
66
- if (returnHandler === undefined) {
67
- console.warn(`Attempted to invoke unknown return handler: ${returnId}`);
68
- return;
69
- }
70
- returnHandler(returnValue);
71
- this.unregisterReturnHandler(returnId);
72
- }
73
- registerService(serviceId, service) {
74
- const existingService = this.getServiceById(serviceId);
75
- if (existingService !== undefined) {
76
- console.warn(`Attempted to regsiter duplciate service: ${serviceId}`);
77
- return;
78
- }
79
- this.services.push({ id: serviceId, methods: service });
80
- }
81
- unregisterService(serviceId) {
82
- this.services = this.services.filter((s) => s.id !== serviceId);
83
- }
84
- getServiceById(serviceId) {
85
- return this.services.find((s) => s.id === serviceId);
86
- }
87
- registerListener(listener) {
88
- const existingListener = this.getListenerByid(listener.id);
89
- if (existingListener !== undefined) {
90
- console.warn(`Attempted to register duplicate listener: ${listener.id}`);
91
- return;
92
- }
93
- this.listeners.push(listener);
94
- listener.on("message", this.handleMessageEvent.bind(this));
95
- listener.subscribe(this);
96
- }
97
- unregisterListener(listenerId) {
98
- const existingListener = this.getListenerByid(listenerId);
99
- this.listeners = this.listeners.filter((l) => l.id !== listenerId);
100
- if (existingListener !== undefined) {
101
- existingListener.off("message", this.handleMessageEvent.bind(this));
102
- existingListener.unsubscribe(this);
103
- }
104
- }
105
- getListenerByid(listenerId) {
106
- return this.listeners.find((l) => l.id === listenerId);
107
- }
108
- handleMessageEvent(message) {
109
- if (message.data.__type === undefined)
110
- return;
111
- switch (message.data.__type) {
112
- case "invoke":
113
- this.handleInvoke(message);
114
- break;
115
- case "return":
116
- this.handleReturn(message);
117
- break;
118
- default:
119
- return;
120
- }
121
- }
122
- handleInvoke(message) {
123
- return __awaiter(this, void 0, void 0, function* () {
124
- const { serviceId, methodName, methodArgs, returnId } = message.data;
125
- const matchingService = this.getServiceById(serviceId);
126
- if (matchingService === undefined) {
127
- console.error(`Attempted to invoke unknown service: ${serviceId}`);
128
- return;
129
- }
130
- const matchingMethod = matchingService.methods[methodName];
131
- if (matchingMethod === undefined) {
132
- console.error(`Attepted to invoke unknown method: ${serviceId}.${methodName}`);
133
- return;
134
- }
135
- const returnValue = yield matchingMethod(...(methodArgs || []));
136
- this.sendReturnValue(message.source, returnId, returnValue);
137
- });
138
- }
139
- sendReturnValue(target, returnId, returnValue) {
140
- target.postMessage({
141
- __type: "return",
142
- returnId,
143
- returnValue,
144
- });
145
- }
146
- }
147
- exports.default = MessageBroker;
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const VoidMessagingTarget_1 = require("./VoidMessagingTarget");
13
+ const uuid_1 = require("uuid");
14
+ class MessageBroker {
15
+ constructor() {
16
+ this.targets = [];
17
+ this.services = [];
18
+ this.listeners = [];
19
+ this.returnHandlers = {};
20
+ }
21
+ static setDefault(defaultMessageBroker) {
22
+ MessageBroker.defaultMessageBroker = defaultMessageBroker;
23
+ }
24
+ registerTarget(target) {
25
+ if (this.hasTarget(target.id)) {
26
+ console.warn(`Attempted to register duplicate target: ${target.id}`);
27
+ return;
28
+ }
29
+ this.targets.push(target);
30
+ }
31
+ unregisterTarget(targetId) {
32
+ this.targets = this.targets.filter((t) => t.id !== targetId);
33
+ }
34
+ getTargetById(targetId) {
35
+ const matchingTarget = this.targets.find((t) => t.id === targetId);
36
+ return matchingTarget || new VoidMessagingTarget_1.default(targetId);
37
+ }
38
+ hasTarget(targetId) {
39
+ return this.targets.find((t) => t.id === targetId) !== undefined;
40
+ }
41
+ invoke(target, serviceId, methodName, methodArgs) {
42
+ return new Promise((resolve) => {
43
+ const returnId = `${methodName}_${uuid_1.v4()}`;
44
+ this.registerReturnHandler(returnId, resolve);
45
+ target.postMessage({
46
+ __type: "invoke",
47
+ serviceId,
48
+ methodName,
49
+ methodArgs,
50
+ returnId,
51
+ });
52
+ });
53
+ }
54
+ invokeEverywhere(serviceId, methodName, methodArgs) {
55
+ this.targets.forEach((target) => this.invoke(target, serviceId, methodName, methodArgs));
56
+ }
57
+ registerReturnHandler(returnId, callback) {
58
+ this.returnHandlers[returnId] = callback;
59
+ }
60
+ unregisterReturnHandler(returnId) {
61
+ delete this.returnHandlers[returnId];
62
+ }
63
+ handleReturn(message) {
64
+ const { returnId, returnValue } = message.data;
65
+ const returnHandler = this.returnHandlers[returnId];
66
+ if (returnHandler === undefined) {
67
+ console.warn(`Attempted to invoke unknown return handler: ${returnId}`);
68
+ return;
69
+ }
70
+ returnHandler(returnValue);
71
+ this.unregisterReturnHandler(returnId);
72
+ }
73
+ registerService(serviceId, service) {
74
+ const existingService = this.getServiceById(serviceId);
75
+ if (existingService !== undefined) {
76
+ console.warn(`Attempted to regsiter duplciate service: ${serviceId}`);
77
+ return;
78
+ }
79
+ this.services.push({ id: serviceId, methods: service });
80
+ }
81
+ unregisterService(serviceId) {
82
+ this.services = this.services.filter((s) => s.id !== serviceId);
83
+ }
84
+ getServiceById(serviceId) {
85
+ return this.services.find((s) => s.id === serviceId);
86
+ }
87
+ registerListener(listener) {
88
+ const existingListener = this.getListenerByid(listener.id);
89
+ if (existingListener !== undefined) {
90
+ console.warn(`Attempted to register duplicate listener: ${listener.id}`);
91
+ return;
92
+ }
93
+ this.listeners.push(listener);
94
+ listener.on("message", this.handleMessageEvent.bind(this));
95
+ listener.subscribe(this);
96
+ }
97
+ unregisterListener(listenerId) {
98
+ const existingListener = this.getListenerByid(listenerId);
99
+ this.listeners = this.listeners.filter((l) => l.id !== listenerId);
100
+ if (existingListener !== undefined) {
101
+ existingListener.off("message", this.handleMessageEvent.bind(this));
102
+ existingListener.unsubscribe(this);
103
+ }
104
+ }
105
+ getListenerByid(listenerId) {
106
+ return this.listeners.find((l) => l.id === listenerId);
107
+ }
108
+ handleMessageEvent(message) {
109
+ if (message.data.__type === undefined)
110
+ return;
111
+ switch (message.data.__type) {
112
+ case "invoke":
113
+ this.handleInvoke(message);
114
+ break;
115
+ case "return":
116
+ this.handleReturn(message);
117
+ break;
118
+ default:
119
+ return;
120
+ }
121
+ }
122
+ handleInvoke(message) {
123
+ return __awaiter(this, void 0, void 0, function* () {
124
+ const { serviceId, methodName, methodArgs, returnId } = message.data;
125
+ const matchingService = this.getServiceById(serviceId);
126
+ if (matchingService === undefined) {
127
+ console.error(`Attempted to invoke unknown service: ${serviceId}`);
128
+ return;
129
+ }
130
+ const matchingMethod = matchingService.methods[methodName];
131
+ if (matchingMethod === undefined) {
132
+ console.error(`Attepted to invoke unknown method: ${serviceId}.${methodName}`);
133
+ return;
134
+ }
135
+ const returnValue = yield matchingMethod(...(methodArgs || []));
136
+ this.sendReturnValue(message.source, returnId, returnValue);
137
+ });
138
+ }
139
+ sendReturnValue(target, returnId, returnValue) {
140
+ target.postMessage({
141
+ __type: "return",
142
+ returnId,
143
+ returnValue,
144
+ });
145
+ }
146
+ }
147
+ exports.default = MessageBroker;
@@ -1,14 +1,13 @@
1
- /// <reference types="node" />
2
- import IMessageListener from "./IMessageListener";
3
- import MessageBroker from "./MessageBroker";
4
- import { EventEmitter } from "events";
5
- declare class SecondLifeMessagingListener extends EventEmitter implements IMessageListener {
6
- id: string;
7
- senderId: string;
8
- socket: any;
9
- constructor(senderId: string, socket: any);
10
- subscribe(broker: MessageBroker): void;
11
- unsubscribe(broker: MessageBroker): void;
12
- private messageEventHandler;
13
- }
14
- export default SecondLifeMessagingListener;
1
+ import IMessageListener from "./IMessageListener";
2
+ import MessageBroker from "./MessageBroker";
3
+ import EventEmitter from "eventemitter3";
4
+ declare class SecondLifeMessagingListener extends EventEmitter implements IMessageListener {
5
+ id: string;
6
+ senderId: string;
7
+ socket: any;
8
+ constructor(senderId: string, socket: any);
9
+ subscribe(broker: MessageBroker): void;
10
+ unsubscribe(broker: MessageBroker): void;
11
+ private messageEventHandler;
12
+ }
13
+ export default SecondLifeMessagingListener;