summary refs log tree commit diff
diff options
context:
space:
mode:
authorMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2022-01-16 03:35:30 +1100
committerMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2022-01-16 03:35:30 +1100
commitaa0357e06015a900aa6757ab9b0eef968eb02052 (patch)
tree7e9ad9197512fd9ff9edbed02076d2eb03375ad9
parentboilerplate stuff (diff)
downloadserver-aa0357e06015a900aa6757ab9b0eef968eb02052.tar.xz
messing around with things I don't understand
-rw-r--r--webrtc/src/Server.ts70
-rw-r--r--webrtc/src/opcodes/Connect.ts3
-rw-r--r--webrtc/src/opcodes/Heartbeat.ts3
-rw-r--r--webrtc/src/opcodes/Identify.ts7
-rw-r--r--webrtc/src/opcodes/Resume.ts3
-rw-r--r--webrtc/src/opcodes/SelectProtocol.ts5
-rw-r--r--webrtc/src/opcodes/Speaking.ts3
7 files changed, 81 insertions, 13 deletions
diff --git a/webrtc/src/Server.ts b/webrtc/src/Server.ts

index 06a36df9..cdda10ec 100644 --- a/webrtc/src/Server.ts +++ b/webrtc/src/Server.ts
@@ -1,15 +1,19 @@ import { Server as WebSocketServer } from "ws"; -import { WebSocket, CLOSECODES, Payload, OPCODES } from "@fosscord/gateway"; +import { WebSocket, Payload, } from "@fosscord/gateway"; import { Config, initDatabase } from "@fosscord/util"; import OPCodeHandlers from "./opcodes"; -import { setHeartbeat } from "./util" -import mediasoup from "mediasoup"; +import { setHeartbeat } from "./util"; +import * as mediasoup from "mediasoup"; +import { types as MediasoupTypes } from "mediasoup"; var port = Number(process.env.PORT); if (isNaN(port)) port = 3004; export class Server { public ws: WebSocketServer; + public mediasoupWorkers: MediasoupTypes.Worker[] = []; + public mediasoupRouters: MediasoupTypes.Router[] = []; + public mediasoupTransports: MediasoupTypes.Transport[] = []; constructor() { this.ws = new WebSocketServer({ @@ -23,9 +27,9 @@ export class Server { const payload: Payload = JSON.parse(message); if (OPCodeHandlers[payload.op]) - await OPCodeHandlers[payload.op](socket, payload); + await OPCodeHandlers[payload.op].call(this, socket, payload); else - console.error(`Unimplemented`, payload) + console.error(`Unimplemented`, payload); }); }); } @@ -34,7 +38,63 @@ export class Server { // @ts-ignore await initDatabase(); await Config.init(); + await this.createWorkers(); console.log("[DB] connected"); console.log(`[WebRTC] online on 0.0.0.0:${port}`); } + + async createWorkers(): Promise<void> { + const numWorkers = 1; + for (let i = 0; i < numWorkers; i++) { + const worker = await mediasoup.createWorker(); + if (!worker) return; + + worker.on("died", () => { + console.error("mediasoup worker died"); + }); + + worker.observer.on("newrouter", async (router: MediasoupTypes.Router) => { + console.log("new router"); + + this.mediasoupRouters.push(router); + + router.observer.on("newtransport", (transport: MediasoupTypes.Transport) => { + console.log("new transport"); + + this.mediasoupTransports.push(transport); + }) + + await router.createWebRtcTransport({ + listenIps: [{ ip: "127.0.0.1" }], + enableUdp: true, + enableTcp: true, + preferUdp: true + }); + }); + + await worker.createRouter({ + mediaCodecs: [ + { + kind: "audio", + mimeType: "audio/opus", + clockRate: 48000, + channels: 2 + }, + { + kind: "video", + mimeType: "video/H264", + clockRate: 90000, + parameters: + { + "packetization-mode": 1, + "profile-level-id": "42e01f", + "level-asymmetry-allowed": 1 + } + } + ] + }); + + this.mediasoupWorkers.push(worker); + } + } } diff --git a/webrtc/src/opcodes/Connect.ts b/webrtc/src/opcodes/Connect.ts
index 5cc66506..5db11638 100644 --- a/webrtc/src/opcodes/Connect.ts +++ b/webrtc/src/opcodes/Connect.ts
@@ -1,5 +1,6 @@ import { WebSocket } from "@fosscord/gateway"; import { Payload } from "./index"; +import { Server } from "../Server" -export async function onConnect(socket: WebSocket, data: Payload) { +export async function onConnect(this: Server, socket: WebSocket, data: Payload) { } \ No newline at end of file diff --git a/webrtc/src/opcodes/Heartbeat.ts b/webrtc/src/opcodes/Heartbeat.ts
index 04150e36..06d6bcb1 100644 --- a/webrtc/src/opcodes/Heartbeat.ts +++ b/webrtc/src/opcodes/Heartbeat.ts
@@ -1,7 +1,8 @@ import { WebSocket } from "@fosscord/gateway"; import { Payload } from "./index"; import { setHeartbeat } from "./../util"; +import { Server } from "../Server" -export async function onHeartbeat(socket: WebSocket, data: Payload) { +export async function onHeartbeat(this: Server, socket: WebSocket, data: Payload) { await setHeartbeat(socket); } \ No newline at end of file diff --git a/webrtc/src/opcodes/Identify.ts b/webrtc/src/opcodes/Identify.ts
index 2026d7c9..6043a460 100644 --- a/webrtc/src/opcodes/Identify.ts +++ b/webrtc/src/opcodes/Identify.ts
@@ -1,14 +1,17 @@ import { WebSocket } from "@fosscord/gateway"; import { Payload } from "./index" import { VoiceOPCodes } from "@fosscord/util"; +import { Server } from "../Server" -export async function onIdentify(socket: WebSocket, data: Payload) { +export async function onIdentify(this: Server, socket: WebSocket, data: Payload) { socket.send(JSON.stringify({ op: VoiceOPCodes.READY, d: { ssrc: 1, ip: "127.0.0.1", - port: 3005, + + //@ts-ignore + port: this.mediasoupTransports[0].iceCandidates.port, modes: [ "xsalsa20_poly1305", "xsalsa20_poly1305_suffix", diff --git a/webrtc/src/opcodes/Resume.ts b/webrtc/src/opcodes/Resume.ts
index de21eba6..dcd4f4cd 100644 --- a/webrtc/src/opcodes/Resume.ts +++ b/webrtc/src/opcodes/Resume.ts
@@ -1,5 +1,6 @@ import { WebSocket } from "@fosscord/gateway"; import { Payload } from "./index"; +import { Server } from "../Server" -export async function onResume(socket: WebSocket, data: Payload) { +export async function onResume(this: Server, socket: WebSocket, data: Payload) { } \ No newline at end of file diff --git a/webrtc/src/opcodes/SelectProtocol.ts b/webrtc/src/opcodes/SelectProtocol.ts
index f1732dd9..fcc45855 100644 --- a/webrtc/src/opcodes/SelectProtocol.ts +++ b/webrtc/src/opcodes/SelectProtocol.ts
@@ -1,15 +1,16 @@ import { WebSocket } from "@fosscord/gateway"; import { Payload } from "./index"; import { VoiceOPCodes } from "@fosscord/util"; +import { Server } from "../Server" -export async function onSelectProtocol(socket: WebSocket, data: Payload) { +export async function onSelectProtocol(this: Server, socket: WebSocket, data: Payload) { socket.send(JSON.stringify({ op: VoiceOPCodes.SESSION_DESCRIPTION, d: { video_codec: "H264", secret_key: new Array(32).fill(null).map(x => Math.random() * 256), mode: "aead_aes256_gcm_rtpsize", - media_session_id: "d8eb5c84d987c6642ec4ce72ffa97f00", + media_session_id: this.mediasoupTransports[0].id, audio_codec: "opus", } })); diff --git a/webrtc/src/opcodes/Speaking.ts b/webrtc/src/opcodes/Speaking.ts
index 14f86b3c..861a7c3d 100644 --- a/webrtc/src/opcodes/Speaking.ts +++ b/webrtc/src/opcodes/Speaking.ts
@@ -1,6 +1,7 @@ import { WebSocket } from "@fosscord/gateway"; import { Payload } from "./index" import { VoiceOPCodes } from "@fosscord/util"; +import { Server } from "../Server" -export async function onSpeaking(socket: WebSocket, data: Payload) { +export async function onSpeaking(this: Server, socket: WebSocket, data: Payload) { } \ No newline at end of file