@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.
- package/lib/CoreServices/Apps/App.d.ts +6 -6
- package/lib/CoreServices/Apps/App.js +9 -9
- package/lib/CoreServices/Apps/AppRegistry.d.ts +6 -6
- package/lib/CoreServices/Apps/AppRegistry.js +15 -15
- package/lib/CoreServices/Apps/Launcher.d.ts +5 -5
- package/lib/CoreServices/Apps/Launcher.js +9 -9
- package/lib/CoreServices/Apps/PhotonApp.d.ts +6 -6
- package/lib/CoreServices/Apps/PhotonApp.js +33 -33
- package/lib/CoreServices/Apps/PhotonAppMode.d.ts +5 -5
- package/lib/CoreServices/Apps/PhotonAppMode.js +8 -8
- package/lib/CoreServices/Apps/UserPreferences.d.ts +6 -6
- package/lib/CoreServices/Apps/UserPreferences.js +15 -15
- package/lib/CoreServices/HomeBar.d.ts +4 -4
- package/lib/CoreServices/HomeBar.js +8 -8
- package/lib/CoreServices/StatusBar/StatusBar.d.ts +9 -8
- package/lib/CoreServices/StatusBar/StatusBar.js +37 -36
- package/lib/CoreServices/StatusBar/StatusBarContentType.d.ts +5 -5
- package/lib/CoreServices/StatusBar/StatusBarContentType.js +8 -8
- package/lib/SecondLife/PhotonTool.d.ts +33 -33
- package/lib/SecondLife/PhotonTool.js +100 -100
- package/lib/SecondLife/SecondLifeDevice.d.ts +9 -9
- package/lib/SecondLife/SecondLifeDevice.js +12 -12
- package/lib/SecondLife/SecondLifeIdentity.d.ts +4 -4
- package/lib/SecondLife/SecondLifeIdentity.js +9 -9
- package/lib/SecondLife/SecondLifeProxy.d.ts +5 -5
- package/lib/SecondLife/SecondLifeProxy.js +8 -8
- package/lib/SecondLife/SecondLifeRegistry.d.ts +5 -5
- package/lib/SecondLife/SecondLifeRegistry.js +22 -22
- package/lib/Sensor/Sensor.d.ts +6 -6
- package/lib/Sensor/Sensor.js +31 -31
- package/lib/Sensor/SensorResult.d.ts +14 -14
- package/lib/Sensor/SensorResult.js +1 -1
- package/lib/SystemEvents/EventManager.d.ts +14 -14
- package/lib/SystemEvents/EventManager.js +38 -38
- package/lib/SystemEvents/LifecycleEventNames.d.ts +5 -5
- package/lib/SystemEvents/LifecycleEventNames.js +8 -8
- package/lib/SystemEvents/LifecycleEvents.d.ts +5 -7
- package/lib/SystemEvents/LifecycleEvents.js +18 -19
- package/lib/SystemMessaging/BrowserMessageListener.d.ts +10 -11
- package/lib/SystemMessaging/BrowserMessageListener.js +21 -21
- package/lib/SystemMessaging/BrowserMessagingTarget.d.ts +9 -9
- package/lib/SystemMessaging/BrowserMessagingTarget.js +13 -13
- package/lib/SystemMessaging/IMessage.d.ts +6 -6
- package/lib/SystemMessaging/IMessage.js +2 -2
- package/lib/SystemMessaging/IMessageListener.d.ts +8 -9
- package/lib/SystemMessaging/IMessageListener.js +2 -2
- package/lib/SystemMessaging/IMessagingTarget.d.ts +5 -5
- package/lib/SystemMessaging/IMessagingTarget.js +2 -2
- package/lib/SystemMessaging/MessageBroker.d.ts +30 -30
- package/lib/SystemMessaging/MessageBroker.js +147 -147
- package/lib/SystemMessaging/SecondLIfeMessagingListener.d.ts +13 -14
- package/lib/SystemMessaging/SecondLIfeMessagingListener.js +28 -28
- package/lib/SystemMessaging/SecondLifeMessagingTarget.d.ts +9 -9
- package/lib/SystemMessaging/SecondLifeMessagingTarget.js +13 -13
- package/lib/SystemMessaging/VoidMessagingTarget.d.ts +7 -7
- package/lib/SystemMessaging/VoidMessagingTarget.js +12 -12
- package/lib/index.d.ts +22 -22
- package/lib/index.js +46 -46
- package/package.json +29 -29
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
|
4
|
-
const
|
|
5
|
-
class BrowserMessageListener extends
|
|
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
|
-
|
|
2
|
-
import MessageBroker from "./MessageBroker";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
-
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
socket: any;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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;
|