Skip to content

Commit

Permalink
Add room update ettp messages
Browse files Browse the repository at this point in the history
  • Loading branch information
nico-abram committed Mar 27, 2018
1 parent b323c87 commit 759e508
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 8 deletions.
78 changes: 72 additions & 6 deletions src/NetworkSyncManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ std::map<std::string, ETTServerMessageTypes> ettServerMessageMap = {
{ "createroom", ettps_createroomresponse },
{ "enterroom", ettps_enterroomresponse },
{ "startselection", ettps_startselection },
{ "deleteroom", ettps_deleteroom },
{ "newroom", ettps_newroom },
{ "updateroom", ettps_updateroom },
};

#if defined(WITHOUT_NETWORKING)
Expand Down Expand Up @@ -247,10 +250,34 @@ bool ETTProtocol::Connect(NetworkSyncManager * n, unsigned short port, RString a
}
return connected;
}
RoomData jsonToRoom(json& room)
{
RoomData tmp;
string s = room["name"].get<string>();
tmp.SetName(s);
s = room["desc"].get<string>();
tmp.SetDescription(s);
try {
unsigned int state = room["state"].get<unsigned int>();
tmp.SetState(state);
}
catch(exception e) {
LOG->Trace("Error while parsing ettp json room state: %s", e.what());
}
try {
for (auto&& player : room.at("players")) {
tmp.players.emplace_back(player.get<string>());
}
}
catch(exception e) {
LOG->Trace("Error while parsing ettp json room playerlist: %s", e.what());
}
return tmp;
}
void ETTProtocol::Update(NetworkSyncManager* n, float fDeltaTime)
{
uWSh.poll();
for (auto& it = newMessages.begin(); it!=newMessages.end(); it++) {
for (auto it = newMessages.begin(); it!=newMessages.end(); it++) {
try {
auto& jType = (*it).find("type");
if (jType != it->end()) {
Expand Down Expand Up @@ -340,6 +367,49 @@ void ETTProtocol::Update(NetworkSyncManager* n, float fDeltaTime)
break;
case ettps_startselection:

break;
case ettps_newroom:
try {
RoomData tmp = jsonToRoom((*it)["room"]);
n->m_Rooms.emplace_back(tmp);
SCREENMAN->SendMessageToTopScreen(ETTP_RoomsChange);
}
catch (exception e) {
LOG->Trace("Error while parsing ettp json newroom room: %s", e.what());
}
break;
case ettps_deleteroom:
try {
string name = (*it)["room"]["name"];
n->m_Rooms.erase(
std::remove_if(n->m_Rooms.begin(), n->m_Rooms.end(), [&](RoomData const & room) {
return room.Name() == name;
}),
n->m_Rooms.end());
SCREENMAN->SendMessageToTopScreen(ETTP_RoomsChange);
}
catch (exception e) {
LOG->Trace("Error while parsing ettp json deleteroom room: %s", e.what());
}
break;
case ettps_updateroom:
try {
auto updated = jsonToRoom((*it)["room"]);
auto roomIt = find_if(n->m_Rooms.begin(), n->m_Rooms.end(),
[&](RoomData const & room) {
return room.Name() == updated.Name
}
);
if(roomIt != n->m_Rooms.end()) {
roomIt->SetDesc(updated.Desc());
roomIt->SetState(updated.State());
roomIt->players = updated.players;
SCREENMAN->SendMessageToTopScreen(ETTP_RoomsChange);
}
}
catch (exception e) {
LOG->Trace("Error while parsing ettp json roomlist room: %s", e.what());
}
break;
case ettps_roomlist:
{
Expand All @@ -349,11 +419,7 @@ void ETTProtocol::Update(NetworkSyncManager* n, float fDeltaTime)
if (j1.is_array())
for (auto&& room : j1) {
try {
string s = room["name"].get<string>();
tmp.SetName(s);
s = room["desc"].get<string>();
tmp.SetDescription(s);
n->m_Rooms.emplace_back(tmp);
n->m_Rooms.emplace_back(jsonToRoom(room));
}
catch (exception e) {
LOG->Trace("Error while parsing ettp json roomlist room: %s", e.what());
Expand Down
7 changes: 5 additions & 2 deletions src/NetworkSyncManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,9 @@ enum ETTServerMessageTypes {
ettps_createroomresponse,
ettps_enterroomresponse,
ettps_startselection,
ettps_deleteroom,
ettps_newroom,
ettps_updateroom,
ettps_end
};
enum ETTClientMessageTypes {
Expand Down Expand Up @@ -240,9 +243,9 @@ class Chat {

vector<string>& operator[](const pair<string, int>& p) {
if (p.second == 0)
return map.operator[](make_pair(string(""), 0));
return rawMap.operator[](make_pair(string(""), 0));
else
return map.operator[](p);
return rawMap.operator[](p);
}
};
/** @brief Uses ezsockets for primitive song syncing and score reporting. */
Expand Down

0 comments on commit 759e508

Please sign in to comment.