diff options
| author | 2017-07-09 12:26:03 +0200 | |
|---|---|---|
| committer | 2017-07-16 21:29:49 +0200 | |
| commit | 42e57c121896818f9fbde5ddd9b7dbb5b2a267b1 (patch) | |
| tree | b3f27a02bc2cda201297c48fb52dfbc0efba326b /src/network/room_member.cpp | |
| parent | Network: Handle the disconnect of a client (diff) | |
| download | yuzu-42e57c121896818f9fbde5ddd9b7dbb5b2a267b1.tar.gz yuzu-42e57c121896818f9fbde5ddd9b7dbb5b2a267b1.tar.xz yuzu-42e57c121896818f9fbde5ddd9b7dbb5b2a267b1.zip | |
Network: Enable sending and receiving chat messages
Diffstat (limited to 'src/network/room_member.cpp')
| -rw-r--r-- | src/network/room_member.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/network/room_member.cpp b/src/network/room_member.cpp index f919e4de0..d68bb551d 100644 --- a/src/network/room_member.cpp +++ b/src/network/room_member.cpp | |||
| @@ -68,6 +68,12 @@ public: | |||
| 68 | * @param event The ENet event that was received. | 68 | * @param event The ENet event that was received. |
| 69 | */ | 69 | */ |
| 70 | void HandleWifiPackets(const ENetEvent* event); | 70 | void HandleWifiPackets(const ENetEvent* event); |
| 71 | |||
| 72 | /** | ||
| 73 | * Extracts a chat entry from a received ENet packet and adds it to the chat queue. | ||
| 74 | * @param event The ENet event that was received. | ||
| 75 | */ | ||
| 76 | void HandleChatPacket(const ENetEvent* event); | ||
| 71 | }; | 77 | }; |
| 72 | 78 | ||
| 73 | // RoomMemberImpl | 79 | // RoomMemberImpl |
| @@ -89,6 +95,9 @@ void RoomMember::RoomMemberImpl::ReceiveLoop() { | |||
| 89 | if (event.type == ENET_EVENT_TYPE_RECEIVE) { | 95 | if (event.type == ENET_EVENT_TYPE_RECEIVE) { |
| 90 | switch (event.packet->data[0]) { | 96 | switch (event.packet->data[0]) { |
| 91 | // TODO(B3N30): Handle the other message types | 97 | // TODO(B3N30): Handle the other message types |
| 98 | case IdChatMessage: | ||
| 99 | HandleChatPacket(&event); | ||
| 100 | break; | ||
| 92 | case IdRoomInformation: | 101 | case IdRoomInformation: |
| 93 | HandleRoomInformationPacket(&event); | 102 | HandleRoomInformationPacket(&event); |
| 94 | break; | 103 | break; |
| @@ -208,6 +217,19 @@ void RoomMember::RoomMemberImpl::HandleWifiPackets(const ENetEvent* event) { | |||
| 208 | // TODO(B3N30): Invoke callbacks | 217 | // TODO(B3N30): Invoke callbacks |
| 209 | } | 218 | } |
| 210 | 219 | ||
| 220 | void RoomMember::RoomMemberImpl::HandleChatPacket(const ENetEvent* event) { | ||
| 221 | Packet packet; | ||
| 222 | packet.Append(event->packet->data, event->packet->dataLength); | ||
| 223 | |||
| 224 | // Ignore the first byte, which is the message id. | ||
| 225 | packet.IgnoreBytes(sizeof(MessageID)); | ||
| 226 | |||
| 227 | ChatEntry chat_entry{}; | ||
| 228 | packet >> chat_entry.nickname; | ||
| 229 | packet >> chat_entry.message; | ||
| 230 | // TODO(B3N30): Invoke callbacks | ||
| 231 | } | ||
| 232 | |||
| 211 | // RoomMember | 233 | // RoomMember |
| 212 | RoomMember::RoomMember() : room_member_impl{std::make_unique<RoomMemberImpl>()} { | 234 | RoomMember::RoomMember() : room_member_impl{std::make_unique<RoomMemberImpl>()} { |
| 213 | room_member_impl->client = enet_host_create(nullptr, 1, NumChannels, 0, 0); | 235 | room_member_impl->client = enet_host_create(nullptr, 1, NumChannels, 0, 0); |
| @@ -273,6 +295,13 @@ void RoomMember::SendWifiPacket(const WifiPacket& wifi_packet) { | |||
| 273 | room_member_impl->Send(packet); | 295 | room_member_impl->Send(packet); |
| 274 | } | 296 | } |
| 275 | 297 | ||
| 298 | void RoomMember::SendChatMessage(const std::string& message) { | ||
| 299 | Packet packet; | ||
| 300 | packet << static_cast<MessageID>(IdChatMessage); | ||
| 301 | packet << message; | ||
| 302 | room_member_impl->Send(packet); | ||
| 303 | } | ||
| 304 | |||
| 276 | void RoomMember::Leave() { | 305 | void RoomMember::Leave() { |
| 277 | ASSERT_MSG(room_member_impl->receive_thread != nullptr, "Must be in a room to leave it."); | 306 | ASSERT_MSG(room_member_impl->receive_thread != nullptr, "Must be in a room to leave it."); |
| 278 | { | 307 | { |