diff --git a/modules/examples/ChatClientVoice/src/ChatClientVoice.cpp b/modules/examples/ChatClientVoice/src/ChatClientVoice.cpp index df93fe1..80a2be3 100644 --- a/modules/examples/ChatClientVoice/src/ChatClientVoice.cpp +++ b/modules/examples/ChatClientVoice/src/ChatClientVoice.cpp @@ -27,8 +27,8 @@ ChatClientVoice::~ChatClientVoice() { im->releaseContext(ImGui::GetCurrentContext()); - if(buf) - delete [] buf; + //if(buf) + // delete [] buf; } } @@ -59,7 +59,7 @@ void ChatClientVoice::onLoad() { SDL_GetAudioStreamFormat(mic, &spec, NULL); speaker = SDL_OpenAudioDeviceStream(SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, &spec, NULL, NULL); - buf = new unsigned char[len]; + //buf = new unsigned char[len]; } @@ -67,6 +67,8 @@ void ChatClientVoice::run() { static ClientModule* cm; { cm = (ClientModule*) moduleInstances[ClientModule()]; } + static unsigned char buf[10 * 1024]; + if(!cm) { std::cout << "No ClientModule for ChatClientVoice!\n"; std::abort(); @@ -99,10 +101,17 @@ void ChatClientVoice::run() { ImGui::InputText("Message: ", &s); - ImGui::SameLine(); + if(cm->isConnected()) { + ImGui::SameLine(); - if(ImGui::Button("send")) { - cm->sendReliable(s.c_str(), (uint32) s.length()); + if(ImGui::Button("send")) { + s.insert(s.begin(), 'o'); + s.insert(s.begin(), ' '); + s.insert(s.begin(), '0'); + s.insert(s.begin(), 'a'); + cm->sendReliable(s.c_str(), (uint32) s.length()); + s.clear(); + } } static float micVol = 1.0f; @@ -118,6 +127,7 @@ void ChatClientVoice::run() { if(!SDL_AudioStreamDevicePaused(mic)) { SDL_SetAudioStreamGain(mic, micVol); } else if(micTest) { + SDL_ClearAudioStream(mic); SDL_ResumeAudioStreamDevice(mic); SDL_SetAudioStreamGain(mic, micVol); } else if(!cm->isConnected()) { @@ -127,24 +137,28 @@ void ChatClientVoice::run() { if(!SDL_AudioStreamDevicePaused(speaker)) { SDL_SetAudioStreamGain(speaker, speakerVol); } else if(micTest) { + SDL_ClearAudioStream(speaker); SDL_ResumeAudioStreamDevice(speaker); SDL_SetAudioStreamGain(speaker, speakerVol); } else if(!cm->isConnected()) { SDL_PauseAudioStreamDevice(speaker); } - if(micTest) { + static int avail = 0; - static int avail = 0; + if(micTest) { avail = SDL_min(len, SDL_GetAudioStreamAvailable(mic)); avail = SDL_GetAudioStreamData(mic, buf, avail); SDL_PutAudioStreamData(speaker, buf, avail); - } else { + } else if(cm->isConnected()){ // if not testing, send to server. + avail = SDL_min(len, SDL_GetAudioStreamAvailable(mic)); + avail = SDL_GetAudioStreamData(mic, buf, avail); + //cm->sendReliable(buf, avail); } @@ -167,12 +181,20 @@ bool ChatClientVoice::onEvent(const Archimedes::Event& event) { Archimedes::DataRecievedEvent& e = (Archimedes::DataRecievedEvent&) event; - static std::string s; s = std::string((const char*)e.msg->m_pData, e.msg->m_cbSize); + static std::string s; + + if(((char*)e.msg->m_pData)[0] == 'a' && ((char*)e.msg->m_pData)[1] == '0' && ((char*)e.msg->m_pData)[2] == ' ' && ((char*)e.msg->m_pData)[3] == 'o') { + s = std::string((const char*)e.msg->m_pData + 4, e.msg->m_cbSize - 4); + + messages += "\n\n" + s; + } else { + s = "audio data"; + + SDL_PutAudioStreamData(speaker, e.msg->m_pData, e.msg->m_cbSize); + } std::cerr << "Client Recieved: " << s << std::endl; - messages += "\n\n" + s; - return true; } else if(type == app->getEventType("ConnectionStatusChangedEvent")) { @@ -201,6 +223,8 @@ bool ChatClientVoice::onEvent(const Archimedes::Event& event) { case k_ESteamNetworkingConnectionState_Connected: //OnConnect + SDL_ClearAudioStream(mic); + SDL_ClearAudioStream(speaker); SDL_ResumeAudioStreamDevice(mic); SDL_ResumeAudioStreamDevice(speaker); diff --git a/modules/examples/ChatClientVoice/src/ChatClientVoice.h b/modules/examples/ChatClientVoice/src/ChatClientVoice.h index 6cd6c59..7c1b154 100644 --- a/modules/examples/ChatClientVoice/src/ChatClientVoice.h +++ b/modules/examples/ChatClientVoice/src/ChatClientVoice.h @@ -27,8 +27,7 @@ class ChatClientVoice : public Archimedes::Module { SDL_AudioSpec spec; SDL_AudioStream *mic, *speaker; - const int len = 1024; - unsigned char* buf; + const int len = 10 * 1024; }; #ifdef CHATCLIENTVOICE_DYNAMIC diff --git a/modules/examples/ChatServerVoice/src/ChatServerVoice.cpp b/modules/examples/ChatServerVoice/src/ChatServerVoice.cpp index b107129..c2b5d4e 100644 --- a/modules/examples/ChatServerVoice/src/ChatServerVoice.cpp +++ b/modules/examples/ChatServerVoice/src/ChatServerVoice.cpp @@ -23,25 +23,37 @@ bool ChatServerVoice::onEvent(const Archimedes::Event& event) { static ServerModule* sm; { sm = (ServerModule*) moduleInstances[ServerModule()]; } Archimedes::DataRecievedEvent& e = (Archimedes::DataRecievedEvent&) event; + static std::string s; + + if(((char*)e.msg->m_pData)[0] == 'a' && ((char*)e.msg->m_pData)[1] == '0' && ((char*)e.msg->m_pData)[2] == ' ' && ((char*)e.msg->m_pData)[3] == 'o') { + s = std::string((const char*)e.msg->m_pData + 4, e.msg->m_cbSize - 4); - static std::string s; s = std::string((const char*)e.msg->m_pData, e.msg->m_cbSize); + if(s == "/quit") { + sm->disconnectClient(e.msg->m_conn); + } else if(s == "/shutdown") { + sm->stopServer(); + app->end(); + } + + for(auto& it : sm->getClients()) { + if(it.first != e.msg->m_conn) + sm->sendReliable(it.first, e.msg->m_pData, e.msg->m_cbSize); + else + sm->sendReliable(e.msg->m_conn, "a0 o\nMessage sent\n", strlen("a0 o\nMessage sent\n")); + } - if(s == "/quit") { - sm->disconnectClient(e.msg->m_conn); - } else if(s == "/shutdown") { - sm->stopServer(); - app->end(); + + } else { + s = "audio data"; + + for(auto& it : sm->getClients()) { + if(it.first != e.msg->m_conn) + sm->sendReliable(it.first, e.msg->m_pData, e.msg->m_cbSize); + } } std::cerr << "Server Recieved: " << s << std::endl; - for(auto& it : sm->getClients()) { - if(it.first != e.msg->m_conn) - sm->sendReliable(it.first, s.c_str(), s.length()); - else - sm->sendReliable(e.msg->m_conn, "\nMessage sent\n", strlen("\nMessage sent\n")); - } - return true; } /*else if(type == app->getEventType("ConnectionStatusChangedEvent")) {