| |
| |
|
|
| #pragma once |
|
|
| #include <array> |
| #include <memory> |
| #include <string> |
| #include <vector> |
| #include "common/announce_multiplayer_room.h" |
| #include "common/common_types.h" |
| #include "common/socket_types.h" |
| #include "network/verify_user.h" |
|
|
| namespace Network { |
|
|
| using AnnounceMultiplayerRoom::GameInfo; |
| using AnnounceMultiplayerRoom::Member; |
| using AnnounceMultiplayerRoom::RoomInformation; |
|
|
| constexpr u32 network_version = 1; |
|
|
| constexpr u16 DefaultRoomPort = 24872; |
|
|
| constexpr u32 MaxMessageSize = 500; |
|
|
| |
| static constexpr u32 MaxConcurrentConnections = 254; |
|
|
| constexpr std::size_t NumChannels = 1; |
|
|
| |
| |
| constexpr IPv4Address NoPreferredIP = {0xFF, 0xFF, 0xFF, 0xFF}; |
|
|
| |
| enum RoomMessageTypes : u8 { |
| IdJoinRequest = 1, |
| IdJoinSuccess, |
| IdRoomInformation, |
| IdSetGameInfo, |
| IdProxyPacket, |
| IdLdnPacket, |
| IdChatMessage, |
| IdNameCollision, |
| IdIpCollision, |
| IdVersionMismatch, |
| IdWrongPassword, |
| IdCloseRoom, |
| IdRoomIsFull, |
| IdStatusMessage, |
| IdHostKicked, |
| IdHostBanned, |
| |
| IdModKick, |
| IdModBan, |
| IdModUnban, |
| IdModGetBanList, |
| |
| IdModBanListResponse, |
| IdModPermissionDenied, |
| IdModNoSuchUser, |
| IdJoinSuccessAsMod, |
| }; |
|
|
| |
| enum StatusMessageTypes : u8 { |
| IdMemberJoin = 1, |
| IdMemberLeave, |
| IdMemberKicked, |
| IdMemberBanned, |
| IdAddressUnbanned, |
| }; |
|
|
| |
| class Room final { |
| public: |
| enum class State : u8 { |
| Open, |
| Closed, |
| }; |
|
|
| Room(); |
| ~Room(); |
|
|
| |
| |
| |
| State GetState() const; |
|
|
| |
| |
| |
| const RoomInformation& GetRoomInformation() const; |
|
|
| |
| |
| |
| std::string GetVerifyUID() const; |
|
|
| |
| |
| |
| std::vector<Member> GetRoomMemberList() const; |
|
|
| |
| |
| |
| bool HasPassword() const; |
|
|
| using UsernameBanList = std::vector<std::string>; |
| using IPBanList = std::vector<std::string>; |
|
|
| using BanList = std::pair<UsernameBanList, IPBanList>; |
|
|
| |
| |
| |
| |
| bool Create(const std::string& name, const std::string& description = "", |
| const std::string& server = "", u16 server_port = DefaultRoomPort, |
| const std::string& password = "", |
| const u32 max_connections = MaxConcurrentConnections, |
| const std::string& host_username = "", const GameInfo = {}, |
| std::unique_ptr<VerifyUser::Backend> verify_backend = nullptr, |
| const BanList& ban_list = {}, bool enable_yuzu_mods = false); |
|
|
| |
| |
| |
| void SetVerifyUID(const std::string& uid); |
|
|
| |
| |
| |
| BanList GetBanList() const; |
|
|
| |
| |
| |
| void Destroy(); |
|
|
| private: |
| class RoomImpl; |
| std::unique_ptr<RoomImpl> room_impl; |
| }; |
|
|
| } |
|
|