diff options
author | BobTheBob <32057864+BobTheBob9@users.noreply.github.com> | 2022-08-24 00:32:31 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-24 00:32:31 +0100 |
commit | f9bc3c9d1834cb8bd5f872b749b057c33e8b0102 (patch) | |
tree | e96e2da0d95798dd42eddf644a82a74555db858f /NorthstarDLL/masterserver.h | |
parent | 812893d8219daa60f5b5b7fd22cbd6b175603399 (diff) | |
download | NorthstarLauncher-f9bc3c9d1834cb8bd5f872b749b057c33e8b0102.tar.gz NorthstarLauncher-f9bc3c9d1834cb8bd5f872b749b057c33e8b0102.zip |
Adjust folder structure (#242)
* Adjust folder structure
* change launcher directory name
Diffstat (limited to 'NorthstarDLL/masterserver.h')
-rw-r--r-- | NorthstarDLL/masterserver.h | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/NorthstarDLL/masterserver.h b/NorthstarDLL/masterserver.h new file mode 100644 index 00000000..e4dcb954 --- /dev/null +++ b/NorthstarDLL/masterserver.h @@ -0,0 +1,135 @@ +#pragma once +#include "convar.h" +#include <winsock2.h> +#include <string> +#include <cstring> +struct RemoteModInfo +{ + public: + std::string Name; + std::string Version; +}; + +class RemoteServerInfo +{ + public: + char id[33]; // 32 bytes + nullterminator + + // server info + char name[64]; + std::string description; + char map[32]; + char playlist[16]; + std::vector<RemoteModInfo> requiredMods; + + int playerCount; + int maxPlayers; + + // connection stuff + bool requiresPassword; + + public: + RemoteServerInfo( + const char* newId, + const char* newName, + const char* newDescription, + const char* newMap, + const char* newPlaylist, + int newPlayerCount, + int newMaxPlayers, + bool newRequiresPassword); +}; + +struct RemoteServerConnectionInfo +{ + public: + char authToken[32]; + + in_addr ip; + unsigned short port; +}; + +struct MainMenuPromoData +{ + public: + std::string newInfoTitle1; + std::string newInfoTitle2; + std::string newInfoTitle3; + + std::string largeButtonTitle; + std::string largeButtonText; + std::string largeButtonUrl; + int largeButtonImageIndex; + + std::string smallButton1Title; + std::string smallButton1Url; + int smallButton1ImageIndex; + + std::string smallButton2Title; + std::string smallButton2Url; + int smallButton2ImageIndex; +}; + +class MasterServerManager +{ + private: + bool m_requestingServerList = false; + bool m_authenticatingWithGameServer = false; + + public: + char m_ownServerId[33]; + char m_ownServerAuthToken[33]; + char m_ownClientAuthToken[33]; + + std::string m_ownModInfoJson; + std::string ns_auth_srvName; // Unicode unescaped version of Cvar_ns_auth_servername for support in cjk characters + std::string ns_auth_srvDesc; // Unicode unescaped version of Cvar_ns_auth_serverdesc for support in cjk characters + + bool m_bOriginAuthWithMasterServerDone = false; + bool m_bOriginAuthWithMasterServerInProgress = false; + + bool m_bRequireClientAuth = false; + bool m_savingPersistentData = false; + + bool m_scriptRequestingServerList = false; + bool m_successfullyConnected = true; + + bool m_bNewgameAfterSelfAuth = false; + bool m_scriptAuthenticatingWithGameServer = false; + bool m_successfullyAuthenticatedWithGameServer = false; + + std::string s_authfail_reason {}; + + bool m_hasPendingConnectionInfo = false; + RemoteServerConnectionInfo m_pendingConnectionInfo; + + std::vector<RemoteServerInfo> m_remoteServers; + + bool m_bHasMainMenuPromoData = false; + MainMenuPromoData m_MainMenuPromoData; + + private: + void SetCommonHttpClientOptions(CURL* curl); + + public: + MasterServerManager(); + void ClearServerList(); + void RequestServerList(); + void RequestMainMenuPromos(); + void AuthenticateOriginWithMasterServer(char* uid, char* originToken); + void AuthenticateWithOwnServer(char* uid, char* playerToken); + void AuthenticateWithServer(char* uid, char* playerToken, char* serverId, char* password); + void + AddSelfToServerList(int port, int authPort, char* name, char* description, char* map, char* playlist, int maxPlayers, char* password); + void UpdateServerMapAndPlaylist(char* map, char* playlist, int playerCount); + void UpdateServerPlayerCount(int playerCount); + void WritePlayerPersistentData(char* playerId, char* pdata, size_t pdataSize); + void RemoveSelfFromServerList(); +}; +std::string unescape_unicode(const std::string& str); +void UpdateServerInfoFromUnicodeToUTF8(); +void InitialiseSharedMasterServer(HMODULE baseAddress); + +extern MasterServerManager* g_MasterServerManager; +extern ConVar* Cvar_ns_masterserver_hostname; +extern ConVar* Cvar_ns_server_password; |