diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-07-16 23:04:09 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-07-16 23:04:09 +1000 |
commit | 848b11399f2e34d7f1e0523e214287bfdcc5816c (patch) | |
tree | a5ce3b996a7e02a18ee5660832f7b0b5643cd2a7 /source/client/StarClientApplication.cpp | |
parent | da098c7b4812408d1316b14b3b3f46d2ec7dce04 (diff) |
Get SE-compatible voice transmission working
Diffstat (limited to 'source/client/StarClientApplication.cpp')
-rw-r--r-- | source/client/StarClientApplication.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/source/client/StarClientApplication.cpp b/source/client/StarClientApplication.cpp index 8dfd110..f7ab21b 100644 --- a/source/client/StarClientApplication.cpp +++ b/source/client/StarClientApplication.cpp @@ -16,7 +16,7 @@ #include "StarRootLoader.hpp" #include "StarInput.hpp" #include "StarVoice.hpp" - +#include "StarCurve25519.hpp" #include "StarInterfaceLuaBindings.hpp" #include "StarInputLuaBindings.hpp" @@ -855,9 +855,8 @@ void ClientApplication::updateRunning() { m_voice->setInput(m_input->bindHeld("opensb", "pushToTalk")); DataStreamBuffer voiceData; voiceData.setByteOrder(ByteOrder::LittleEndian); - voiceData.writeBytes(VoiceBroadcastPrefix.utf8Bytes()); + //voiceData.writeBytes(VoiceBroadcastPrefix.utf8Bytes()); transmitting with SE compat for now bool needstoSendVoice = m_voice->send(voiceData, 5000); - m_universeClient->update(); if (checkDisconnection()) @@ -881,8 +880,13 @@ void ClientApplication::updateRunning() { } if (worldClient->inWorld()) { - if (needstoSendVoice) - worldClient->sendSecretBroadcast(StringView(voiceData.ptr(), voiceData.size())); + if (needstoSendVoice) { + auto signature = Curve25519::sign(voiceData.ptr(), voiceData.size()); + std::string_view signatureView((char*)signature.data(), signature.size()); + std::string_view audioDataView(voiceData.ptr(), voiceData.size()); + auto broadcast = strf("data\0voice\0{}{}"s, signatureView, audioDataView); + worldClient->sendSecretBroadcast(broadcast, true); + } m_voice->setLocalSpeaker(worldClient->connection()); } worldClient->setInteractiveHighlightMode(isActionTaken(InterfaceAction::ShowLabels)); |