diff options
| author | 2017-07-09 10:40:11 +0200 | |
|---|---|---|
| committer | 2017-07-16 21:29:34 +0200 | |
| commit | 641346c15c0091d59259f6acc5f8789efe16c937 (patch) | |
| tree | db87a00159c0feb35bb663b2e49ca8348451e4fe /src/network/room_member.cpp | |
| parent | Network: Init Network in SDL and QT (diff) | |
| download | yuzu-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.cpp | 46 |
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 | ||
| 183 | void 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 |
| 178 | RoomMember::RoomMember() : room_member_impl{std::make_unique<RoomMemberImpl>()} { | 212 | RoomMember::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 | ||
| 264 | void 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 | |||
| 230 | void RoomMember::Leave() { | 276 | void 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 | { |