132 lines
4.1 KiB
C++
132 lines
4.1 KiB
C++
#include "ChatServerVoice.h"
|
|
|
|
void ChatServerVoice::onLoad() {
|
|
ServerModule* sm = (ServerModule*) moduleInstances[ServerModule()];
|
|
|
|
sm->startServer(9932);
|
|
}
|
|
|
|
//void ChatServerVoice::run() {}
|
|
|
|
bool ChatServerVoice::onEvent(const Archimedes::Event& event) {
|
|
|
|
unsigned int type = app->getEventType(event);
|
|
|
|
static ServerModule* sm;
|
|
/*if(type == app->getEventType("DataSentEvent")) {
|
|
//we did this?
|
|
return true;
|
|
} else */
|
|
|
|
if(type == app->getEventType(Archimedes::DataRecievedEvent())) {
|
|
|
|
{ sm = (ServerModule*) moduleInstances[ServerModule()]; }
|
|
|
|
|
|
Archimedes::DataRecievedEvent& e = (Archimedes::DataRecievedEvent&) event;
|
|
static std::string s;
|
|
|
|
if(std::string((const char*)e.msg->m_pData, 6) == "client") {
|
|
s = std::string((const char*)e.msg->m_pData + 6, e.msg->m_cbSize - 6);
|
|
|
|
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, "client\nMessage sent\n", strlen("client\nMessage sent\n"));
|
|
}
|
|
|
|
|
|
} else if(std::string((const char*)e.msg->m_pData, 6) == "srvcmd") {
|
|
s = std::string((const char*)e.msg->m_pData + 6, e.msg->m_cbSize - 6);
|
|
|
|
int cmdCode = stoi(s);
|
|
|
|
switch(cmdCode) {
|
|
case 0:
|
|
break;
|
|
case 1:
|
|
//disconnect
|
|
sm->disconnectClient(e.msg->m_conn);
|
|
break;
|
|
case 2:
|
|
for(auto& it : sm->getClients()) {
|
|
sm->sendReliable(it.first, "server2", strlen("server2"));
|
|
}
|
|
sm->stopServer();
|
|
app->end();
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
} else /*if(std::string((const char*)e.msg->m_pData, 6) == "audio:")*/ {
|
|
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;
|
|
|
|
return true;
|
|
|
|
} else if(type == app->getEventType("ConnectionStatusChangedEvent")) {
|
|
|
|
Archimedes::ConnectionStatusChangedEvent& e = (Archimedes::ConnectionStatusChangedEvent&) event;
|
|
|
|
{ sm = (ServerModule*) moduleInstances[ServerModule()]; }
|
|
|
|
unsigned int numClients;
|
|
(void)sm->getClients(&numClients);
|
|
|
|
switch(e.info->m_info.m_eState) {
|
|
|
|
case k_ESteamNetworkingConnectionState_None:
|
|
// NOTE: We will get callbacks here when we destroy connections. You can ignore these.
|
|
break;
|
|
|
|
case k_ESteamNetworkingConnectionState_ClosedByPeer:
|
|
case k_ESteamNetworkingConnectionState_ProblemDetectedLocally:
|
|
{
|
|
if(numClients < 2) {
|
|
for(auto& it : sm->getClients()) {
|
|
sm->sendReliable(it.first, "server1", strlen("server1"));
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
case k_ESteamNetworkingConnectionState_Connecting:
|
|
{
|
|
break;
|
|
}
|
|
|
|
case k_ESteamNetworkingConnectionState_Connected:
|
|
//OnConnect
|
|
|
|
if(numClients == 2) {
|
|
for(auto& it : sm->getClients()) {
|
|
sm->sendReliable(it.first, "server0", strlen("server0"));
|
|
}
|
|
} else if(numClients > 2) {
|
|
|
|
sm->sendReliable(e.info->m_hConn, "server0", strlen("server0"));
|
|
}
|
|
break;
|
|
|
|
default:
|
|
// Silences -Wswitch
|
|
break;
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return false;
|
|
}
|