From 2c82b5388e21bb6b47805f44f604b5de1d1e5f33 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Fri, 7 Jun 2024 17:05:32 +0300 Subject: Discord: opus.dll is added --- protocols/Discord/src/voice_client.cpp | 63 ++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'protocols/Discord/src/voice_client.cpp') diff --git a/protocols/Discord/src/voice_client.cpp b/protocols/Discord/src/voice_client.cpp index e20f6c95a9..e849ef0660 100644 --- a/protocols/Discord/src/voice_client.cpp +++ b/protocols/Discord/src/voice_client.cpp @@ -17,6 +17,40 @@ along with this program. If not, see . #include "stdafx.h" +struct CDiscordVoiceClient +{ + CDiscordVoiceCall *m_config; + + OpusEncoder *m_encoder; + OpusRepacketizer *m_repacketizer; + + bool m_terminating = false; + + CDiscordVoiceClient(CDiscordVoiceCall *pCall); + ~CDiscordVoiceClient(); +}; + +CDiscordVoiceClient::CDiscordVoiceClient(CDiscordVoiceCall *pCall) : + m_config(pCall) +{ + int iError = 0; + m_encoder = opus_encoder_create(48000, 2, OPUS_APPLICATION_VOIP, &iError); + + m_repacketizer = opus_repacketizer_create(); +} + +CDiscordVoiceClient::~CDiscordVoiceClient() +{ + if (m_encoder) + opus_encoder_destroy(m_encoder); + + if (m_repacketizer) + opus_repacketizer_destroy(m_repacketizer); +} + +////////////////////////////////////////////////////////////////////////////////////////// +// Module entry point + void CDiscordProto::VoiceClientThread(void *param) { auto *pCall = (CDiscordVoiceCall *)param; @@ -24,4 +58,33 @@ void CDiscordProto::VoiceClientThread(void *param) int nLoops = 0; time_t lastLoopTime = time(0); + + CDiscordVoiceClient vc(pCall); + do { + time_t currTime = time(0); + if (currTime - lastLoopTime > 3) + nLoops = 0; + + nLoops++; + if (nLoops > 5) { + debugLogA("Too many connection attempts, breaking websocket"); + break; + } + + lastLoopTime = currTime; + if (!vc.m_terminating) { + MHttpHeaders hdrs; + hdrs.AddHeader("Origin", "https://discord.com"); + + NLHR_PTR pReply(WebSocket_Connect(m_hGatewayNetlibUser, pCall->szEndpoint + "/?encoding=json&v=8", &hdrs)); + if (pReply == nullptr) { + debugLogA("Gateway connection failed, exiting"); + return; + } + + SleepEx(5000, TRUE); + } + + } while (!vc.m_terminating); + } -- cgit v1.2.3