public async Task <BroadcastServerStatusResponse> BroadcastServerStatus(ISession session, BroadcastServerStatusRequest request) { _logger.Verbose( $"Handling {nameof(BroadcastServerStatusRequest)} " + $"(ServerName='{request.ServerName}', " + $"UserId='{request.UserId}', " + $"UserName='******', " + $"Secret='{request.Secret}', " + $"CurrentPlayerCount={request.CurrentPlayerCount}, " + $"MaximumPlayerCount={request.MaximumPlayerCount}, " + $"DiscoveryPolicy={request.DiscoveryPolicy}, " + $"InvitePolicy={request.InvitePolicy}, " + $"BeatmapDifficultyMask={request.Configuration.BeatmapDifficultyMask}, " + $"GameplayModifiersMask={request.Configuration.GameplayModifiersMask}, " + $"Random={BitConverter.ToString(request.Random)}, " + $"PublicKey={BitConverter.ToString(request.PublicKey)})." ); var server = await _serverRepository.GetServer(request.Secret); if (server != null) { return new BroadcastServerStatusResponse() { Result = BroadcastServerStatusResponse.ResultCode.SecretNotUnique } } ; // TODO: We should probably retry in the event that a duplicate // code is ever generated (pretty unlikely to happen though) session.Secret = request.Secret; server = new Server() { Host = new Player() { UserId = request.UserId, UserName = request.UserName }, RemoteEndPoint = (IPEndPoint)session.EndPoint, Secret = request.Secret, Code = _serverCodeProvider.Generate(), IsPublic = request.DiscoveryPolicy == DiscoveryPolicy.Public, DiscoveryPolicy = (Data.Enums.DiscoveryPolicy)request.DiscoveryPolicy, InvitePolicy = (Data.Enums.InvitePolicy)request.InvitePolicy, BeatmapDifficultyMask = (Data.Enums.BeatmapDifficultyMask)request.Configuration.BeatmapDifficultyMask, GameplayModifiersMask = (Data.Enums.GameplayModifiersMask)request.Configuration.GameplayModifiersMask, SongPackBloomFilterTop = request.Configuration.SongPackBloomFilterTop, SongPackBloomFilterBottom = request.Configuration.SongPackBloomFilterBottom, CurrentPlayerCount = request.CurrentPlayerCount, MaximumPlayerCount = request.MaximumPlayerCount, Random = request.Random, PublicKey = request.PublicKey }; if (!await _serverRepository.AddServer(server)) { _logger.Information( "Failed to create server " + $"(ServerName='{request.ServerName}', " + $"UserId='{request.UserId}', " + $"UserName='******', " + $"Secret='{request.Secret}', " + $"CurrentPlayerCount={request.CurrentPlayerCount}, " + $"MaximumPlayerCount={request.MaximumPlayerCount}, " + $"DiscoveryPolicy={request.DiscoveryPolicy}, " + $"InvitePolicy={request.InvitePolicy}, " + $"BeatmapDifficultyMask={request.Configuration.BeatmapDifficultyMask}, " + $"GameplayModifiersMask={request.Configuration.GameplayModifiersMask}, " + $"Random={BitConverter.ToString(request.Random)}, " + $"PublicKey={BitConverter.ToString(request.PublicKey)})." ); return(new BroadcastServerStatusResponse() { Result = BroadcastServerStatusResponse.ResultCode.UnknownError }); } _logger.Information( "Successfully created server " + $"(ServerName='{request.ServerName}', " + $"UserId='{request.UserId}', " + $"UserName='******', " + $"Secret='{request.Secret}', " + $"CurrentPlayerCount={request.CurrentPlayerCount}, " + $"MaximumPlayerCount={request.MaximumPlayerCount}, " + $"DiscoveryPolicy={request.DiscoveryPolicy}, " + $"InvitePolicy={request.InvitePolicy}, " + $"BeatmapDifficultyMask={request.Configuration.BeatmapDifficultyMask}, " + $"GameplayModifiersMask={request.Configuration.GameplayModifiersMask}, " + $"Random={BitConverter.ToString(request.Random)}, " + $"PublicKey={BitConverter.ToString(request.PublicKey)})." ); return(new BroadcastServerStatusResponse() { Result = BroadcastServerStatusResponse.ResultCode.Success, Code = server.Code, RemoteEndPoint = server.RemoteEndPoint }); }