Master server is back!

This commit is contained in:
Sardelka
2022-05-31 23:12:32 -08:00
parent 9d9d421671
commit 7aa41a6e0c
8 changed files with 63 additions and 69 deletions

View File

@ -91,7 +91,7 @@ namespace RageCoop.Client
/// <param name="serverAddress">The server address to connect. Example: 127.0.0.1:4499</param>
public static void Connect(string serverAddress)
{
Networking.DisconnectFromServer(serverAddress);
Networking.ToggleConnection(serverAddress);
}
/// <summary>
@ -99,7 +99,7 @@ namespace RageCoop.Client
/// </summary>
public static void Disconnect()
{
Networking.DisconnectFromServer(null);
Networking.ToggleConnection(null);
}
/// <summary>

View File

@ -41,9 +41,11 @@ namespace RageCoop.Client.Menus
_usernameItem.Activated += UsernameActivated;
ServerIpItem.Activated += ServerIpActivated;
_serverConnectItem.Activated += (sender, item) => { Networking.DisconnectFromServer(Main.Settings.LastServerAddress); };
_serverConnectItem.Activated += (sender, item) => { Networking.ToggleConnection(Main.Settings.LastServerAddress); };
Menu.AddSubMenu(ServersMenu.Menu);
Menu.Add(_usernameItem);
Menu.Add(ServerIpItem);
Menu.Add(_serverConnectItem);
@ -58,6 +60,7 @@ namespace RageCoop.Client.Menus
MenuPool.Add(DevToolMenu.Menu);
MenuPool.Add(DebugMenu.Menu);
MenuPool.Add(DebugMenu.DiagnosticMenu);
MenuPool.Add(ServersMenu.Menu);
Menu.Add(_aboutItem);
}

View File

@ -4,71 +4,72 @@ using System.Drawing;
using System.Collections.Generic;
using Newtonsoft.Json;
using LemonUI.Menus;
using System.Threading;
namespace RageCoop.Client.Menus
{
internal class ServerListClass
{
[JsonProperty("address")]
public string Address { get; set; }
[JsonProperty("port")]
public string Port { get; set; }
[JsonProperty("ip")]
public string IP { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("version")]
public string Version { get; set; }
[JsonProperty("players")]
public int Players { get; set; }
[JsonProperty("maxPlayers")]
public int MaxPlayers { get; set; }
[JsonProperty("allowlist")]
public bool AllowList { get; set; }
[JsonProperty("mods")]
public bool Mods { get; set; }
[JsonProperty("npcs")]
public bool NPCs { get; set; }
[JsonProperty("country")]
public string Country { get; set; }
}
/// <summary>
/// Don't use it!
/// </summary>
internal class Servers
internal static class ServersMenu
{
internal NativeMenu MainMenu = new NativeMenu("RAGECOOP", "Servers", "Go to the server list")
private static Thread GetServersThread;
internal static NativeMenu Menu = new NativeMenu("RAGECOOP", "Servers", "Go to the server list")
{
UseMouse = false,
Alignment = Main.Settings.FlipMenu ? GTA.UI.Alignment.Right : GTA.UI.Alignment.Left
};
internal NativeItem ResultItem = null;
internal static NativeItem ResultItem = null;
/// <summary>
/// Don't use it!
/// </summary>
public Servers()
static ServersMenu()
{
MainMenu.Banner.Color = Color.FromArgb(225, 0, 0, 0);
MainMenu.Title.Color = Color.FromArgb(255, 165, 0);
Menu.Banner.Color = Color.FromArgb(225, 0, 0, 0);
Menu.Title.Color = Color.FromArgb(255, 165, 0);
MainMenu.Opening += (object sender, System.ComponentModel.CancelEventArgs e) =>
Menu.Opening += (object sender, System.ComponentModel.CancelEventArgs e) =>
{
MainMenu.Add(ResultItem = new NativeItem("Loading..."));
GetAllServer();
CleanUpList();
Menu.Add(ResultItem = new NativeItem("Loading..."));
// Prevent freezing
if (GetServersThread!=null && GetServersThread.IsAlive) { GetServersThread?.Abort(); }
GetServersThread=new Thread(()=> GetAllServers());
GetServersThread.Start();
};
MainMenu.Closing += (object sender, System.ComponentModel.CancelEventArgs e) =>
Menu.Closing += (object sender, System.ComponentModel.CancelEventArgs e) =>
{
CleanUpList();
};
}
private void CleanUpList()
private static void CleanUpList()
{
MainMenu.Clear();
Menu.Clear();
ResultItem = null;
}
private void GetAllServer()
private static void GetAllServers()
{
List<ServerListClass> serverList = null;
try
@ -100,19 +101,23 @@ namespace RageCoop.Client.Menus
return;
}
CleanUpList();
// Need to be processed in main thread
Main.QueueAction(() =>
{
CleanUpList();
foreach (ServerListClass server in serverList)
{
string address = $"{server.Address}:{server.Port}";
NativeItem tmpItem = new NativeItem($"[{server.Country}] {server.Name}", $"~b~{address}~s~~n~~g~Version {server.Version}.x~s~~n~Mods = {server.Mods}~n~NPCs = {server.NPCs}") { AltTitle = $"[{server.Players}/{server.MaxPlayers}][{(server.AllowList ? "~r~X~s~" : "~g~O~s~")}]" };
string address = server.IP;
NativeItem tmpItem = new NativeItem($"{server.Name}", $"~b~{address}~s~~n~~g~Version {server.Version}.x~s~") { AltTitle = $"[{server.Players}/{server.MaxPlayers}]" };
tmpItem.Activated += (object sender, EventArgs e) =>
{
try
{
MainMenu.Visible = false;
Menu.Visible = false;
Networking.DisconnectFromServer(address);
Networking.ToggleConnection(address);
#if !NON_INTERACTIVE
CoopMenu.ServerIpItem.AltTitle = address;
@ -126,8 +131,9 @@ namespace RageCoop.Client.Menus
GTA.UI.Notification.Show($"~r~{ex.Message}");
}
};
MainMenu.Add(tmpItem);
Menu.Add(tmpItem);
}
});
}
}
}

View File

@ -20,7 +20,7 @@ namespace RageCoop.Client
public static int BytesSend = 0;
private static Thread ReceiveThread;
public static void DisconnectFromServer(string address)
public static void ToggleConnection(string address)
{
if (IsOnServer)
{

View File

@ -18,7 +18,7 @@ namespace RageCoop.Client
/// <summary>
/// Don't use it!
/// </summary>
public string MasterServer { get; set; } = "https://ragecoop.online/gtav/servers";
public string MasterServer { get; set; } = "https://ragecoop.000webhostapp.com/master.php";
/// <summary>
/// Don't use it!
/// </summary>

View File

@ -1,9 +1 @@
using System.Collections.Generic;
namespace RageCoop.Server
{
public class Allowlist
{
public List<string> Username { get; set; } = new();
}
}

View File

@ -27,8 +27,6 @@ namespace RageCoop.Server
public static readonly Settings MainSettings = Util.Read<Settings>("Settings.xml");
private readonly Blocklist _mainBlocklist = Util.Read<Blocklist>("Blocklist.xml");
private readonly Allowlist _mainAllowlist = Util.Read<Allowlist>("Allowlist.xml");
public static NetServer MainNetServer;
public static Resource RunningResource = null;
@ -104,6 +102,7 @@ namespace RageCoop.Server
string content = await response.Content.ReadAsStringAsync();
info = JsonConvert.DeserializeObject<IpInfo>(content);
Program.Logger.Info($"Your public IP is {info.Address}");
}
catch (Exception ex)
{
@ -120,10 +119,8 @@ namespace RageCoop.Server
"\"name\": \"" + MainSettings.Name + "\", " +
"\"version\": \"" + _compatibleVersion.Replace("_", ".") + "\", " +
"\"players\": \"" + MainNetServer.ConnectionsCount + "\", " +
"\"maxPlayers\": \"" + MainSettings.MaxPlayers + "\", " +
"\"allowlist\": \"" + _mainAllowlist.Username.Any() + "\", " +
"\"maxPlayers\": \"" + MainSettings.MaxPlayers + "\"" +
" }";
HttpResponseMessage response = null;
try
{
@ -152,6 +149,7 @@ namespace RageCoop.Server
else
{
Program.Logger.Error($"MasterServer: [{(int)response.StatusCode}]");
Program.Logger.Error($"MasterServer: [{await response.Content.ReadAsStringAsync()}]");
}
}
@ -644,11 +642,6 @@ namespace RageCoop.Server
local.Deny("Username contains special chars!");
return;
}
if (_mainAllowlist.Username.Any() && !_mainAllowlist.Username.Contains(packet.Username.ToLower()))
{
local.Deny("This Username is not on the allow list!");
return;
}
if (_mainBlocklist.Username.Contains(packet.Username.ToLower()))
{
local.Deny("This Username has been blocked by this server!");

View File

@ -10,7 +10,7 @@
public string Resource { get; set; } = "";
public bool UPnP { get; set; } = true;
public bool AnnounceSelf { get; set; } = false;
public string MasterServer { get; set; } = "https://ragecoop.online/gtav/servers";
public string MasterServer { get; set; } = "https://ragecoop.000webhostapp.com/master.php";
public bool DebugMode { get; set; } = false;
/// <summary>
/// NPC data won't be sent to a player if their distance is greater than this value. -1 for unlimited.