diff --git a/Client/COOPAPI.cs b/Client/COOPAPI.cs
index f0b8ea1..ce0c57a 100644
--- a/Client/COOPAPI.cs
+++ b/Client/COOPAPI.cs
@@ -91,7 +91,7 @@ namespace RageCoop.Client
/// The server address to connect. Example: 127.0.0.1:4499
public static void Connect(string serverAddress)
{
- Networking.DisconnectFromServer(serverAddress);
+ Networking.ToggleConnection(serverAddress);
}
///
@@ -99,7 +99,7 @@ namespace RageCoop.Client
///
public static void Disconnect()
{
- Networking.DisconnectFromServer(null);
+ Networking.ToggleConnection(null);
}
///
diff --git a/Client/Menus/CoopMenu.cs b/Client/Menus/CoopMenu.cs
index 5821f5a..4133cae 100644
--- a/Client/Menus/CoopMenu.cs
+++ b/Client/Menus/CoopMenu.cs
@@ -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);
}
diff --git a/Client/Menus/Sub/ServersMenu.cs b/Client/Menus/Sub/ServersMenu.cs
index 84746bc..08a691f 100644
--- a/Client/Menus/Sub/ServersMenu.cs
+++ b/Client/Menus/Sub/ServersMenu.cs
@@ -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; }
}
///
/// Don't use it!
///
- 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;
///
/// Don't use it!
///
- 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 serverList = null;
try
@@ -100,34 +101,39 @@ namespace RageCoop.Client.Menus
return;
}
- CleanUpList();
- foreach (ServerListClass server in serverList)
+ // Need to be processed in main thread
+ Main.QueueAction(() =>
{
- 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~")}]" };
- tmpItem.Activated += (object sender, EventArgs e) =>
+
+ CleanUpList();
+ foreach (ServerListClass server in serverList)
{
- try
+ 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) =>
{
- MainMenu.Visible = false;
+ try
+ {
+ Menu.Visible = false;
- Networking.DisconnectFromServer(address);
+ Networking.ToggleConnection(address);
#if !NON_INTERACTIVE
- CoopMenu.ServerIpItem.AltTitle = address;
+ CoopMenu.ServerIpItem.AltTitle = address;
- CoopMenu.Menu.Visible = true;
+ CoopMenu.Menu.Visible = true;
#endif
- Main.Settings.LastServerAddress = address;
- Util.SaveSettings();
- }
- catch (Exception ex)
- {
- GTA.UI.Notification.Show($"~r~{ex.Message}");
- }
- };
- MainMenu.Add(tmpItem);
- }
+ Main.Settings.LastServerAddress = address;
+ Util.SaveSettings();
+ }
+ catch (Exception ex)
+ {
+ GTA.UI.Notification.Show($"~r~{ex.Message}");
+ }
+ };
+ Menu.Add(tmpItem);
+ }
+ });
}
}
}
\ No newline at end of file
diff --git a/Client/Networking/Networking.cs b/Client/Networking/Networking.cs
index 6343a75..f6ac8a7 100644
--- a/Client/Networking/Networking.cs
+++ b/Client/Networking/Networking.cs
@@ -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)
{
diff --git a/Client/Settings.cs b/Client/Settings.cs
index fadd534..12c8030 100644
--- a/Client/Settings.cs
+++ b/Client/Settings.cs
@@ -18,7 +18,7 @@ namespace RageCoop.Client
///
/// Don't use it!
///
- public string MasterServer { get; set; } = "https://ragecoop.online/gtav/servers";
+ public string MasterServer { get; set; } = "https://ragecoop.000webhostapp.com/master.php";
///
/// Don't use it!
///
diff --git a/Server/Allowlist.cs b/Server/Allowlist.cs
index e3ef508..56e9caa 100644
--- a/Server/Allowlist.cs
+++ b/Server/Allowlist.cs
@@ -1,9 +1 @@
using System.Collections.Generic;
-
-namespace RageCoop.Server
-{
- public class Allowlist
- {
- public List Username { get; set; } = new();
- }
-}
diff --git a/Server/Server.cs b/Server/Server.cs
index 93040f3..f4885e7 100644
--- a/Server/Server.cs
+++ b/Server/Server.cs
@@ -27,8 +27,6 @@ namespace RageCoop.Server
public static readonly Settings MainSettings = Util.Read("Settings.xml");
private readonly Blocklist _mainBlocklist = Util.Read("Blocklist.xml");
- private readonly Allowlist _mainAllowlist = Util.Read("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(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!");
diff --git a/Server/Settings.cs b/Server/Settings.cs
index a922e65..1a22740 100644
--- a/Server/Settings.cs
+++ b/Server/Settings.cs
@@ -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;
///
/// NPC data won't be sent to a player if their distance is greater than this value. -1 for unlimited.