diff --git a/RageCoop.Server/Scripting/API.cs b/RageCoop.Server/Scripting/API.cs
index b9b4ca4..cee31ff 100644
--- a/RageCoop.Server/Scripting/API.cs
+++ b/RageCoop.Server/Scripting/API.cs
@@ -192,7 +192,8 @@ namespace RageCoop.Server.Scripting
/// The Client from this user or null
public Client GetClientByUsername(string username)
{
- return Server.Clients.Values.FirstOrDefault(x => x.Username.ToLower() == username.ToLower());
+ Server.ClientsByName.TryGetValue(username, out Client c);
+ return c;
}
///
@@ -212,7 +213,7 @@ namespace RageCoop.Server.Scripting
{
return;
}
- targets ??= new(Server.Clients.Values);
+ targets ??= new(Server.ClientsByNetHandle.Values);
foreach(Client client in targets)
{
Server.SendChatMessage(username, message, client);
@@ -317,7 +318,7 @@ namespace RageCoop.Server.Scripting
public void SendCustomEvent(List targets, int eventHash, params object[] args)
{
- targets ??= new(Server.Clients.Values);
+ targets ??= new(Server.ClientsByNetHandle.Values);
var p = new Packets.CustomEvent()
{
Args=args,
@@ -338,7 +339,7 @@ namespace RageCoop.Server.Scripting
public void SendCustomEventQueued(List targets, int eventHash, params object[] args)
{
- targets ??= new(Server.Clients.Values);
+ targets ??= new(Server.ClientsByNetHandle.Values);
var p = new Packets.CustomEvent(null,true)
{
Args=args,
diff --git a/RageCoop.Server/Server.cs b/RageCoop.Server/Server.cs
index 5a362a7..7b38082 100644
--- a/RageCoop.Server/Server.cs
+++ b/RageCoop.Server/Server.cs
@@ -44,7 +44,7 @@ namespace RageCoop.Server
internal ServerEntities Entities;
internal readonly Dictionary> Commands = new();
- internal readonly Dictionary Clients = new();
+ internal readonly Dictionary ClientsByNetHandle = new();
internal readonly Dictionary ClientsByName = new();
internal Client _hostClient;
@@ -88,7 +88,7 @@ namespace RageCoop.Server
{
while (!_stopping)
{
- foreach(var c in Clients.Values.ToArray())
+ foreach(var c in ClientsByNetHandle.Values.ToArray())
{
c.UpdateLatency();
}
@@ -316,7 +316,7 @@ namespace RageCoop.Server
case NetIncomingMessageType.StatusChanged:
{
// Get sender client
- if (!Clients.TryGetValue(message.SenderConnection.RemoteUniqueIdentifier, out sender))
+ if (!ClientsByNetHandle.TryGetValue(message.SenderConnection.RemoteUniqueIdentifier, out sender))
{
break;
}
@@ -339,7 +339,7 @@ namespace RageCoop.Server
{
// Get sender client
- if (Clients.TryGetValue(message.SenderConnection.RemoteUniqueIdentifier, out sender))
+ if (ClientsByNetHandle.TryGetValue(message.SenderConnection.RemoteUniqueIdentifier, out sender))
{
// Get packet type
var type = (PacketType)message.ReadByte();
@@ -531,7 +531,7 @@ namespace RageCoop.Server
connection.Deny("Username contains special chars!");
return;
}
- if (Clients.Values.Any(x => x.Username.ToLower() == packet.Username.ToLower()))
+ if (ClientsByNetHandle.Values.Any(x => x.Username.ToLower() == packet.Username.ToLower()))
{
connection.Deny("Username is already taken!");
return;
@@ -566,14 +566,14 @@ namespace RageCoop.Server
Client tmpClient;
// Add the player to Players
- lock (Clients)
+ lock (ClientsByNetHandle)
{
var player = new ServerPed(this)
{
ID= packet.PedID,
};
Entities.Add(player);
- Clients.Add(connection.RemoteUniqueIdentifier,
+ ClientsByNetHandle.Add(connection.RemoteUniqueIdentifier,
tmpClient = new Client(this)
{
NetID = connection.RemoteUniqueIdentifier,
@@ -582,8 +582,8 @@ namespace RageCoop.Server
Player = player
}
);
- ClientsByName.Add(packet.Username, tmpClient);
- if (Clients.Count==1) {
+ ClientsByName.Add(packet.Username.ToLower(), tmpClient);
+ if (ClientsByNetHandle.Count==1) {
_hostClient=tmpClient;
}
}
@@ -601,7 +601,7 @@ namespace RageCoop.Server
}
// Send other players to this client
- Clients.Values.ForEach(target =>
+ ClientsByNetHandle.Values.ForEach(target =>
{
if (target==newClient) { return; }
NetOutgoingMessage outgoingMessage = MainNetServer.CreateMessage();
@@ -661,12 +661,12 @@ namespace RageCoop.Server
Entities.CleanUp(localClient);
_worker.QueueJob(() => API.Events.InvokePlayerDisconnected(localClient));
Logger?.Info($"Player {localClient.Username} disconnected! ID:{localClient.Player.ID}");
- Clients.Remove(localClient.NetID);
- ClientsByName.Remove(localClient.Username);
+ ClientsByNetHandle.Remove(localClient.NetID);
+ ClientsByName.Remove(localClient.Username.ToLower());
if (localClient==_hostClient)
{
- _hostClient = Clients.Values.FirstOrDefault();
+ _hostClient = ClientsByNetHandle.Values.FirstOrDefault();
_hostClient?.SendCustomEvent(CustomEvents.IsHost, true);
}
Security.RemoveConnection(localClient.Connection.RemoteEndPoint);
@@ -685,7 +685,7 @@ namespace RageCoop.Server
_worker.QueueJob(() => API.Events.InvokePlayerUpdate(client));
}
- foreach (var c in Clients.Values)
+ foreach (var c in ClientsByNetHandle.Values)
{
// Don't send data back
@@ -713,7 +713,7 @@ namespace RageCoop.Server
{
_worker.QueueJob(() => Entities.Update(packet, client));
bool isPlayer = packet.ID==client.Player?.LastVehicle?.ID;
- foreach (var c in Clients.Values)
+ foreach (var c in ClientsByNetHandle.Values)
{
if (c.NetID==client.NetID) { continue; }
if (isPlayer)
@@ -737,7 +737,7 @@ namespace RageCoop.Server
private void ProjectileSync(Packets.ProjectileSync packet, Client client)
{
- foreach (var c in Clients.Values)
+ foreach (var c in ClientsByNetHandle.Values)
{
if (c.NetID==client.NetID) { continue; }
NetOutgoingMessage outgoingMessage = MainNetServer.CreateMessage();
@@ -761,7 +761,7 @@ namespace RageCoop.Server
_worker.QueueJob(() => API.Events.InvokeOnChatMessage(message, sender));
- foreach(var c in Clients.Values)
+ foreach(var c in ClientsByNetHandle.Values)
{
var msg = MainNetServer.CreateMessage();
var crypt = new Func((s) =>