diff --git a/modules/ClientModule/src/ClientEvents.h b/modules/ClientModule/src/ClientEvents.h new file mode 100644 index 0000000..25d44a7 --- /dev/null +++ b/modules/ClientModule/src/ClientEvents.h @@ -0,0 +1,50 @@ +#include "Archimedes.h" + +#include +#include + + + +namespace CMEvent { + class DataRecievedEvent : public Archimedes::Event { + + public: + + DataRecievedEvent() : msg(nullptr) {} + + DataRecievedEvent(ISteamNetworkingMessage* m) : msg(m) {} + + operator std::string() const { return "DataRecievedEvent"; } + + ISteamNetworkingMessage* msg; + + }; + + class DataSentEvent : public Archimedes::Event { + + public: + + DataSentEvent() : msg(nullptr) {} + + DataSentEvent(ISteamNetworkingMessage* m) : msg(m) {} + + operator std::string() const { return "DataSentEvent"; } + + ISteamNetworkingMessage* msg; + }; + + class ConnectionStatusChangedEvent : public Archimedes::Event { + + public: + + ConnectionStatusChangedEvent() : info(nullptr) {} + + ConnectionStatusChangedEvent(SteamNetConnectionStatusChangedCallback_t* i) : info(i) {} + + operator std::string() const { return "ConnectionStatusChangedEvent"; } + + SteamNetConnectionStatusChangedCallback_t* info; + }; +} + + diff --git a/modules/ServerModule/src/ServerEvents.h b/modules/ServerModule/src/ServerEvents.h index 29efc25..99f6307 100644 --- a/modules/ServerModule/src/ServerEvents.h +++ b/modules/ServerModule/src/ServerEvents.h @@ -10,17 +10,18 @@ namespace SMEvent { public: - DataRecievedEvent() : clientID(0), buffer(nullptr), size(0) {} + DataRecievedEvent() : msg(nullptr) {} + + ~DataRecievedEvent() { + if(msg) + msg->Release(); + } - DataRecievedEvent(unsigned int c, void* buf, unsigned int s) : clientID(c), buffer(buf), size(s) {} + DataRecievedEvent(ISteamNetworkingMessage* m) : msg(m) {} operator std::string() const { return "DataRecievedEvent"; } - unsigned int clientID; - - void* buffer; - - unsigned int size; + ISteamNetworkingMessage* msg; }; @@ -28,18 +29,18 @@ namespace SMEvent { public: - DataSentEvent() : clientID(0), buffer(nullptr), size(0) {} + DataSentEvent() : msg(nullptr) {} - DataSentEvent(unsigned int c, void* buf, unsigned int s) : clientID(c), buffer(buf), size(s) {} + ~DataSentEvent() { + if(msg) + msg->Release(); + } + + DataSentEvent(ISteamNetworkingMessage* m) : msg(m) {} operator std::string() const { return "DataSentEvent"; } - unsigned int clientID; - - void* buffer; - - unsigned int size; - + ISteamNetworkingMessage* msg; }; class ConnectionStatusChangedEvent : public Archimedes::Event { diff --git a/modules/ServerModule/src/ServerModule.cpp b/modules/ServerModule/src/ServerModule.cpp index 979516c..f539b43 100644 --- a/modules/ServerModule/src/ServerModule.cpp +++ b/modules/ServerModule/src/ServerModule.cpp @@ -45,7 +45,7 @@ void ServerModule::onLoad() { void ServerModule::run() { if(running) { - PollIncomingMessages(); + pollIncomingData(); PollConnectionStateChanges(); PollLocalUserInput(); } else if(port >= 0) { @@ -189,3 +189,20 @@ bool ServerModule::onEvent(const Archimedes::Event& event) { return false; } +void ServerModule::pollIncomingData() { + + while ( running ) + { + ISteamNetworkingMessage *pIncomingMsg = nullptr; + int numMsgs = interface->ReceiveMessagesOnPollGroup( pollGroup, &pIncomingMsg, 1 ); + if ( numMsgs == 0 ) + break; + if ( numMsgs < 0 ) + std::cerr << "Error checking for messages" << std::endl; + assert( numMsgs == 1 && pIncomingMsg ); + auto itClient = clients.find( pIncomingMsg->m_conn ); + assert( itClient != clients.end() ); + + app->emitEvent(new SMEvent::DataRecievedEvent(pIncomingMsg)); + } +}