private void ClientDisconnect(DisconnectionContext ctx, ConnectionInfo inf) { lock (LockObject) { for (int i = 0; i < ClientCount; i++) { if (!Clients[i].connectionInfo.Equals(inf)) { continue; } if (Clients[i].DisconnectionMode.type == DisconnectionContext.DisconnectionType.REMOVE) { Clients.RemoveAt(i); i--; } else if ((int)Clients[i].DisconnectionMode.type == 2 && GlobalDefaults.ForcibleDisconnectMode == 0) { Clients.RemoveAt(i); i--; } } OnClientDisconnect?.Invoke(ctx, inf); } if (RestartAutomatically && !Running && ClientCount < MaxClients) { StartServer(); } }
public void Disconnect(DisconnectionContext ctx) { try { SendObject(ctx); } catch { } DisconnectionMode = ctx; IsConnected = false; if (ctx.type == DisconnectionContext.DisconnectionType.REMOVE) { lock (LockObject) ObjectQueue.Clear(); } }
public void DisconnectClient(ushort index, DisconnectionContext ctx, bool remove = false) { Clients[index].Disconnect(ctx); if (remove) { while (GlobalDefaults.UseEncryption && !Clients[index].RecivedKey) { ; } lock (LockObject) { Clients.RemoveAt(index); if (RestartAutomatically && !Running && ClientCount < MaxClients) { StartServer(); } } } }
public void DisconnectAllClients(DisconnectionContext ctx, bool remove = false) { for (int i = 0; i < ClientCount; i++) { while (GlobalDefaults.UseEncryption && !Clients[i].RecivedKey) { ; } lock (LockObject) { Clients[i].Disconnect(ctx); if (remove) { Clients.RemoveAt(i); i--; } } } if (remove && RestartAutomatically && !Running && ClientCount < MaxClients) { StartServer(); } }