diff options
author | George Hazan <george.hazan@gmail.com> | 2024-06-07 17:05:32 +0300 |
---|---|---|
committer | George Hazan <george.hazan@gmail.com> | 2024-06-07 17:05:32 +0300 |
commit | 2c82b5388e21bb6b47805f44f604b5de1d1e5f33 (patch) | |
tree | 230830391d3ce3da6fdd35f68e07967c329e6409 | |
parent | 9e042dab8017eb97052f1627df83d42c365a61d2 (diff) |
Discord: opus.dll is added
-rw-r--r-- | protocols/Discord/src/stdafx.cxx | 4 | ||||
-rw-r--r-- | protocols/Discord/src/stdafx.h | 2 | ||||
-rw-r--r-- | protocols/Discord/src/voice_client.cpp | 63 | ||||
-rw-r--r-- | tools/build_scripts/z2_PackPluginUpdater.bat | 2 |
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")
|