| 2802 | } |
| 2803 | |
| 2804 | void MpLevelHandler::SendMessageToAll(StringView message, bool asChatFromServer) |
| 2805 | { |
| 2806 | String prefixedMessage = message; |
| 2807 | |
| 2808 | if (asChatFromServer) { |
| 2809 | prefixedMessage = "\f[c:#907060]Server:\f[/c] "_s + prefixedMessage; |
| 2810 | } |
| 2811 | |
| 2812 | MemoryStream packetOut(9 + message.size()); |
| 2813 | packetOut.WriteVariableUint32(0); // Local player ID |
| 2814 | packetOut.WriteValue<std::uint8_t>((std::uint8_t)UI::MessageLevel::Chat); |
| 2815 | packetOut.WriteVariableUint32((std::uint32_t)prefixedMessage.size()); |
| 2816 | packetOut.Write(prefixedMessage.data(), (std::uint32_t)prefixedMessage.size()); |
| 2817 | |
| 2818 | _networkManager->SendTo([this](const Peer& peer) { |
| 2819 | auto peerDesc = _networkManager->GetPeerDescriptor(peer); |
| 2820 | return (peerDesc && peerDesc->IsAuthenticated); |
| 2821 | }, NetworkChannel::Main, (std::uint8_t)ServerPacketType::ChatMessage, packetOut); |
| 2822 | |
| 2823 | InvokeAsync([this, message = std::move(prefixedMessage)]() mutable { |
| 2824 | _console->WriteLine(UI::MessageLevel::Info, message); |
| 2825 | }); |
| 2826 | } |
| 2827 | |
| 2828 | bool MpLevelHandler::OnPeerDisconnected(const Peer& peer) |
| 2829 | { |
no test coverage detected