summaryrefslogtreecommitdiff
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
parent9e042dab8017eb97052f1627df83d42c365a61d2 (diff)
Discord: opus.dll is added
-rw-r--r--protocols/Discord/src/stdafx.cxx4
-rw-r--r--protocols/Discord/src/stdafx.h2
-rw-r--r--protocols/Discord/src/voice_client.cpp63
-rw-r--r--tools/build_scripts/z2_PackPluginUpdater.bat2
4 files changed, 69 insertions, 2 deletions
diff --git a/protocols/Discord/src/stdafx.cxx b/protocols/Discord/src/stdafx.cxx
index 52b06cb953..18d309a1f6 100644
--- a/protocols/Discord/src/stdafx.cxx
+++ b/protocols/Discord/src/stdafx.cxx
@@ -15,4 +15,6 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "stdafx.h" \ No newline at end of file
+#include "stdafx.h"
+
+#pragma comment(lib, "opus.lib")
diff --git a/protocols/Discord/src/stdafx.h b/protocols/Discord/src/stdafx.h
index 95990b7dd2..6e11d96455 100644
--- a/protocols/Discord/src/stdafx.h
+++ b/protocols/Discord/src/stdafx.h
@@ -17,6 +17,7 @@
#include <time.h>
#include <map>
+#include <memory>
#include <vector>
#include "resource.h"
@@ -52,6 +53,7 @@
#include "../../libs/zlib/src/zlib.h"
#include "../../libs/libsodium/src/include/sodium.h"
+#include "opus/opus.h"
extern IconItem g_iconList[];
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);
+
}
diff --git a/tools/build_scripts/z2_PackPluginUpdater.bat b/tools/build_scripts/z2_PackPluginUpdater.bat
index 517cf1c939..521ce037d7 100644
--- a/tools/build_scripts/z2_PackPluginUpdater.bat
+++ b/tools/build_scripts/z2_PackPluginUpdater.bat
@@ -47,7 +47,7 @@ for /f %%a in ('dir plugins\*.dll /B /L') do (
if /I "%%a"=="CmdLine.dll" (%ZipIt% "%Arch%\Plugins\%%~na.zip" "MimCmd.exe")
if /I "%%a"=="CurrencyRates.dll" (%ZipIt% "%Arch%\Plugins\%%~na.zip" "Icons\Proto_CurrencyRates.dll" "Plugins\CurrencyRates\*.xml" "Plugins\CurrencyRates\CurrencyRatesChart.exe")
if /I "%%a"=="Dbx_mdbx.dll" (%ZipIt% "%Arch%\Plugins\%%~na.zip" "mdbx_chk.exe" "mdbx_dump.exe" "mdbx_load.exe" "Libs\libmdbx.mir")
- if /I "%%a"=="Discord.dll" (%ZipIt% "%Arch%\Plugins\%%~na.zip" "Icons\Proto_Discord.dll" "Libs\libsodium.mir")
+ if /I "%%a"=="Discord.dll" (%ZipIt% "%Arch%\Plugins\%%~na.zip" "Icons\Proto_Discord.dll" "Libs\libsodium.mir" "../../redist/x%tp%/gstreamer/opus-0.dll")
if /I "%%a"=="Dummy.dll" (%ZipIt% "%Arch%\Plugins\%%~na.zip" "Icons\Proto_Dummy.dll")
if /I "%%a"=="Facebook.dll" (%ZipIt% "%Arch%\Plugins\%%~na.zip" "Icons\Proto_Facebook.dll")
if /I "%%a"=="FavContacts.dll" (%ZipIt% "%Arch%\Plugins\%%~na.zip" "Gadgets\favcontacts.gadget")