Add typed messaging

This commit is contained in:
hensm
2020-02-18 07:37:20 +00:00
parent 652fd21f77
commit 2eeaff4c15
19 changed files with 431 additions and 227 deletions

View File

@@ -49,7 +49,7 @@ const _stopCallbacks = new WeakMap<Session, CallbacksMap>();
export default class Session {
public media: Media[];
public namespaces: Array<{ name: "string" }>;
public namespaces: Array<{ name: string }>;
public senderApps: SenderApplication[];
public status: SessionStatus;
public statusText: string | null;
@@ -91,13 +91,14 @@ export default class Session {
, appId
, sessionId
}
, _id: _id.get(this)
, _id: _id.get(this)!
});
}
const listenerObject = onMessage(message => {
// Filter other session messages
if (message._id && message._id !== _id.get(this)) {
if ((message as any)._id
&& (message as any)._id !== _id.get(this)) {
return;
}
@@ -164,9 +165,7 @@ export default class Session {
case "shim:/session/impl_addMessageListener": {
const { namespace, data }
: { namespace: string, data: string } = message.data;
const { namespace, data } = message.data;
const messageListeners = _messageListeners
.get(this)?.get(namespace);
@@ -180,9 +179,7 @@ export default class Session {
}
case "shim:/session/impl_sendMessage": {
const { messageId, error }
: { messageId: string, error: boolean } = message.data;
const { messageId, error } = message.data;
const [ successCallback, errorCallback ] =
_sendMessageCallbacks
.get(this)?.get(messageId) ?? [];
@@ -286,7 +283,7 @@ export default class Session {
sendMessageResponse({
subject: "bridge:/session/impl_addMessageListener"
, data: { namespace }
, _id: _id.get(this)
, _id: _id.get(this)!
});
}
@@ -303,7 +300,7 @@ export default class Session {
sendMessageResponse({
subject: "bridge:/session/impl_leave"
, data: { id }
, _id: _id.get(this)
, _id: _id.get(this)!
});
_leaveCallbacks.get(this)?.set(id, [
@@ -411,7 +408,7 @@ export default class Session {
, message
, messageId
}
, _id: _id.get(this)
, _id: _id.get(this)!
});
_sendMessageCallbacks.get(this)?.set(messageId, [
@@ -430,7 +427,7 @@ export default class Session {
sendMessageResponse({
subject: "bridge:/session/impl_setReceiverMuted"
, data: { muted, volumeId }
, _id: _id.get(this)
, _id: _id.get(this)!
});
_setReceiverMutedCallbacks.get(this)?.set(volumeId, [
@@ -449,7 +446,7 @@ export default class Session {
sendMessageResponse({
subject: "bridge:/session/impl_setReceiverVolumeLevel"
, data: { newLevel, volumeId }
, _id: _id.get(this)
, _id: _id.get(this)!
});
_setReceiverVolumeLevelCallbacks.get(this)?.set(volumeId, [
@@ -467,7 +464,7 @@ export default class Session {
sendMessageResponse({
subject: "bridge:/session/impl_stop"
, data: { stopId }
, _id: _id.get(this)
, _id: _id.get(this)!
});
_stopCallbacks.get(this)?.set(stopId, [

View File

@@ -44,7 +44,7 @@ type ErrorCallback = (err: Error_) => void;
let apiConfig: ApiConfig;
const receiverList: Receiver[] = [];
const receiverList: Array<{ id: string }> = [];
const sessionList: Session[] = [];
const receiverActionListeners = new Set<ReceiverActionListener>();

View File

@@ -76,11 +76,12 @@ export default class Media {
, mediaSessionId
, _internalSessionId
}
, _id: _id.get(this)
, _id: _id.get(this)!
});
onMessage(message => {
if (!message._id || message._id !== _id.get(this)) {
if ((message as any)._id
&& (message as any)._id !== _id.get(this)) {
return;
}
@@ -95,7 +96,7 @@ export default class Media {
this.playerState = status.playerState;
this.repeatMode = status.repeatMode;
if (status.volume) {
if (status._volumeLevel && status._volumeMuted) {
this.volume = new Volume(
status._volumeLevel
, status._volumeMuted);
@@ -120,9 +121,7 @@ export default class Media {
}
case "shim:/media/sendMediaMessageResponse": {
const { messageId, error }
: { messageId: string, error: any } = message.data;
const { messageId, error } = message.data;
const [ successCallback, errorCallback ]
= _sendMediaMessageCallbacks
.get(this)?.get(messageId) ?? [];
@@ -323,7 +322,7 @@ export default class Media {
message
, messageId
}
, _id: _id.get(this)
, _id: _id.get(this)!
});
}
}

View File

@@ -1,9 +1,10 @@
"use strict";
import { loadScript } from "../lib/utils";
import { Message } from "../types";
import { onMessageResponse, sendMessage } from "./eventMessageChannel";
import messaging, { Message } from "../lib/messaging";
const { isFramework }
: { isFramework: boolean } = (window as any);
@@ -18,7 +19,7 @@ if (isFramework) {
// Message port to background script
export const backgroundPort = browser.runtime.connect({ name: "shim" });
export const backgroundPort = messaging.connect({ name: "shim" });
const forwardToShim = (message: Message) => sendMessage(message);
const forwardToMain = (message: Message) => backgroundPort.postMessage(message);

View File

@@ -1,6 +1,6 @@
"use strict";
import { Message } from "../types";
import { Message } from "../lib/messaging";
type ListenerFunc = (message: Message) => void;

View File

@@ -1,9 +1,9 @@
"use strict";
import * as cast from "./cast";
import { Message } from "../lib/messaging";
import { BridgeInfo } from "../lib/bridge";
import { Message } from "../types";
import { onMessage
, onMessageResponse