diff --git a/src/NetworkSyncManager.cpp b/src/NetworkSyncManager.cpp index df2769b0d6..746c9db4c9 100644 --- a/src/NetworkSyncManager.cpp +++ b/src/NetworkSyncManager.cpp @@ -65,6 +65,7 @@ std::map ettServerMessageMap = { { "newroom", ettps_newroom }, { "updateroom", ettps_updateroom }, { "userlist", ettps_roomuserlist }, + { "chartrequest", ettps_chartrequest } }; #if defined(WITHOUT_NETWORKING) @@ -915,6 +916,9 @@ ETTProtocol::Update(NetworkSyncManager* n, float fDeltaTime) SCREENMAN->SetNewScreen(SMOnlineSelectScreen); } } break; + case ettps_chartrequest: { + n->requests.emplace_back(ChartRequest(*payload)); + } break; case ettps_enterroomresponse: { bool entered = (*payload)["entered"]; inRoom = false; @@ -2482,6 +2486,18 @@ NetworkSyncManager::GetCurrentSMBuild(LoadingWindow* ld) } #endif +void +ChartRequest::PushSelf(lua_State* L) +{ + lua_createtable(L, 0, 3); + lua_pushstring(L, chartkey.c_str()); + lua_setfield(L, -2, "chartkey"); + lua_pushstring(L, user.c_str()); + lua_setfield(L, -2, "user"); + lua_pushnumber(L, rate / 1000); // should this be in [0,1] or [0, 1000] ???? + lua_setfield(L, -2, "rate"); +} + static bool ConnectToServer(const RString& t) { @@ -2527,6 +2543,18 @@ LuaFunction(IsSMOnlineLoggedIn, NSMAN->loggedIn) lua_pushboolean(L, p->IsETTP()); return 1; } + static int GetChartRequests(T* p, lua_State* L) + { + auto& reqs = p->requests; + lua_newtable(L); + int i = 1; + for (auto& req : reqs) { + req.PushSelf(L); + lua_rawseti(L, -2, 0); + i++; + } + return 1; + } static int GetChatMsg(T* p, lua_State* L) { unsigned int l = IArg(1); diff --git a/src/NetworkSyncManager.h b/src/NetworkSyncManager.h index 8e6297c1a6..843c0a9fee 100644 --- a/src/NetworkSyncManager.h +++ b/src/NetworkSyncManager.h @@ -96,6 +96,7 @@ enum ETTServerMessageTypes ettps_newroom, ettps_updateroom, ettps_roomuserlist, + ettps_chartrequest, ettps_end }; enum ETTClientMessageTypes @@ -132,6 +133,21 @@ struct NetServerInfo RString Address; }; +class ChartRequest +{ + public: + ChartRequest(json& j) + : chartkey(j["chartkey"].get()) + , user(j["requester"].get()) + , rate(j["rate"]) + { + } + const string chartkey; + const string user; // User that requested this chart + const int rate; // rate * 1000 + void PushSelf(lua_State* L); +}; + class EzSockets; class StepManiaLanServer; @@ -457,6 +473,7 @@ class NetworkSyncManager void Login(RString user, RString pass); void Logout(); vector m_Rooms; + vector requests; #if !defined(WITHOUT_NETWORKING) SMOStepType TranslateStepType(int score);