diff options
Diffstat (limited to 'src/network/room_member.cpp')
| -rw-r--r-- | src/network/room_member.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/network/room_member.cpp b/src/network/room_member.cpp index 06818af78..572e55a5b 100644 --- a/src/network/room_member.cpp +++ b/src/network/room_member.cpp | |||
| @@ -58,6 +58,7 @@ public: | |||
| 58 | 58 | ||
| 59 | private: | 59 | private: |
| 60 | CallbackSet<ProxyPacket> callback_set_proxy_packet; | 60 | CallbackSet<ProxyPacket> callback_set_proxy_packet; |
| 61 | CallbackSet<LDNPacket> callback_set_ldn_packet; | ||
| 61 | CallbackSet<ChatEntry> callback_set_chat_messages; | 62 | CallbackSet<ChatEntry> callback_set_chat_messages; |
| 62 | CallbackSet<StatusMessageEntry> callback_set_status_messages; | 63 | CallbackSet<StatusMessageEntry> callback_set_status_messages; |
| 63 | CallbackSet<RoomInformation> callback_set_room_information; | 64 | CallbackSet<RoomInformation> callback_set_room_information; |
| @@ -108,6 +109,12 @@ public: | |||
| 108 | void HandleProxyPackets(const ENetEvent* event); | 109 | void HandleProxyPackets(const ENetEvent* event); |
| 109 | 110 | ||
| 110 | /** | 111 | /** |
| 112 | * Extracts an LdnPacket from a received ENet packet. | ||
| 113 | * @param event The ENet event that was received. | ||
| 114 | */ | ||
| 115 | void HandleLdnPackets(const ENetEvent* event); | ||
| 116 | |||
| 117 | /** | ||
| 111 | * Extracts a chat entry from a received ENet packet and adds it to the chat queue. | 118 | * Extracts a chat entry from a received ENet packet and adds it to the chat queue. |
| 112 | * @param event The ENet event that was received. | 119 | * @param event The ENet event that was received. |
| 113 | */ | 120 | */ |
| @@ -166,6 +173,9 @@ void RoomMember::RoomMemberImpl::MemberLoop() { | |||
| 166 | case IdProxyPacket: | 173 | case IdProxyPacket: |
| 167 | HandleProxyPackets(&event); | 174 | HandleProxyPackets(&event); |
| 168 | break; | 175 | break; |
| 176 | case IdLdnPacket: | ||
| 177 | HandleLdnPackets(&event); | ||
| 178 | break; | ||
| 169 | case IdChatMessage: | 179 | case IdChatMessage: |
| 170 | HandleChatPacket(&event); | 180 | HandleChatPacket(&event); |
| 171 | break; | 181 | break; |
| @@ -372,6 +382,27 @@ void RoomMember::RoomMemberImpl::HandleProxyPackets(const ENetEvent* event) { | |||
| 372 | Invoke<ProxyPacket>(proxy_packet); | 382 | Invoke<ProxyPacket>(proxy_packet); |
| 373 | } | 383 | } |
| 374 | 384 | ||
| 385 | void RoomMember::RoomMemberImpl::HandleLdnPackets(const ENetEvent* event) { | ||
| 386 | LDNPacket ldn_packet{}; | ||
| 387 | Packet packet; | ||
| 388 | packet.Append(event->packet->data, event->packet->dataLength); | ||
| 389 | |||
| 390 | // Ignore the first byte, which is the message id. | ||
| 391 | packet.IgnoreBytes(sizeof(u8)); // Ignore the message type | ||
| 392 | |||
| 393 | u8 packet_type; | ||
| 394 | packet.Read(packet_type); | ||
| 395 | ldn_packet.type = static_cast<LDNPacketType>(packet_type); | ||
| 396 | |||
| 397 | packet.Read(ldn_packet.local_ip); | ||
| 398 | packet.Read(ldn_packet.remote_ip); | ||
| 399 | packet.Read(ldn_packet.broadcast); | ||
| 400 | |||
| 401 | packet.Read(ldn_packet.data); | ||
| 402 | |||
| 403 | Invoke<LDNPacket>(ldn_packet); | ||
| 404 | } | ||
| 405 | |||
| 375 | void RoomMember::RoomMemberImpl::HandleChatPacket(const ENetEvent* event) { | 406 | void RoomMember::RoomMemberImpl::HandleChatPacket(const ENetEvent* event) { |
| 376 | Packet packet; | 407 | Packet packet; |
| 377 | packet.Append(event->packet->data, event->packet->dataLength); | 408 | packet.Append(event->packet->data, event->packet->dataLength); |
| @@ -450,6 +481,11 @@ RoomMember::RoomMemberImpl::CallbackSet<ProxyPacket>& RoomMember::RoomMemberImpl | |||
| 450 | } | 481 | } |
| 451 | 482 | ||
| 452 | template <> | 483 | template <> |
| 484 | RoomMember::RoomMemberImpl::CallbackSet<LDNPacket>& RoomMember::RoomMemberImpl::Callbacks::Get() { | ||
| 485 | return callback_set_ldn_packet; | ||
| 486 | } | ||
| 487 | |||
| 488 | template <> | ||
| 453 | RoomMember::RoomMemberImpl::CallbackSet<RoomMember::State>& | 489 | RoomMember::RoomMemberImpl::CallbackSet<RoomMember::State>& |
| 454 | RoomMember::RoomMemberImpl::Callbacks::Get() { | 490 | RoomMember::RoomMemberImpl::Callbacks::Get() { |
| 455 | return callback_set_state; | 491 | return callback_set_state; |
| @@ -607,6 +643,21 @@ void RoomMember::SendProxyPacket(const ProxyPacket& proxy_packet) { | |||
| 607 | room_member_impl->Send(std::move(packet)); | 643 | room_member_impl->Send(std::move(packet)); |
| 608 | } | 644 | } |
| 609 | 645 | ||
| 646 | void RoomMember::SendLdnPacket(const LDNPacket& ldn_packet) { | ||
| 647 | Packet packet; | ||
| 648 | packet.Write(static_cast<u8>(IdLdnPacket)); | ||
| 649 | |||
| 650 | packet.Write(static_cast<u8>(ldn_packet.type)); | ||
| 651 | |||
| 652 | packet.Write(ldn_packet.local_ip); | ||
| 653 | packet.Write(ldn_packet.remote_ip); | ||
| 654 | packet.Write(ldn_packet.broadcast); | ||
| 655 | |||
| 656 | packet.Write(ldn_packet.data); | ||
| 657 | |||
| 658 | room_member_impl->Send(std::move(packet)); | ||
| 659 | } | ||
| 660 | |||
| 610 | void RoomMember::SendChatMessage(const std::string& message) { | 661 | void RoomMember::SendChatMessage(const std::string& message) { |
| 611 | Packet packet; | 662 | Packet packet; |
| 612 | packet.Write(static_cast<u8>(IdChatMessage)); | 663 | packet.Write(static_cast<u8>(IdChatMessage)); |
| @@ -663,6 +714,11 @@ RoomMember::CallbackHandle<ProxyPacket> RoomMember::BindOnProxyPacketReceived( | |||
| 663 | return room_member_impl->Bind(callback); | 714 | return room_member_impl->Bind(callback); |
| 664 | } | 715 | } |
| 665 | 716 | ||
| 717 | RoomMember::CallbackHandle<LDNPacket> RoomMember::BindOnLdnPacketReceived( | ||
| 718 | std::function<void(const LDNPacket&)> callback) { | ||
| 719 | return room_member_impl->Bind(callback); | ||
| 720 | } | ||
| 721 | |||
| 666 | RoomMember::CallbackHandle<RoomInformation> RoomMember::BindOnRoomInformationChanged( | 722 | RoomMember::CallbackHandle<RoomInformation> RoomMember::BindOnRoomInformationChanged( |
| 667 | std::function<void(const RoomInformation&)> callback) { | 723 | std::function<void(const RoomInformation&)> callback) { |
| 668 | return room_member_impl->Bind(callback); | 724 | return room_member_impl->Bind(callback); |
| @@ -699,6 +755,7 @@ void RoomMember::Leave() { | |||
| 699 | } | 755 | } |
| 700 | 756 | ||
| 701 | template void RoomMember::Unbind(CallbackHandle<ProxyPacket>); | 757 | template void RoomMember::Unbind(CallbackHandle<ProxyPacket>); |
| 758 | template void RoomMember::Unbind(CallbackHandle<LDNPacket>); | ||
| 702 | template void RoomMember::Unbind(CallbackHandle<RoomMember::State>); | 759 | template void RoomMember::Unbind(CallbackHandle<RoomMember::State>); |
| 703 | template void RoomMember::Unbind(CallbackHandle<RoomMember::Error>); | 760 | template void RoomMember::Unbind(CallbackHandle<RoomMember::Error>); |
| 704 | template void RoomMember::Unbind(CallbackHandle<RoomInformation>); | 761 | template void RoomMember::Unbind(CallbackHandle<RoomInformation>); |