rx-player
Version:
Canal+ HTML5 Video Player
48 lines (43 loc) • 1.51 kB
text/typescript
import {
CoreMessageType,
type ICoreMessage,
type IMessageReceiverCallback,
} from "../../core/types";
import log from "../../log";
import noop from "../../utils/noop";
import queueMicrotaskUtil from "../../utils/queue_microtask";
import type { IMainThreadMessage } from "../types";
import CoreInterface from "./base";
export class MonoThreadCoreInterface extends CoreInterface {
private _currentCoreListener: IMessageReceiverCallback;
constructor() {
super();
this._currentCoreListener = noop;
}
public sendMessage(msg: IMainThreadMessage) {
log.debug("M-->C", "Sending message", { name: msg.type });
queueMicrotaskUtil(() => {
// NOTE: We don't clone for performance reasons
this._currentCoreListener({ data: msg });
});
}
public getCallbacks(): {
setCoreMessageReceiver: (handler: IMessageReceiverCallback) => void;
sendCoreMessage: (msg: ICoreMessage, transferables?: Transferable[]) => void;
} {
const setCoreMessageReceiver = (handler: IMessageReceiverCallback): void => {
this._currentCoreListener = handler;
};
const sendCoreMessage = (msg: ICoreMessage, _transferables?: Transferable[]) => {
queueMicrotaskUtil(() => {
if (msg.type !== CoreMessageType.LogMessage) {
log.debug("M<--C", "Sending message", { name: msg.type });
}
this.listeners.forEach((listener) => {
listener(msg);
});
});
};
return { setCoreMessageReceiver, sendCoreMessage };
}
}