/// <summary> /// Called when data is received from the client. /// </summary> /// <param name="data">The data from the client.</param> private void OnDataReceived(string data) { // Only accept GET requests if (!data.StartsWith("GET")) { SendResponse(Resources.html_path_options); _state.Disconnect(); return; } // Get path accessed var matches = PathMatchRegex.Matches(data); if (matches.Count == 0 || !matches[0].Groups[1].Success) { // A path could not be found in the request. SendResponse(Resources.html_path_options); _state.Disconnect(); return; } var path = matches[0].Groups[1].Value; // Get key and value if applicable. var key = matches[0].Groups[3].Success ? matches[0].Groups[3].Value : null; var value = matches[0].Groups[4].Success ? matches[0].Groups[4].Value : null; // Serve pages based on path. switch (path) { case "/scores": var scoresTable = _scoreboardServerController.GenerateScoresTable(); SendResponse(Resources.html_scores.Replace("TABLE", scoresTable)); break; case "/game": if (key == "id" && int.TryParse(value, out var id)) { var gameTable = _scoreboardServerController.GenerateGameTable(id); SendResponse(Resources.html_game.Replace("TABLE", gameTable)); } else { SendResponse(Resources.html_path_options); } break; case "/games": if (key == "player") { var gamesTable = _scoreboardServerController.GenerateGamesTable(value); SendResponse(Resources.html_games.Replace("TABLE", gamesTable)); } else { SendResponse(Resources.html_path_options); } break; default: SendResponse(Resources.html_path_options); break; } _state.Disconnect(); }