summaryrefslogtreecommitdiff
path: root/src/network/room.cpp
diff options
context:
space:
mode:
authorGravatar B3n302017-07-14 09:20:39 +0200
committerGravatar B3n302017-07-16 21:30:04 +0200
commita0626221a52056669c0b6d19b37d4189c1671fb7 (patch)
tree13b05ebe3fe162c1d90f79dc38c9e7129958bc2e /src/network/room.cpp
parentNetwork: Send the game title (diff)
downloadyuzu-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.cpp35
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
248void 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
235void Room::RoomImpl::SendJoinSuccess(ENetPeer* client, MacAddress mac_address) { 259void 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;
369void Room::Create(const std::string& name, const std::string& server_address, u16 server_port) { 393void 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);