mirror of
https://github.com/Lime3DS/Lime3DS
synced 2024-12-25 00:23:04 -06:00
fixup! fixup! Add a service to announce multiplayer rooms to web service; Add the abiltiy to receive a list of all announced rooms from web service
This commit is contained in:
parent
1485093fd9
commit
93742f17b3
6 changed files with 35 additions and 32 deletions
|
@ -13,7 +13,7 @@
|
|||
|
||||
namespace Common {
|
||||
struct WebResult {
|
||||
enum Code : u32 {
|
||||
enum class Code : u32 {
|
||||
Success,
|
||||
InvalidURL,
|
||||
CredentialsMissing,
|
||||
|
@ -39,7 +39,7 @@ struct Room {
|
|||
u64 game_id;
|
||||
};
|
||||
std::string name;
|
||||
std::string GUID;
|
||||
std::string UID;
|
||||
std::string owner;
|
||||
std::string ip;
|
||||
u16 port;
|
||||
|
@ -60,8 +60,8 @@ using RoomList = std::vector<Room>;
|
|||
class Backend : NonCopyable {
|
||||
public:
|
||||
virtual ~Backend() = default;
|
||||
virtual void SetRoomInformation(const std::string& guid, const std::string& name,
|
||||
const u16 port, const u32 max_player, const u32 net_version,
|
||||
virtual void SetRoomInformation(const std::string& uid, const std::string& name, const u16 port,
|
||||
const u32 max_player, const u32 net_version,
|
||||
const bool has_password, const std::string& preferred_game,
|
||||
const u64 preferred_game_id) = 0;
|
||||
virtual void AddPlayer(const std::string& nickname, const MacAddress& mac_address,
|
||||
|
@ -79,7 +79,7 @@ public:
|
|||
class NullBackend : public Backend {
|
||||
public:
|
||||
~NullBackend() = default;
|
||||
void SetRoomInformation(const std::string& /*guid*/, const std::string& /*name*/,
|
||||
void SetRoomInformation(const std::string& /*uid*/, const std::string& /*name*/,
|
||||
const u16 /*port*/, const u32 /*max_player*/, const u32 /*net_version*/,
|
||||
const bool /*has_password*/, const std::string& /*preferred_game*/,
|
||||
const u64 /*preferred_game_id*/) override {}
|
||||
|
|
|
@ -77,29 +77,30 @@ void AnnounceMultiplayerSession::AnnounceMultiplayerLoop() {
|
|||
finished = false;
|
||||
std::future<Common::WebResult> future;
|
||||
while (announce) {
|
||||
if (std::shared_ptr<Network::Room> room = Network::GetRoom().lock()) {
|
||||
if (room->GetState() == Network::Room::State::Open) {
|
||||
Network::RoomInformation room_information = room->GetRoomInformation();
|
||||
std::vector<Network::Room::Member> memberlist = room->GetRoomMemberList();
|
||||
backend->SetRoomInformation(
|
||||
room_information.guid, room_information.name, room_information.port,
|
||||
room_information.member_slots, Network::network_version, room->HasPassword(),
|
||||
room_information.preferred_game, room_information.preferred_game_id);
|
||||
backend->ClearPlayers();
|
||||
for (const auto& member : memberlist) {
|
||||
backend->AddPlayer(member.nickname, member.mac_address, member.game_info.id,
|
||||
member.game_info.name);
|
||||
}
|
||||
future = backend->Announce();
|
||||
} else {
|
||||
announce = false;
|
||||
}
|
||||
} else {
|
||||
std::shared_ptr<Network::Room> room = Network::GetRoom().lock();
|
||||
if (!room) {
|
||||
announce = false;
|
||||
continue;
|
||||
}
|
||||
if (room->GetState() != Network::Room::State::Open) {
|
||||
announce = false;
|
||||
continue;
|
||||
}
|
||||
Network::RoomInformation room_information = room->GetRoomInformation();
|
||||
std::vector<Network::Room::Member> memberlist = room->GetRoomMemberList();
|
||||
backend->SetRoomInformation(
|
||||
room_information.uid, room_information.name, room_information.port,
|
||||
room_information.member_slots, Network::network_version, room->HasPassword(),
|
||||
room_information.preferred_game, room_information.preferred_game_id);
|
||||
backend->ClearPlayers();
|
||||
for (const auto& member : memberlist) {
|
||||
backend->AddPlayer(member.nickname, member.mac_address, member.game_info.id,
|
||||
member.game_info.name);
|
||||
}
|
||||
future = backend->Announce();
|
||||
if (future.valid()) {
|
||||
Common::WebResult result = future.get();
|
||||
if (result.result_code != Common::WebResult::Success) {
|
||||
if (result.result_code != Common::WebResult::Code::Success) {
|
||||
std::lock_guard<std::mutex> lock(callback_mutex);
|
||||
for (auto callback : error_callbacks) {
|
||||
(*callback)(result);
|
||||
|
|
|
@ -23,7 +23,7 @@ void from_json(const nlohmann::json& json, Room::Member& member) {
|
|||
}
|
||||
|
||||
void to_json(nlohmann::json& json, const Room& room) {
|
||||
json["id"] = room.GUID;
|
||||
json["id"] = room.UID;
|
||||
json["port"] = room.port;
|
||||
json["name"] = room.name;
|
||||
json["preferredGameName"] = room.preferred_game;
|
||||
|
@ -58,12 +58,12 @@ void from_json(const nlohmann::json& json, Room& room) {
|
|||
|
||||
namespace WebService {
|
||||
|
||||
void RoomJson::SetRoomInformation(const std::string& guid, const std::string& name, const u16 port,
|
||||
void RoomJson::SetRoomInformation(const std::string& uid, const std::string& name, const u16 port,
|
||||
const u32 max_player, const u32 net_version,
|
||||
const bool has_password, const std::string& preferred_game,
|
||||
const u64 preferred_game_id) {
|
||||
room.name = name;
|
||||
room.GUID = guid;
|
||||
room.UID = uid;
|
||||
room.port = port;
|
||||
room.max_player = max_player;
|
||||
room.net_version = net_version;
|
||||
|
@ -105,7 +105,7 @@ std::future<AnnounceMultiplayerRoom::RoomList> RoomJson::GetRoomList(std::functi
|
|||
|
||||
void RoomJson::Delete() {
|
||||
nlohmann::json json;
|
||||
json["id"] = room.GUID;
|
||||
json["id"] = room.UID;
|
||||
DeleteJson(endpoint_url, json.dump(), username, token);
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ public:
|
|||
RoomJson(const std::string& endpoint_url, const std::string& username, const std::string& token)
|
||||
: endpoint_url(endpoint_url), username(username), token(token) {}
|
||||
~RoomJson() = default;
|
||||
void SetRoomInformation(const std::string& guid, const std::string& name, const u16 port,
|
||||
void SetRoomInformation(const std::string& uid, const std::string& name, const u16 port,
|
||||
const u32 max_player, const u32 net_version, const bool has_password,
|
||||
const std::string& preferred_game,
|
||||
const u64 preferred_game_id) override;
|
||||
|
|
|
@ -81,9 +81,8 @@ void TelemetryJson::Complete() {
|
|||
SerializeSection(Telemetry::FieldType::UserConfig, "UserConfig");
|
||||
SerializeSection(Telemetry::FieldType::UserSystem, "UserSystem");
|
||||
|
||||
// Send the telemetry async but don't handle the errors since the were written to the log
|
||||
static std::future<Common::WebResult> future =
|
||||
PostJson(endpoint_url, TopSection().dump(), true, username, token);
|
||||
// Send the telemetry async but don't handle the errors since they were written to the log
|
||||
future = PostJson(endpoint_url, TopSection().dump(), true, username, token);
|
||||
}
|
||||
|
||||
} // namespace WebService
|
||||
|
|
|
@ -5,8 +5,10 @@
|
|||
#pragma once
|
||||
|
||||
#include <array>
|
||||
#include <future>
|
||||
#include <string>
|
||||
#include <json.hpp>
|
||||
#include "common/announce_multiplayer_room.h"
|
||||
#include "common/telemetry.h"
|
||||
|
||||
namespace WebService {
|
||||
|
@ -54,6 +56,7 @@ private:
|
|||
std::string endpoint_url;
|
||||
std::string username;
|
||||
std::string token;
|
||||
std::future<Common::WebResult> future;
|
||||
};
|
||||
|
||||
} // namespace WebService
|
||||
|
|
Loading…
Reference in a new issue