74 lines
2.2 KiB
C++
74 lines
2.2 KiB
C++
#include "Archimedes.h"
|
|
|
|
#include <steam/steamnetworkingsockets.h>
|
|
#include <steam/isteamnetworkingutils.h>
|
|
|
|
#include "utils/Events/NetworkEvents.h"
|
|
|
|
class ClientModule : public Archimedes::Module {
|
|
|
|
public:
|
|
ClientModule(Archimedes::App*, void*);
|
|
|
|
ClientModule() { name = "ClientModule"; }
|
|
|
|
~ClientModule();
|
|
|
|
void onLoad();
|
|
|
|
void run();
|
|
|
|
bool onEvent(const Archimedes::Event&);
|
|
|
|
void startClient(SteamNetworkingIPAddr&);
|
|
void stopClient();
|
|
|
|
void sendReliable(const void* data, uint32 byteCount) {
|
|
interface->SendMessageToConnection(connection, data, byteCount, k_nSteamNetworkingSend_Reliable, nullptr);
|
|
app->emitEvent(new Archimedes::DataSentEvent(data, byteCount));
|
|
}
|
|
|
|
bool isRunning() const { return running; }
|
|
|
|
bool isConnected() const { return connection != k_HSteamNetConnection_Invalid; }
|
|
|
|
void pollIncomingData();
|
|
|
|
void shouldHandleEvents(unsigned int events) { eventsToHandle = events; }
|
|
|
|
enum CMEventEnum {
|
|
None = 0,
|
|
ConnectionStatusChanged = 1 << 0,
|
|
DataRecieved = 1 << 1,
|
|
DataSent = 1 << 2
|
|
};
|
|
private:
|
|
|
|
unsigned int eventsToHandle = CMEventEnum::ConnectionStatusChanged | CMEventEnum::DataSent | CMEventEnum::DataRecieved;
|
|
|
|
bool running = false;
|
|
|
|
ISteamNetworkingSockets* interface;
|
|
HSteamNetConnection connection;
|
|
|
|
inline static ClientModule* callbackInstance = nullptr;
|
|
|
|
static void SteamNetConnectionStatusChangedCallback( SteamNetConnectionStatusChangedCallback_t *pInfo ) {
|
|
callbackInstance->OnSteamNetConnectionStatusChanged( pInfo );
|
|
}
|
|
|
|
void OnSteamNetConnectionStatusChanged( SteamNetConnectionStatusChangedCallback_t *pInfo ) {
|
|
app->emitEvent(new CMEvent::ConnectionStatusChangedEvent(pInfo));
|
|
}
|
|
|
|
void PollConnectionStateChanges() {
|
|
callbackInstance = this;
|
|
interface->RunCallbacks();
|
|
}
|
|
};
|
|
|
|
#ifdef CLIENTMODULE_DYNAMIC
|
|
#define MODULE_TYPE ClientModule
|
|
#include "endModule.h"
|
|
#endif
|