working poc

This commit is contained in:
2025-11-28 13:47:17 -05:00
parent 4dea48c1e2
commit 7b6b278e90
25 changed files with 1018 additions and 168 deletions

View File

@@ -0,0 +1,48 @@
import type { ICandidateMessage, IAnswerMessage, IOfferMessage, IMessage } from "./messaging/IMessage";
import { MessageKind } from "./messaging/MessageKind";
import type { ISignalingClient } from "./interfaces/ISignalingClient";
export default class SignalingServer implements ISignalingClient {
private readonly _webSocket: WebSocket;
constructor(webSocket: WebSocket) {
this._webSocket = webSocket;
}
public on<T>(kind: MessageKind, callback: (message: IMessage<T>) => Promise<void>): void {
this._webSocket.addEventListener('message', (event) => {
const message = JSON.parse(event.data) as IMessage<T>;
if (message.type === kind) {
callback(message);
}
});
}
public async sendOffer(offer: RTCSessionDescriptionInit): Promise<void> {
const message: IOfferMessage = {
type: MessageKind.Offer,
payload: offer
};
this._webSocket.send(JSON.stringify(message));
}
public async sendAnswer(answer: RTCSessionDescriptionInit): Promise<void> {
const message: IAnswerMessage = {
type: MessageKind.Answer,
payload: answer
};
this._webSocket.send(JSON.stringify(message));
}
public async sendCandidate(candidate: RTCIceCandidateInit): Promise<void> {
const message: ICandidateMessage = {
type: MessageKind.Candidate,
payload: candidate
};
this._webSocket.send(JSON.stringify(message));
}
}