示例#1
0
 /// <summary>
 /// Creates a new lobby with URIs asynchronously
 /// </summary>
 /// <param name="httpHostURI">HTTP host URI</param>
 /// <param name="webSocketHostURI">WebSocket host URI</param>
 /// <param name="isConnectionSecure">Is connection secure</param>
 /// <param name="username">Username</param>
 /// <param name="language">Language</param>
 /// <param name="isLobbyPublic">Is lobby public</param>
 /// <param name="maximalPlayerCount">Maximal player count</param>
 /// <param name="drawingTime">Drawing time</param>
 /// <param name="roundCount">Round count</param>
 /// <param name="customWordsString">Custom words string</param>
 /// <param name="customWordsChance">Custom words chance</param>
 /// <param name="isVotekickingEnabled">Is votekicking enabled</param>
 /// <param name="clientsPerIPLimit">Clients per IP limit</param>
 /// <returns>Lobby task</returns>
 private async Task<ILobby> CreateLobbyWithURIsAsync(Uri httpHostURI, Uri webSocketHostURI, bool isConnectionSecure, string username, ELanguage language, bool isLobbyPublic, uint maximalPlayerCount, ulong drawingTime, uint roundCount, string customWordsString, uint customWordsChance, bool isVotekickingEnabled, uint clientsPerIPLimit)
 {
     ILobby ret = null;
     ResponseWithUserSessionCookie<CreateLobbyResponseData> response_with_user_session_cookie = await SendHTTPPostRequestAsync<CreateLobbyResponseData>(new Uri(httpHostURI, "/v1/lobby"), new Dictionary<string, string>
     {
         { "username", username },
         { "language", Naming.GetLanguageString(language) },
         { "public", isLobbyPublic.ToString().ToLower() },
         { "max_players", maximalPlayerCount.ToString() },
         { "drawing_time", drawingTime.ToString() },
         { "rounds", roundCount.ToString() },
         { "custom_words", customWordsString },
         { "custom_words_chance", customWordsChance.ToString() },
         { "enable_votekick", isVotekickingEnabled.ToString().ToLower() },
         { "clients_per_ip_limit", clientsPerIPLimit.ToString() }
     });
     CreateLobbyResponseData response = response_with_user_session_cookie.Response;
     if ((response != null) && response.IsValid)
     {
         ClientWebSocket client_web_socket = new ClientWebSocket();
         client_web_socket.Options.Cookies = cookieContainer;
         await client_web_socket.ConnectAsync(new Uri(webSocketHostURI, $"/v1/ws?lobby_id={ Uri.EscapeUriString(response.LobbyID) }"), default);
         if (client_web_socket.State == WebSocketState.Open)
         {
             ret = new Lobby
             (
                 client_web_socket,
                 isConnectionSecure,
                 response.LobbyID,
                 response.MinimalDrawingTime,
                 response.MaximalDrawingTime,
                 response.MinimalRoundCount,
                 response.MaximalRoundCount,
                 response.MinimalMaximalPlayerCount,
                 response.MaximalMaximalPlayerCount,
                 response.MinimalClientsPerIPLimit,
                 response.MaximalClientsPerIPLimit,
                 response.MaximalPlayerCount,
                 response.CurrentMaximalRoundCount,
                 response.IsLobbyPublic,
                 response.IsVotekickingEnabled,
                 response.CustomWordsChance,
                 response.AllowedClientsPerIPCount,
                 response.DrawingBoardBaseWidth,
                 response.DrawingBoardBaseHeight,
                 response.MinimalBrushSize,
                 response.MaximalBrushSize,
                 response.SuggestedBrushSizes,
                 (Color)response.CanvasColor
             );
         }
         else
         {
             client_web_socket.Dispose();
         }
     }
     return ret;
 }
示例#2
0
 /// <summary>
 /// Changes lobby rules asynchronously
 /// </summary>
 /// <param name="language">Language (optional)</param>
 /// <param name="isLobbyPublic">Is lobby public (optional)</param>
 /// <param name="maximalPlayerCount">Maximal player count (optional)</param>
 /// <param name="drawingTime">Drawing time (optional)</param>
 /// <param name="roundCount">Round count (optional)</param>
 /// <param name="customWords">Custom words (optional)</param>
 /// <param name="customWordsChance">Custom words chance (optional)</param>
 /// <param name="isVotekickingEnabled">Is votekicking enabled (optional)</param>
 /// <param name="clientsPerIPLimit">Clients per IP limit (optional)</param>
 /// <returns>Task</returns>
 public async Task ChangeLobbyRulesAsync(ELanguage? language = null, bool? isLobbyPublic = null, uint? maximalPlayerCount = null, ulong? drawingTime = null, uint? roundCount = null, IReadOnlyList<string> customWords = null, uint? customWordsChance = null, bool? isVotekickingEnabled = null, uint? clientsPerIPLimit = null)
 {
     if ((language != null) && (language == ELanguage.Invalid))
     {
         throw new ArgumentException("Language can't be invalid.", nameof(language));
     }
     if ((maximalPlayerCount != null) && (maximalPlayerCount < 1U))
     {
         throw new ArgumentException("Maximal player count can't be smaller than one.", nameof(maximalPlayerCount));
     }
     if ((drawingTime != null) && (drawingTime < 1U))
     {
         throw new ArgumentException("Drawing time can't be smaller than one.", nameof(drawingTime));
     }
     if ((customWords != null) && !Protection.IsValid(customWords))
     {
         throw new ArgumentException("Custom words can't contain null.", nameof(customWords));
     }
     if ((clientsPerIPLimit != null) && (clientsPerIPLimit < 1U))
     {
         throw new ArgumentException("Clients per IP limit can't be smaller than one.", nameof(clientsPerIPLimit));
     }
     bool are_changes_specified = false;
     StringBuilder parameters_string_builder = new StringBuilder();
     if ((language != null) && (language != ELanguage.Invalid))
     {
         are_changes_specified = true;
         parameters_string_builder.Append($"language={ Uri.EscapeUriString(Naming.GetLanguageString(language.Value)) }");
     }
     if (isLobbyPublic != null)
     {
         if (are_changes_specified)
         {
             parameters_string_builder.Append("&");
         }
         else
         {
             are_changes_specified = true;
         }
         parameters_string_builder.Append($"public={ Uri.EscapeUriString(isLobbyPublic.Value.ToString().ToLower()) }");
     }
     if (maximalPlayerCount != null)
     {
         if (are_changes_specified)
         {
             parameters_string_builder.Append("&");
         }
         else
         {
             are_changes_specified = true;
         }
         parameters_string_builder.Append($"max_players={ Uri.EscapeUriString(maximalPlayerCount.Value.ToString()) }");
     }
     if (drawingTime != null)
     {
         if (are_changes_specified)
         {
             parameters_string_builder.Append("&");
         }
         else
         {
             are_changes_specified = true;
         }
         parameters_string_builder.Append($"drawing_time={ Uri.EscapeUriString(drawingTime.Value.ToString()) }");
     }
     if (roundCount != null)
     {
         if (are_changes_specified)
         {
             parameters_string_builder.Append("&");
         }
         else
         {
             are_changes_specified = true;
         }
         parameters_string_builder.Append($"rounds={ Uri.EscapeUriString(roundCount.Value.ToString()) }");
     }
     if (customWords != null)
     {
         if (are_changes_specified)
         {
             parameters_string_builder.Append("&");
         }
         else
         {
             are_changes_specified = true;
         }
         parameters_string_builder.Append($"custom_words=");
         bool is_first = true;
         foreach (string custom_word in customWords)
         {
             if (is_first)
             {
                 is_first = false;
             }
             else
             {
                 parameters_string_builder.Append(',');
             }
             parameters_string_builder.Append(Uri.EscapeUriString(roundCount.Value.ToString()));
         }
     }
     if (customWordsChance != null)
     {
         if (are_changes_specified)
         {
             parameters_string_builder.Append("&");
         }
         else
         {
             are_changes_specified = true;
         }
         parameters_string_builder.Append($"custom_words_chance={ Uri.EscapeUriString(customWordsChance.Value.ToString()) }");
     }
     if (isVotekickingEnabled != null)
     {
         if (are_changes_specified)
         {
             parameters_string_builder.Append("&");
         }
         else
         {
             are_changes_specified = true;
         }
         parameters_string_builder.Append($"enable_votekick={ Uri.EscapeUriString(isVotekickingEnabled.Value.ToString().ToLower()) }");
     }
     if (clientsPerIPLimit != null)
     {
         if (are_changes_specified)
         {
             parameters_string_builder.Append("&");
         }
         else
         {
             are_changes_specified = true;
         }
         parameters_string_builder.Append($"clients_per_ip_limit={ Uri.EscapeUriString(clientsPerIPLimit.Value.ToString()) }");
     }
     if (are_changes_specified)
     {
         bool is_successfull = await SendHTTPPATCHAsync(new Uri(HTTPHostURI, $"/v1/lobby?{ parameters_string_builder }"));
         if (!is_successfull && IsUsingSecureProtocols && IsAllowedToUseInsecureConnections)
         {
             await SendHTTPPATCHAsync(new Uri(InsecureHTTPHostURI, $"/v1/lobby?{ parameters_string_builder }"));
         }
     }
     parameters_string_builder.Clear();
 }