diff options
| author | 2017-07-14 09:20:39 +0200 | |
|---|---|---|
| committer | 2017-07-16 21:30:04 +0200 | |
| commit | a0626221a52056669c0b6d19b37d4189c1671fb7 (patch) | |
| tree | 13b05ebe3fe162c1d90f79dc38c9e7129958bc2e /src/network/room.cpp | |
| parent | Network: Send the game title (diff) | |
| download | yuzu-a0626221a52056669c0b6d19b37d4189c1671fb7.tar.gz yuzu-a0626221a52056669c0b6d19b37d4189c1671fb7.tar.xz yuzu-a0626221a52056669c0b6d19b37d4189c1671fb7.zip | |
Network: Made send async in RoomMember
Diffstat (limited to 'src/network/room.cpp')
| -rw-r--r-- | src/network/room.cpp | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/src/network/room.cpp b/src/network/room.cpp index 9af5b4ea0..da1679312 100644 --- a/src/network/room.cpp +++ b/src/network/room.cpp | |||
| @@ -74,6 +74,11 @@ public: | |||
| 74 | void SendMacCollision(ENetPeer* client); | 74 | void SendMacCollision(ENetPeer* client); |
| 75 | 75 | ||
| 76 | /** | 76 | /** |
| 77 | * Sends a ID_ROOM_VERSION_MISMATCH message telling the client that the MAC is invalid. | ||
| 78 | */ | ||
| 79 | void SendVersionMismatch(ENetPeer* client); | ||
| 80 | |||
| 81 | /** | ||
| 77 | * Notifies the member that its connection attempt was successful, | 82 | * Notifies the member that its connection attempt was successful, |
| 78 | * and it is now part of the room. | 83 | * and it is now part of the room. |
| 79 | */ | 84 | */ |
| @@ -170,6 +175,9 @@ void Room::RoomImpl::HandleJoinRequest(const ENetEvent* event) { | |||
| 170 | MacAddress preferred_mac; | 175 | MacAddress preferred_mac; |
| 171 | packet >> preferred_mac; | 176 | packet >> preferred_mac; |
| 172 | 177 | ||
| 178 | u32 client_version; | ||
| 179 | packet >> client_version; | ||
| 180 | |||
| 173 | if (!IsValidNickname(nickname)) { | 181 | if (!IsValidNickname(nickname)) { |
| 174 | SendNameCollision(event->peer); | 182 | SendNameCollision(event->peer); |
| 175 | return; | 183 | return; |
| @@ -186,6 +194,11 @@ void Room::RoomImpl::HandleJoinRequest(const ENetEvent* event) { | |||
| 186 | preferred_mac = GenerateMacAddress(); | 194 | preferred_mac = GenerateMacAddress(); |
| 187 | } | 195 | } |
| 188 | 196 | ||
| 197 | if (client_version != network_version) { | ||
| 198 | SendVersionMismatch(event->peer); | ||
| 199 | return; | ||
| 200 | } | ||
| 201 | |||
| 189 | // At this point the client is ready to be added to the room. | 202 | // At this point the client is ready to be added to the room. |
| 190 | Member member{}; | 203 | Member member{}; |
| 191 | member.mac_address = preferred_mac; | 204 | member.mac_address = preferred_mac; |
| @@ -232,6 +245,17 @@ void Room::RoomImpl::SendMacCollision(ENetPeer* client) { | |||
| 232 | enet_host_flush(server); | 245 | enet_host_flush(server); |
| 233 | } | 246 | } |
| 234 | 247 | ||
| 248 | void Room::RoomImpl::SendVersionMismatch(ENetPeer* client) { | ||
| 249 | Packet packet; | ||
| 250 | packet << static_cast<MessageID>(IdVersionMismatch); | ||
| 251 | packet << network_version; | ||
| 252 | |||
| 253 | ENetPacket* enet_packet = | ||
| 254 | enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE); | ||
| 255 | enet_peer_send(client, 0, enet_packet); | ||
| 256 | enet_host_flush(server); | ||
| 257 | } | ||
| 258 | |||
| 235 | void Room::RoomImpl::SendJoinSuccess(ENetPeer* client, MacAddress mac_address) { | 259 | void Room::RoomImpl::SendJoinSuccess(ENetPeer* client, MacAddress mac_address) { |
| 236 | Packet packet; | 260 | Packet packet; |
| 237 | packet << static_cast<MessageID>(IdJoinSuccess); | 261 | packet << static_cast<MessageID>(IdJoinSuccess); |
| @@ -291,7 +315,7 @@ void Room::RoomImpl::HandleWifiPacket(const ENetEvent* event) { | |||
| 291 | if (destination_address == BroadcastMac) { // Send the data to everyone except the sender | 315 | if (destination_address == BroadcastMac) { // Send the data to everyone except the sender |
| 292 | for (const auto& member : members) { | 316 | for (const auto& member : members) { |
| 293 | if (member.peer != event->peer) | 317 | if (member.peer != event->peer) |
| 294 | enet_peer_send(member.peer, 0, event->packet); | 318 | enet_peer_send(member.peer, 0, enet_packet); |
| 295 | } | 319 | } |
| 296 | } else { // Send the data only to the destination client | 320 | } else { // Send the data only to the destination client |
| 297 | auto member = std::find_if(members.begin(), members.end(), | 321 | auto member = std::find_if(members.begin(), members.end(), |
| @@ -327,9 +351,9 @@ void Room::RoomImpl::HandleChatPacket(const ENetEvent* event) { | |||
| 327 | 351 | ||
| 328 | ENetPacket* enet_packet = enet_packet_create(out_packet.GetData(), out_packet.GetDataSize(), | 352 | ENetPacket* enet_packet = enet_packet_create(out_packet.GetData(), out_packet.GetDataSize(), |
| 329 | ENET_PACKET_FLAG_RELIABLE); | 353 | ENET_PACKET_FLAG_RELIABLE); |
| 330 | for (auto it = members.begin(); it != members.end(); ++it) { | 354 | for (const auto& member : members) { |
| 331 | if (it->peer != event->peer) | 355 | if (member.peer != event->peer) |
| 332 | enet_peer_send(it->peer, 0, enet_packet); | 356 | enet_peer_send(member.peer, 0, enet_packet); |
| 333 | } | 357 | } |
| 334 | enet_host_flush(server); | 358 | enet_host_flush(server); |
| 335 | } | 359 | } |
| @@ -369,6 +393,9 @@ Room::~Room() = default; | |||
| 369 | void Room::Create(const std::string& name, const std::string& server_address, u16 server_port) { | 393 | void Room::Create(const std::string& name, const std::string& server_address, u16 server_port) { |
| 370 | ENetAddress address; | 394 | ENetAddress address; |
| 371 | address.host = ENET_HOST_ANY; | 395 | address.host = ENET_HOST_ANY; |
| 396 | if (!server_address.empty()) { | ||
| 397 | enet_address_set_host(&address, server_address.c_str()); | ||
| 398 | } | ||
| 372 | address.port = server_port; | 399 | address.port = server_port; |
| 373 | 400 | ||
| 374 | room_impl->server = enet_host_create(&address, MaxConcurrentConnections, NumChannels, 0, 0); | 401 | room_impl->server = enet_host_create(&address, MaxConcurrentConnections, NumChannels, 0, 0); |