summary refs log tree commit diff
path: root/webrtc/src/util
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--webrtc/src/util/Constants.ts26
-rw-r--r--webrtc/src/util/Heartbeat.ts23
-rw-r--r--webrtc/src/util/MediaServer.ts51
-rw-r--r--webrtc/src/util/index.ts3
4 files changed, 79 insertions, 24 deletions
diff --git a/webrtc/src/util/Constants.ts b/webrtc/src/util/Constants.ts
new file mode 100644

index 00000000..64d78e22 --- /dev/null +++ b/webrtc/src/util/Constants.ts
@@ -0,0 +1,26 @@ +export enum VoiceStatus { + CONNECTED = 0, + CONNECTING = 1, + AUTHENTICATING = 2, + RECONNECTING = 3, + DISCONNECTED = 4 +} + +export enum VoiceOPCodes { + IDENTIFY = 0, + SELECT_PROTOCOL = 1, + READY = 2, + HEARTBEAT = 3, + SELECT_PROTOCOL_ACK = 4, + SPEAKING = 5, + HEARTBEAT_ACK = 6, + RESUME = 7, + HELLO = 8, + RESUMED = 9, + VIDEO = 12, + CLIENT_DISCONNECT = 13, + SESSION_UPDATE = 14, + MEDIA_SINK_WANTS = 15, + VOICE_BACKEND_VERSION = 16, + CHANNEL_OPTIONS_UPDATE = 17 +} \ No newline at end of file diff --git a/webrtc/src/util/Heartbeat.ts b/webrtc/src/util/Heartbeat.ts deleted file mode 100644
index 8c5e3a7a..00000000 --- a/webrtc/src/util/Heartbeat.ts +++ /dev/null
@@ -1,23 +0,0 @@ -import { WebSocket, CLOSECODES } from "@fosscord/gateway"; -import { VoiceOPCodes } from "@fosscord/util"; - -export async function setHeartbeat(socket: WebSocket, nonce?: Number) { - if (socket.heartbeatTimeout) clearTimeout(socket.heartbeatTimeout); - - socket.heartbeatTimeout = setTimeout(() => { - return socket.close(CLOSECODES.Session_timed_out); - }, 1000 * 45); - - if (!nonce) { - socket.send(JSON.stringify({ - op: VoiceOPCodes.HELLO, - d: { - v: 5, - heartbeat_interval: 13750, - } - })); - } - else { - socket.send(JSON.stringify({ op: VoiceOPCodes.HEARTBEAT_ACK, d: nonce })); - } -} \ No newline at end of file diff --git a/webrtc/src/util/MediaServer.ts b/webrtc/src/util/MediaServer.ts new file mode 100644
index 00000000..93230c91 --- /dev/null +++ b/webrtc/src/util/MediaServer.ts
@@ -0,0 +1,51 @@ +import { WebSocket } from "@fosscord/gateway"; +import MediaServer, { IncomingStream, OutgoingStream, Transport } from "medooze-media-server"; +import SemanticSDP from "semantic-sdp"; +MediaServer.enableLog(true); + +export const PublicIP = process.env.PUBLIC_IP || "127.0.0.1"; + +try { + const range = process.env.WEBRTC_PORT_RANGE || "4000"; + var ports = range.split("-"); + const min = Number(ports[0]); + const max = Number(ports[1]); + + MediaServer.setPortRange(min, max); +} catch (error) { + console.error("Invalid env var: WEBRTC_PORT_RANGE", process.env.WEBRTC_PORT_RANGE, error); + process.exit(1); +} + +export const endpoint = MediaServer.createEndpoint(PublicIP); + +export const channels = new Map<string, Set<Client>>(); + +export interface Client { + transport?: Transport; + websocket: WebSocket; + out: { + stream?: OutgoingStream; + tracks: Map< + string, + { + audio_ssrc: number; + video_ssrc: number; + rtx_ssrc: number; + } + >; + }; + in: { + stream?: IncomingStream; + audio_ssrc: number; + video_ssrc: number; + rtx_ssrc: number; + }; + sdp: SemanticSDP.SDPInfo; + channel_id: string; +} + +export function getClients(channel_id: string) { + if (!channels.has(channel_id)) channels.set(channel_id, new Set()); + return channels.get(channel_id)!; +} \ No newline at end of file diff --git a/webrtc/src/util/index.ts b/webrtc/src/util/index.ts
index e8557452..2e09bc48 100644 --- a/webrtc/src/util/index.ts +++ b/webrtc/src/util/index.ts
@@ -1 +1,2 @@ -export * from "./Heartbeat" \ No newline at end of file +export * from "./Constants"; +export * from "./MediaServer"; \ No newline at end of file