summaryrefslogtreecommitdiff
path: root/src/network/room_member.cpp
diff options
context:
space:
mode:
authorGravatar B3n302017-07-09 12:26:03 +0200
committerGravatar B3n302017-07-16 21:29:49 +0200
commit42e57c121896818f9fbde5ddd9b7dbb5b2a267b1 (patch)
treeb3f27a02bc2cda201297c48fb52dfbc0efba326b /src/network/room_member.cpp
parentNetwork: Handle the disconnect of a client (diff)
downloadyuzu-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.cpp29
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
220void 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
212RoomMember::RoomMember() : room_member_impl{std::make_unique<RoomMemberImpl>()} { 234RoomMember::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
298void 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
276void RoomMember::Leave() { 305void 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 {