summaryrefslogtreecommitdiff
path: root/protocols/Discord/src/voice_client.cpp
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2024-06-07 17:05:32 +0300
committerGeorge Hazan <george.hazan@gmail.com>2024-06-07 17:05:32 +0300
commit2c82b5388e21bb6b47805f44f604b5de1d1e5f33 (patch)
tree230830391d3ce3da6fdd35f68e07967c329e6409 /protocols/Discord/src/voice_client.cpp
parent9e042dab8017eb97052f1627df83d42c365a61d2 (diff)
Discord: opus.dll is added
Diffstat (limited to 'protocols/Discord/src/voice_client.cpp')
-rw-r--r--protocols/Discord/src/voice_client.cpp63
1 files changed, 63 insertions, 0 deletions
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 <http://www.gnu.org/licenses/>.
#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);
+
}