ChatServerVoice
This commit is contained in:
@@ -27,8 +27,8 @@ ChatClientVoice::~ChatClientVoice() {
|
|||||||
|
|
||||||
im->releaseContext(ImGui::GetCurrentContext());
|
im->releaseContext(ImGui::GetCurrentContext());
|
||||||
|
|
||||||
if(buf)
|
//if(buf)
|
||||||
delete [] buf;
|
// delete [] buf;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,7 +59,7 @@ void ChatClientVoice::onLoad() {
|
|||||||
SDL_GetAudioStreamFormat(mic, &spec, NULL);
|
SDL_GetAudioStreamFormat(mic, &spec, NULL);
|
||||||
speaker = SDL_OpenAudioDeviceStream(SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, &spec, NULL, 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 ClientModule* cm; { cm = (ClientModule*) moduleInstances[ClientModule()]; }
|
||||||
|
|
||||||
|
static unsigned char buf[10 * 1024];
|
||||||
|
|
||||||
if(!cm) {
|
if(!cm) {
|
||||||
std::cout << "No ClientModule for ChatClientVoice!\n";
|
std::cout << "No ClientModule for ChatClientVoice!\n";
|
||||||
std::abort();
|
std::abort();
|
||||||
@@ -99,10 +101,17 @@ void ChatClientVoice::run() {
|
|||||||
|
|
||||||
ImGui::InputText("Message: ", &s);
|
ImGui::InputText("Message: ", &s);
|
||||||
|
|
||||||
ImGui::SameLine();
|
if(cm->isConnected()) {
|
||||||
|
ImGui::SameLine();
|
||||||
|
|
||||||
if(ImGui::Button("send")) {
|
if(ImGui::Button("send")) {
|
||||||
cm->sendReliable(s.c_str(), (uint32) s.length());
|
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;
|
static float micVol = 1.0f;
|
||||||
@@ -118,6 +127,7 @@ void ChatClientVoice::run() {
|
|||||||
if(!SDL_AudioStreamDevicePaused(mic)) {
|
if(!SDL_AudioStreamDevicePaused(mic)) {
|
||||||
SDL_SetAudioStreamGain(mic, micVol);
|
SDL_SetAudioStreamGain(mic, micVol);
|
||||||
} else if(micTest) {
|
} else if(micTest) {
|
||||||
|
SDL_ClearAudioStream(mic);
|
||||||
SDL_ResumeAudioStreamDevice(mic);
|
SDL_ResumeAudioStreamDevice(mic);
|
||||||
SDL_SetAudioStreamGain(mic, micVol);
|
SDL_SetAudioStreamGain(mic, micVol);
|
||||||
} else if(!cm->isConnected()) {
|
} else if(!cm->isConnected()) {
|
||||||
@@ -127,24 +137,28 @@ void ChatClientVoice::run() {
|
|||||||
if(!SDL_AudioStreamDevicePaused(speaker)) {
|
if(!SDL_AudioStreamDevicePaused(speaker)) {
|
||||||
SDL_SetAudioStreamGain(speaker, speakerVol);
|
SDL_SetAudioStreamGain(speaker, speakerVol);
|
||||||
} else if(micTest) {
|
} else if(micTest) {
|
||||||
|
SDL_ClearAudioStream(speaker);
|
||||||
SDL_ResumeAudioStreamDevice(speaker);
|
SDL_ResumeAudioStreamDevice(speaker);
|
||||||
SDL_SetAudioStreamGain(speaker, speakerVol);
|
SDL_SetAudioStreamGain(speaker, speakerVol);
|
||||||
} else if(!cm->isConnected()) {
|
} else if(!cm->isConnected()) {
|
||||||
SDL_PauseAudioStreamDevice(speaker);
|
SDL_PauseAudioStreamDevice(speaker);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(micTest) {
|
static int avail = 0;
|
||||||
|
|
||||||
static int avail = 0;
|
if(micTest) {
|
||||||
|
|
||||||
avail = SDL_min(len, SDL_GetAudioStreamAvailable(mic));
|
avail = SDL_min(len, SDL_GetAudioStreamAvailable(mic));
|
||||||
avail = SDL_GetAudioStreamData(mic, buf, avail);
|
avail = SDL_GetAudioStreamData(mic, buf, avail);
|
||||||
|
|
||||||
SDL_PutAudioStreamData(speaker, buf, avail);
|
SDL_PutAudioStreamData(speaker, buf, avail);
|
||||||
|
|
||||||
} else {
|
} else if(cm->isConnected()){
|
||||||
// if not testing, send to server.
|
// 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;
|
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;
|
std::cerr << "Client Recieved: " << s << std::endl;
|
||||||
|
|
||||||
messages += "\n\n" + s;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else if(type == app->getEventType("ConnectionStatusChangedEvent")) {
|
} else if(type == app->getEventType("ConnectionStatusChangedEvent")) {
|
||||||
|
|
||||||
@@ -201,6 +223,8 @@ bool ChatClientVoice::onEvent(const Archimedes::Event& event) {
|
|||||||
|
|
||||||
case k_ESteamNetworkingConnectionState_Connected:
|
case k_ESteamNetworkingConnectionState_Connected:
|
||||||
//OnConnect
|
//OnConnect
|
||||||
|
SDL_ClearAudioStream(mic);
|
||||||
|
SDL_ClearAudioStream(speaker);
|
||||||
SDL_ResumeAudioStreamDevice(mic);
|
SDL_ResumeAudioStreamDevice(mic);
|
||||||
SDL_ResumeAudioStreamDevice(speaker);
|
SDL_ResumeAudioStreamDevice(speaker);
|
||||||
|
|
||||||
|
|||||||
@@ -27,8 +27,7 @@ class ChatClientVoice : public Archimedes::Module {
|
|||||||
SDL_AudioSpec spec;
|
SDL_AudioSpec spec;
|
||||||
SDL_AudioStream *mic, *speaker;
|
SDL_AudioStream *mic, *speaker;
|
||||||
|
|
||||||
const int len = 1024;
|
const int len = 10 * 1024;
|
||||||
unsigned char* buf;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CHATCLIENTVOICE_DYNAMIC
|
#ifdef CHATCLIENTVOICE_DYNAMIC
|
||||||
|
|||||||
@@ -23,25 +23,37 @@ bool ChatServerVoice::onEvent(const Archimedes::Event& event) {
|
|||||||
static ServerModule* sm; { sm = (ServerModule*) moduleInstances[ServerModule()]; }
|
static ServerModule* sm; { sm = (ServerModule*) moduleInstances[ServerModule()]; }
|
||||||
|
|
||||||
Archimedes::DataRecievedEvent& e = (Archimedes::DataRecievedEvent&) event;
|
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 {
|
||||||
} else if(s == "/shutdown") {
|
s = "audio data";
|
||||||
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cerr << "Server Recieved: " << s << std::endl;
|
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;
|
return true;
|
||||||
|
|
||||||
} /*else if(type == app->getEventType("ConnectionStatusChangedEvent")) {
|
} /*else if(type == app->getEventType("ConnectionStatusChangedEvent")) {
|
||||||
|
|||||||
Reference in New Issue
Block a user