void AOnlineBeaconClient::NotifyControlMessage(UNetConnection* Connection, uint8 MessageType, class FInBunch& Bunch) { if(NetDriver->ServerConnection) { check(Connection == NetDriver->ServerConnection); // We are the client #if !(UE_BUILD_SHIPPING && WITH_EDITOR) UE_LOG(LogBeacon, Log, TEXT("Client received: %s"), FNetControlMessageInfo::GetName(MessageType)); #endif switch (MessageType) { case NMT_BeaconWelcome: { Connection->ClientResponse = TEXT("0"); FNetControlMessage<NMT_Netspeed>::Send(Connection, Connection->CurrentNetSpeed); FString BeaconType = GetBeaconType(); if (!BeaconType.IsEmpty()) { FNetControlMessage<NMT_BeaconJoin>::Send(Connection, BeaconType); NetDriver->ServerConnection->FlushNet(); } else { // Force close the session UE_LOG(LogBeacon, Log, TEXT("Beacon close from invalid beacon type")); OnFailure(); } break; } case NMT_BeaconAssignGUID: { FNetworkGUID NetGUID; FNetControlMessage<NMT_BeaconAssignGUID>::Receive(Bunch, NetGUID); if (NetGUID.IsValid()) { Connection->Driver->GuidCache->RegisterNetGUID_Client( NetGUID, this ); FString BeaconType = GetBeaconType(); FNetControlMessage<NMT_BeaconNetGUIDAck>::Send(Connection, BeaconType); // Server will send ClientOnConnected() when it gets this control message // Fail safe for connection to server but no client connection RPC FTimerDelegate TimerDelegate = FTimerDelegate::CreateUObject(this, &AOnlineBeaconClient::OnFailure); GetWorldTimerManager().SetTimer(TimerHandle_OnFailure, TimerDelegate, BEACON_RPC_TIMEOUT, false); } else { // Force close the session UE_LOG(LogBeacon, Log, TEXT("Beacon close from invalid NetGUID")); OnFailure(); } break; } case NMT_Upgrade: { // Report mismatch. uint32 RemoteNetworkVersion; FNetControlMessage<NMT_Upgrade>::Receive(Bunch, RemoteNetworkVersion); // Upgrade const FString ConnectionError = NSLOCTEXT("Engine", "ClientOutdated", "The match you are trying to join is running an incompatible version of the game. Please try upgrading your game version.").ToString(); GEngine->BroadcastNetworkFailure(GetWorld(), NetDriver, ENetworkFailure::OutdatedClient, ConnectionError); break; } case NMT_Failure: { FString ErrorMsg; FNetControlMessage<NMT_Failure>::Receive(Bunch, ErrorMsg); if (ErrorMsg.IsEmpty()) { ErrorMsg = NSLOCTEXT("NetworkErrors", "GenericBeaconConnectionFailed", "Beacon Connection Failed.").ToString(); } // Force close the session UE_LOG(LogBeacon, Log, TEXT("Beacon close from NMT_Failure %s"), *ErrorMsg); OnFailure(); break; } case NMT_BeaconJoin: case NMT_BeaconNetGUIDAck: default: { // Force close the session UE_LOG(LogBeacon, Log, TEXT("Beacon close from unexpected control message")); OnFailure(); break; } } } }
void AQosBeaconHost::DumpState() const { UE_LOG(LogBeacon, Display, TEXT("Qos Beacon:"), *GetBeaconType()); UE_LOG(LogBeacon, Display, TEXT("Session that beacon is for: %s"), *SessionName.ToString()); UE_LOG(LogBeacon, Display, TEXT("Number of Qos requests: %d"), NumQosRequests); }