Bug fixes and small changes

This commit is contained in:
EntenKoeniq
2021-12-11 12:35:17 +01:00
parent be11e4984c
commit 2a6a9bf004
3 changed files with 55 additions and 64 deletions

View File

@ -96,9 +96,7 @@ namespace CoopServer
info = new() { Country = "?" }; info = new() { Country = "?" };
} }
bool responseError = false; while (!Program.ReadyToStop)
while (!Program.ReadyToStop && !responseError)
{ {
string msg = string msg =
"{ " + "{ " +
@ -114,7 +112,6 @@ namespace CoopServer
" }"; " }";
HttpResponseMessage response = null; HttpResponseMessage response = null;
string responseContent = "";
try try
{ {
response = await httpClient.PostAsync(MainSettings.MasterServer, new StringContent(msg, Encoding.UTF8, "application/json")); response = await httpClient.PostAsync(MainSettings.MasterServer, new StringContent(msg, Encoding.UTF8, "application/json"));
@ -123,8 +120,6 @@ namespace CoopServer
Logging.Error("MasterServer: Something went wrong!"); Logging.Error("MasterServer: Something went wrong!");
break; break;
} }
responseContent = await response.Content.ReadAsStringAsync();
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -135,7 +130,7 @@ namespace CoopServer
if (response.StatusCode != System.Net.HttpStatusCode.OK) if (response.StatusCode != System.Net.HttpStatusCode.OK)
{ {
Logging.Error($"MasterServer: {response.StatusCode}"); Logging.Error($"MasterServer: {response.StatusCode}");
responseError = true; break;
} }
else else
{ {
@ -361,7 +356,7 @@ namespace CoopServer
packet.NetIncomingMessageToPacket(message); packet.NetIncomingMessageToPacket(message);
NativeResponsePacket responsePacket = (NativeResponsePacket)packet; NativeResponsePacket responsePacket = (NativeResponsePacket)packet;
Client client = Clients.FirstOrDefault(x => x.ID == message.SenderConnection.RemoteUniqueIdentifier); Client client = Clients.Find(x => x.ID == message.SenderConnection.RemoteUniqueIdentifier);
if (client != null) if (client != null)
{ {
if (client.Callbacks.ContainsKey(responsePacket.ID)) if (client.Callbacks.ContainsKey(responsePacket.ID))
@ -419,7 +414,7 @@ namespace CoopServer
if (modPacket.Target != 0) if (modPacket.Target != 0)
{ {
NetConnection target = MainNetServer.Connections.FirstOrDefault(x => x.RemoteUniqueIdentifier == modPacket.Target); NetConnection target = MainNetServer.Connections.Find(x => x.RemoteUniqueIdentifier == modPacket.Target);
if (target == null) if (target == null)
{ {
Logging.Error($"[ModPacket] target \"{modPacket.Target}\" not found!"); Logging.Error($"[ModPacket] target \"{modPacket.Target}\" not found!");
@ -454,7 +449,7 @@ namespace CoopServer
break; break;
case NetIncomingMessageType.ConnectionLatencyUpdated: case NetIncomingMessageType.ConnectionLatencyUpdated:
{ {
Client client = Clients.FirstOrDefault(x => x.ID == message.SenderConnection.RemoteUniqueIdentifier); Client client = Clients.Find(x => x.ID == message.SenderConnection.RemoteUniqueIdentifier);
if (client != null) if (client != null)
{ {
client.Latency = message.ReadFloat(); client.Latency = message.ReadFloat();
@ -606,7 +601,7 @@ namespace CoopServer
// The connection has been approved, now we need to send all other players to the new player and the new player to all players // The connection has been approved, now we need to send all other players to the new player and the new player to all players
private static void SendPlayerConnectPacket(NetConnection local, PlayerConnectPacket packet) private static void SendPlayerConnectPacket(NetConnection local, PlayerConnectPacket packet)
{ {
Client localClient = Clients.FirstOrDefault(x => x.ID == packet.ID); Client localClient = Clients.Find(x => x.ID == packet.ID);
if (localClient == null) if (localClient == null)
{ {
local.Disconnect("No data found!"); local.Disconnect("No data found!");
@ -621,7 +616,7 @@ namespace CoopServer
{ {
long targetPlayerID = targetPlayer.RemoteUniqueIdentifier; long targetPlayerID = targetPlayer.RemoteUniqueIdentifier;
Client targetClient = Clients.FirstOrDefault(x => x.ID == targetPlayerID); Client targetClient = Clients.Find(x => x.ID == targetPlayerID);
if (targetClient != null) if (targetClient != null)
{ {
NetOutgoingMessage outgoingMessage = MainNetServer.CreateMessage(); NetOutgoingMessage outgoingMessage = MainNetServer.CreateMessage();
@ -675,7 +670,7 @@ namespace CoopServer
MainNetServer.SendMessage(outgoingMessage, clients, NetDeliveryMethod.ReliableOrdered, 0); MainNetServer.SendMessage(outgoingMessage, clients, NetDeliveryMethod.ReliableOrdered, 0);
} }
Client localClient = Clients.FirstOrDefault(x => x.ID == clientID); Client localClient = Clients.Find(x => x.ID == clientID);
if (localClient == null) if (localClient == null)
{ {
return; return;
@ -695,21 +690,16 @@ namespace CoopServer
private static void FullSyncPlayer(FullSyncPlayerPacket packet) private static void FullSyncPlayer(FullSyncPlayerPacket packet)
{ {
Client tmpClient = Clients.FirstOrDefault(x => x.ID == packet.Extra.ID); Client client = Util.GetClientByID(packet.Extra.ID);
if (tmpClient == null) if (client == null)
{ {
NetConnection localConn = MainNetServer.Connections.Find(x => packet.Extra.ID == x.RemoteUniqueIdentifier);
if (localConn != null)
{
localConn.Disconnect("No data found!");
}
return; return;
} }
tmpClient.Player.Position = packet.Extra.Position; client.Player.Position = packet.Extra.Position;
tmpClient.Player.Health = packet.Extra.Health; client.Player.Health = packet.Extra.Health;
PlayerPacket playerPacket = packet.Extra; PlayerPacket playerPacket = packet.Extra;
playerPacket.Latency = tmpClient.Latency; playerPacket.Latency = client.Latency;
packet.Extra = playerPacket; packet.Extra = playerPacket;
@ -734,27 +724,22 @@ namespace CoopServer
if (MainResource != null) if (MainResource != null)
{ {
MainResource.InvokePlayerUpdate(tmpClient); MainResource.InvokePlayerUpdate(client);
} }
} }
private static void FullSyncPlayerVeh(FullSyncPlayerVehPacket packet) private static void FullSyncPlayerVeh(FullSyncPlayerVehPacket packet)
{ {
Client tmpClient = Clients.FirstOrDefault(x => x.ID == packet.Extra.ID); Client client = Util.GetClientByID(packet.Extra.ID);
if (tmpClient == null) if (client == null)
{ {
NetConnection localConn = MainNetServer.Connections.Find(x => packet.Extra.ID == x.RemoteUniqueIdentifier);
if (localConn != null)
{
localConn.Disconnect("No data found!");
}
return; return;
} }
tmpClient.Player.Position = packet.Extra.Position; client.Player.Position = packet.Extra.Position;
tmpClient.Player.Health = packet.Extra.Health; client.Player.Health = packet.Extra.Health;
PlayerPacket playerPacket = packet.Extra; PlayerPacket playerPacket = packet.Extra;
playerPacket.Latency = tmpClient.Latency; playerPacket.Latency = client.Latency;
packet.Extra = playerPacket; packet.Extra = playerPacket;
@ -779,27 +764,22 @@ namespace CoopServer
if (MainResource != null) if (MainResource != null)
{ {
MainResource.InvokePlayerUpdate(tmpClient); MainResource.InvokePlayerUpdate(client);
} }
} }
private static void LightSyncPlayer(LightSyncPlayerPacket packet) private static void LightSyncPlayer(LightSyncPlayerPacket packet)
{ {
Client tmpClient = Clients.FirstOrDefault(x => x.ID == packet.Extra.ID); Client client = Util.GetClientByID(packet.Extra.ID);
if (tmpClient == null) if (client == null)
{ {
NetConnection localConn = MainNetServer.Connections.Find(x => packet.Extra.ID == x.RemoteUniqueIdentifier);
if (localConn != null)
{
localConn.Disconnect("No data found!");
}
return; return;
} }
tmpClient.Player.Position = packet.Extra.Position; client.Player.Position = packet.Extra.Position;
tmpClient.Player.Health = packet.Extra.Health; client.Player.Health = packet.Extra.Health;
PlayerPacket playerPacket = packet.Extra; PlayerPacket playerPacket = packet.Extra;
playerPacket.Latency = tmpClient.Latency; playerPacket.Latency = client.Latency;
packet.Extra = playerPacket; packet.Extra = playerPacket;
@ -824,27 +804,22 @@ namespace CoopServer
if (MainResource != null) if (MainResource != null)
{ {
MainResource.InvokePlayerUpdate(tmpClient); MainResource.InvokePlayerUpdate(client);
} }
} }
private static void LightSyncPlayerVeh(LightSyncPlayerVehPacket packet) private static void LightSyncPlayerVeh(LightSyncPlayerVehPacket packet)
{ {
Client tmpClient = Clients.FirstOrDefault(x => x.ID == packet.Extra.ID); Client client = Util.GetClientByID(packet.Extra.ID);
if (tmpClient == null) if (client == null)
{ {
NetConnection localConn = MainNetServer.Connections.Find(x => packet.Extra.ID == x.RemoteUniqueIdentifier);
if (localConn != null)
{
localConn.Disconnect("No data found!");
}
return; return;
} }
tmpClient.Player.Position = packet.Extra.Position; client.Player.Position = packet.Extra.Position;
tmpClient.Player.Health = packet.Extra.Health; client.Player.Health = packet.Extra.Health;
PlayerPacket playerPacket = packet.Extra; PlayerPacket playerPacket = packet.Extra;
playerPacket.Latency = tmpClient.Latency; playerPacket.Latency = client.Latency;
packet.Extra = playerPacket; packet.Extra = playerPacket;
@ -869,7 +844,7 @@ namespace CoopServer
if (MainResource != null) if (MainResource != null)
{ {
MainResource.InvokePlayerUpdate(tmpClient); MainResource.InvokePlayerUpdate(client);
} }
} }
@ -890,7 +865,7 @@ namespace CoopServer
CommandContext ctx = new() CommandContext ctx = new()
{ {
Client = Clients.FirstOrDefault(x => x.Player.Username == packet.Username), Client = Clients.Find(x => x.Player.Username == packet.Username),
Args = argsWithoutCmd Args = argsWithoutCmd
}; };

View File

@ -282,7 +282,7 @@ namespace CoopServer
public static Client GetClientByUsername(string username) public static Client GetClientByUsername(string username)
{ {
return Server.Clients.FirstOrDefault(x => x.Player.Username.ToLower() == username.ToLower()); return Server.Clients.Find(x => x.Player.Username.ToLower() == username.ToLower());
} }
public static void SendChatMessageToAll(string message, string username = "Server") public static void SendChatMessageToAll(string message, string username = "Server")

View File

@ -52,15 +52,31 @@ namespace CoopServer
return result; return result;
} }
public static Client GetClientByID(long id)
{
Client result = Server.Clients.Find(x => x.ID == id);
if (result == null)
{
NetConnection localConn = Server.MainNetServer.Connections.Find(x => id == x.RemoteUniqueIdentifier);
if (localConn != null)
{
localConn.Disconnect("No data found!");
}
return null;
}
return result;
}
public static NetConnection GetConnectionByUsername(string username) public static NetConnection GetConnectionByUsername(string username)
{ {
Client client = Server.Clients.FirstOrDefault(x => x.Player.Username.ToLower() == username.ToLower()); Client client = Server.Clients.Find(x => x.Player.Username.ToLower() == username.ToLower());
if (client.Equals(default(Client))) if (client == null)
{ {
return null; return null;
} }
return Server.MainNetServer.Connections.FirstOrDefault(x => x.RemoteUniqueIdentifier == client.ID); return Server.MainNetServer.Connections.Find(x => x.RemoteUniqueIdentifier == client.ID);
} }
// Return a list of all connections but not the local connection // Return a list of all connections but not the local connection
@ -79,7 +95,7 @@ namespace CoopServer
return new(Server.MainNetServer.Connections.FindAll(e => return new(Server.MainNetServer.Connections.FindAll(e =>
{ {
Client client = Server.Clients.First(x => x.ID == e.RemoteUniqueIdentifier); Client client = Server.Clients.First(x => x.ID == e.RemoteUniqueIdentifier);
return !client.Equals(default(Client)) && client.Player.IsInRangeOf(position, range); return client != null && client.Player.IsInRangeOf(position, range);
})); }));
} }
// Return a list of players within range of ... but not the local one // Return a list of players within range of ... but not the local one
@ -88,7 +104,7 @@ namespace CoopServer
return new(Server.MainNetServer.Connections.Where(e => return new(Server.MainNetServer.Connections.Where(e =>
{ {
Client client = Server.Clients.First(x => x.ID == e.RemoteUniqueIdentifier); Client client = Server.Clients.First(x => x.ID == e.RemoteUniqueIdentifier);
return e != local && !client.Equals(default(Client)) && client.Player.IsInRangeOf(position, range); return e != local && client != null && client.Player.IsInRangeOf(position, range);
})); }));
} }