diff --git a/win32/PartySample/PartySampleNetworkCommon/lib/NetworkManager.cpp b/win32/PartySample/PartySampleNetworkCommon/lib/NetworkManager.cpp index 9b3c4a6..5d2fda2 100644 --- a/win32/PartySample/PartySampleNetworkCommon/lib/NetworkManager.cpp +++ b/win32/PartySample/PartySampleNetworkCommon/lib/NetworkManager.cpp @@ -350,6 +350,8 @@ NetworkManager::CreateChatControlIfNecessary() nullptr ); + m_localChatControl->SetTranslationOptions(Party::PartySpeechToSpeechTranslationOptions::TranslateToLocalLanguage, 0, nullptr, nullptr); + if (PARTY_FAILED(err)) { DEBUGLOG("SetTextChatOptions failed: %s\n", GetErrorMessage(err)); diff --git a/win32/PartySample/dll/App.cpp b/win32/PartySample/dll/App.cpp index f82249f..3fb8de6 100644 --- a/win32/PartySample/dll/App.cpp +++ b/win32/PartySample/dll/App.cpp @@ -37,6 +37,72 @@ AppThread() } } +#include +#include + +// A function to copy text to the clipboard +bool CopyTextToClipboard(const char* text) +{ + // Get the length of the text + size_t len = strlen(text); + + // Allocate a global memory object for the text + HGLOBAL hglb = GlobalAlloc(GMEM_MOVEABLE, (len + 1) * sizeof(char)); + if (hglb == NULL) + return false; + + // Lock the handle and copy the text to the buffer + char* buffer = (char*)GlobalLock(hglb); + memcpy(buffer, text, len * sizeof(char)); + buffer[len] = '\0'; // null terminator + GlobalUnlock(hglb); + + // Open the clipboard and empty it + if (!OpenClipboard(NULL)) + return false; + EmptyClipboard(); + + // Set the text as the clipboard data + if (SetClipboardData(CF_TEXT, hglb) == NULL) + return false; + + // Close the clipboard + CloseClipboard(); + + // Success + return true; +} + +// A function to paste text from the clipboard +bool PasteTextFromClipboard(char* text, int size) +{ + // Open the clipboard + if (!OpenClipboard(NULL)) + return false; + + // Get the clipboard data as text + HGLOBAL hglb = GetClipboardData(CF_TEXT); + if (hglb == NULL) + return false; + + // Lock the handle and get the text pointer + char* buffer = (char*)GlobalLock(hglb); + if (buffer == NULL) + return false; + + // Copy the text to the output parameter + //(buffer, text, (int)size - 1); + strcpy_s(text, size, buffer); + //text[size - 1] = '\0'; // null terminator + GlobalUnlock(hglb); + + // Close the clipboard + CloseClipboard(); + + // Success + return true; +} + __declspec(dllexport) void __stdcall @@ -104,7 +170,8 @@ __declspec(dllexport) void __stdcall PartySampleApp_CreateAndJoinPartyNetwork( - const char* partyNetworkRoomId + const char* partyNetworkRoomId, + const char* lang ) { std::lock_guard g_appLock(g_appMutex); @@ -141,6 +208,8 @@ PartySampleApp_CreateAndJoinPartyNetwork( networkDescriptor, OnSetNetworkDescriptorCompleted); + CopyTextToClipboard(networkDescriptor.c_str()); + g_activePartyNetworkRoomId = roomId; g_joinNetworkInProgress = false; }; @@ -156,6 +225,8 @@ PartySampleApp_CreateAndJoinPartyNetwork( g_joinNetworkInProgress = false; }; + PartySample::Managers::Get()->SetLanguageCode(lang, "lang"); + PartySample::Managers::Get()->CreateAndConnectToNetwork( partyNetworkRoomId, OnCreatePartyNetworkSucceeded, @@ -166,7 +237,8 @@ __declspec(dllexport) void __stdcall PartySampleApp_JoinPartyNetwork( - const char* partyNetworkRoomId + const char* partyNetworkRoomId, + const char* lang ) { std::lock_guard g_appLock(g_appMutex); @@ -187,39 +259,46 @@ PartySampleApp_JoinPartyNetwork( // capture the room id so it can be logged later in the async callbacks const std::string roomId = partyNetworkRoomId; + const std::string language = lang; - auto OnDescriptorFetched = [roomId](std::string networkDescriptor) - { - QueueLog("Network", "Found network descriptor for \"%s\": \"%s\"", roomId.c_str(), networkDescriptor.c_str()); + //auto OnDescriptorFetched = [roomId, language](std::string networkDescriptor) + //{ + char buffer[512]{ '\0' }; - auto OnJoinPartyNetworkSucceeded = [roomId]() - { - QueueLog("Network", "PartyNetwork \"%s\" joined!", roomId.c_str()); + PasteTextFromClipboard(buffer, 512); - g_activePartyNetworkRoomId = roomId; - g_joinNetworkInProgress = false; - }; + QueueLog("Network", "Found network descriptor for \"%s\": \"%s\"", roomId.c_str(), buffer); - auto OnJoinPartyNetworkFailed = [roomId](PartyError error) - { - QueueLog( - "Network", - "Failed to join PartyNetwork for \"%s\"! err=0x%08x \"%s\"", - roomId.c_str(), - error, - GetPartyErrorMessage(error)); - - g_joinNetworkInProgress = false; - }; + auto OnJoinPartyNetworkSucceeded = [roomId]() + { + QueueLog("Network", "PartyNetwork \"%s\" joined!", roomId.c_str()); - PartySample::Managers::Get()->ConnectToNetwork( + g_activePartyNetworkRoomId = roomId; + g_joinNetworkInProgress = false; + }; + + auto OnJoinPartyNetworkFailed = [roomId](PartyError error) + { + QueueLog( + "Network", + "Failed to join PartyNetwork for \"%s\"! err=0x%08x \"%s\"", roomId.c_str(), - networkDescriptor.c_str(), - OnJoinPartyNetworkSucceeded, - OnJoinPartyNetworkFailed); + error, + GetPartyErrorMessage(error)); + + g_joinNetworkInProgress = false; }; - PartySample::Managers::Get()->GetDescriptor(partyNetworkRoomId, OnDescriptorFetched); + PartySample::Managers::Get()->SetLanguageCode(language.c_str(), "lang"); + + PartySample::Managers::Get()->ConnectToNetwork( + roomId.c_str(), + buffer, + OnJoinPartyNetworkSucceeded, + OnJoinPartyNetworkFailed); + //}; + + //PartySample::Managers::Get()->GetDescriptor(partyNetworkRoomId, OnDescriptorFetched); } __declspec(dllexport) diff --git a/win32/PartySample/dll/App.h b/win32/PartySample/dll/App.h index 5d403fe..72bde3b 100644 --- a/win32/PartySample/dll/App.h +++ b/win32/PartySample/dll/App.h @@ -33,14 +33,16 @@ extern "C" void __stdcall PartySampleApp_CreateAndJoinPartyNetwork( - const char* partyNetworkRoomId + const char* partyNetworkRoomId, + const char* language ); __declspec(dllexport) void __stdcall PartySampleApp_JoinPartyNetwork( - const char* partyNetworkRoomId + const char* partyNetworkRoomId, + const char* language ); __declspec(dllexport) diff --git a/win32/PartySample/dll/PartySampleApp.vcxproj b/win32/PartySample/dll/PartySampleApp.vcxproj index 246ddbc..b516b66 100644 --- a/win32/PartySample/dll/PartySampleApp.vcxproj +++ b/win32/PartySample/dll/PartySampleApp.vcxproj @@ -231,12 +231,12 @@ - + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - + \ No newline at end of file diff --git a/win32/PartySample/dll/PartySampleNetworkCommon.vcxproj b/win32/PartySample/dll/PartySampleNetworkCommon.vcxproj index 5581e25..73ee053 100644 --- a/win32/PartySample/dll/PartySampleNetworkCommon.vcxproj +++ b/win32/PartySample/dll/PartySampleNetworkCommon.vcxproj @@ -40,6 +40,9 @@ Create + + + 16.0 Win32Proj @@ -74,11 +77,13 @@ v142 true Unicode + true + @@ -206,13 +211,10 @@ - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - + \ No newline at end of file diff --git a/win32/PartySample/dll/PartySampleNetworkCommon.vcxproj.filters b/win32/PartySample/dll/PartySampleNetworkCommon.vcxproj.filters index 2678db2..c402eb1 100644 --- a/win32/PartySample/dll/PartySampleNetworkCommon.vcxproj.filters +++ b/win32/PartySample/dll/PartySampleNetworkCommon.vcxproj.filters @@ -1,30 +1,15 @@  - - inc - - - inc - - - inc - - - inc - - - inc - - - inc - - - inc - - - lib - + + + + + + + + + @@ -35,23 +20,15 @@ - - lib - - - lib - - - lib - - - lib - - - lib - - - lib - + + + + + + + + + + \ No newline at end of file diff --git a/win32/PartySample/dll/packages.config b/win32/PartySample/dll/packages.config index f851f13..daf10e5 100644 --- a/win32/PartySample/dll/packages.config +++ b/win32/PartySample/dll/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file diff --git a/win32/PartySample/gui/PartySamplePage.xaml b/win32/PartySample/gui/PartySamplePage.xaml index f7262c6..9435451 100644 --- a/win32/PartySample/gui/PartySamplePage.xaml +++ b/win32/PartySample/gui/PartySamplePage.xaml @@ -31,7 +31,8 @@ Room_3 - English (United States) + en-us + fr-fr diff --git a/win32/PartySample/gui/PartySamplePage.xaml.cs b/win32/PartySample/gui/PartySamplePage.xaml.cs index 1e94024..f0c8fe4 100644 --- a/win32/PartySample/gui/PartySamplePage.xaml.cs +++ b/win32/PartySample/gui/PartySamplePage.xaml.cs @@ -333,16 +333,22 @@ private void JoinButton_Click(object sender, RoutedEventArgs e) { ComboBoxItem selectedRoom = (ComboBoxItem)this.RoomDropDown.SelectedItem; string roomId = selectedRoom.Content.ToString(); + ComboBoxItem lang = (ComboBoxItem)this.LanguageDropDown.SelectedItem; + string language = lang.Content.ToString(); + LogNewMessage("Setting", $"Language: \"{language}\"."); LogNewMessage("Network", $"Joining \"{roomId}\" PartyNetwork..."); - PartySampleApp_JoinPartyNetwork(roomId); + PartySampleApp_JoinPartyNetwork(roomId, language); } private void CreateButton_Click(object sender, RoutedEventArgs e) { ComboBoxItem selectedRoom = (ComboBoxItem)this.RoomDropDown.SelectedItem; string roomId = selectedRoom.Content.ToString(); + ComboBoxItem lang = (ComboBoxItem)this.LanguageDropDown.SelectedItem; + string language = lang.Content.ToString(); + LogNewMessage("Setting",$"Language: \"{language}\"."); LogNewMessage("Network", $"Creating \"{roomId}\" PartyNetwork..."); - PartySampleApp_CreateAndJoinPartyNetwork(roomId); + PartySampleApp_CreateAndJoinPartyNetwork(roomId, language); } private void LeaveButton_Click(object sender, RoutedEventArgs e) @@ -376,10 +382,10 @@ private static extern void PartySampleApp_Initialize( private static extern void PartySampleApp_PollLogQueue(LogCallback logCallback); [DllImport("PartySampleApp.dll", CallingConvention = CallingConvention.StdCall)] - private static extern void PartySampleApp_CreateAndJoinPartyNetwork(string partyNetworkRoomId); + private static extern void PartySampleApp_CreateAndJoinPartyNetwork(string partyNetworkRoomId, string language); [DllImport("PartySampleApp.dll", CallingConvention = CallingConvention.StdCall)] - private static extern void PartySampleApp_JoinPartyNetwork(string partyNetworkRoomId); + private static extern void PartySampleApp_JoinPartyNetwork(string partyNetworkRoomId, string language); [DllImport("PartySampleApp.dll", CallingConvention = CallingConvention.StdCall)] private static extern void PartySampleApp_LeavePartyNetwork();