summaryrefslogtreecommitdiff
path: root/src/network/room_member.cpp
diff options
context:
space:
mode:
authorGravatar B3n302017-07-09 10:40:11 +0200
committerGravatar B3n302017-07-16 21:29:34 +0200
commit641346c15c0091d59259f6acc5f8789efe16c937 (patch)
treedb87a00159c0feb35bb663b2e49ca8348451e4fe /src/network/room_member.cpp
parentNetwork: Init Network in SDL and QT (diff)
downloadyuzu-641346c15c0091d59259f6acc5f8789efe16c937.tar.gz
yuzu-641346c15c0091d59259f6acc5f8789efe16c937.tar.xz
yuzu-641346c15c0091d59259f6acc5f8789efe16c937.zip
Network: Enable to send WifiPackets
Diffstat (limited to '')
-rw-r--r--src/network/room_member.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/network/room_member.cpp b/src/network/room_member.cpp
index 09573ee43..f919e4de0 100644
--- a/src/network/room_member.cpp
+++ b/src/network/room_member.cpp
@@ -62,6 +62,12 @@ public:
62 * @param event The ENet event that was received. 62 * @param event The ENet event that was received.
63 */ 63 */
64 void HandleRoomInformationPacket(const ENetEvent* event); 64 void HandleRoomInformationPacket(const ENetEvent* event);
65
66 /**
67 * Extracts a WifiPacket from a received ENet packet.
68 * @param event The ENet event that was received.
69 */
70 void HandleWifiPackets(const ENetEvent* event);
65}; 71};
66 72
67// RoomMemberImpl 73// RoomMemberImpl
@@ -174,6 +180,34 @@ void RoomMember::RoomMemberImpl::HandleJoinPacket(const ENetEvent* event) {
174 // TODO(B3N30): Invoke callbacks 180 // TODO(B3N30): Invoke callbacks
175} 181}
176 182
183void RoomMember::RoomMemberImpl::HandleWifiPackets(const ENetEvent* event) {
184 WifiPacket wifi_packet{};
185 Packet packet;
186 packet.Append(event->packet->data, event->packet->dataLength);
187
188 // Ignore the first byte, which is the message id.
189 packet.IgnoreBytes(sizeof(MessageID));
190
191 // Parse the WifiPacket from the BitStream
192 uint8_t frame_type;
193 packet >> frame_type;
194 WifiPacket::PacketType type = static_cast<WifiPacket::PacketType>(frame_type);
195
196 wifi_packet.type = type;
197 packet >> wifi_packet.channel;
198 packet >> wifi_packet.transmitter_address;
199 packet >> wifi_packet.destination_address;
200
201 uint32_t data_length;
202 packet >> data_length;
203
204 std::vector<uint8_t> data(data_length);
205 packet >> data;
206
207 wifi_packet.data = std::move(data);
208 // TODO(B3N30): Invoke callbacks
209}
210
177// RoomMember 211// RoomMember
178RoomMember::RoomMember() : room_member_impl{std::make_unique<RoomMemberImpl>()} { 212RoomMember::RoomMember() : room_member_impl{std::make_unique<RoomMemberImpl>()} {
179 room_member_impl->client = enet_host_create(nullptr, 1, NumChannels, 0, 0); 213 room_member_impl->client = enet_host_create(nullptr, 1, NumChannels, 0, 0);
@@ -227,6 +261,18 @@ bool RoomMember::IsConnected() const {
227 return room_member_impl->IsConnected(); 261 return room_member_impl->IsConnected();
228} 262}
229 263
264void RoomMember::SendWifiPacket(const WifiPacket& wifi_packet) {
265 Packet packet;
266 packet << static_cast<MessageID>(IdWifiPacket);
267 packet << static_cast<uint8_t>(wifi_packet.type);
268 packet << wifi_packet.channel;
269 packet << wifi_packet.transmitter_address;
270 packet << wifi_packet.destination_address;
271 packet << static_cast<uint32_t>(wifi_packet.data.size());
272 packet << wifi_packet.data;
273 room_member_impl->Send(packet);
274}
275
230void RoomMember::Leave() { 276void RoomMember::Leave() {
231 ASSERT_MSG(room_member_impl->receive_thread != nullptr, "Must be in a room to leave it."); 277 ASSERT_MSG(room_member_impl->receive_thread != nullptr, "Must be in a room to leave it.");
232 { 278 {