public void UnregisterWorldserver(string groupName, ScsTcpEndPoint endpoint) { try { if (ServerCommunicationHelper.Instance.WorldserverGroups.Any(g => g.GroupName == groupName) && ServerCommunicationHelper.Instance.WorldserverGroups.SingleOrDefault(g => g.GroupName == groupName).Servers.Any(w => w.Endpoint.Equals(endpoint))) { //servergroup does exist with the given ipaddress RemoveWorldFromWorldserver(endpoint, groupName); } else if (!ServerCommunicationHelper.Instance.WorldserverGroups.Any(g => g.GroupName == groupName) && !ServerCommunicationHelper.Instance.WorldserverGroups.Any(sgi => sgi.Servers.Any(w => w.Endpoint.Equals(endpoint)))) { //servergroup doesnt exist and world is not in a group named like the given servergroup and in no other Logger.Log.InfoFormat($"World with address {endpoint} has already been unregistered before."); } else if (!ServerCommunicationHelper.Instance.WorldserverGroups.Any(g => g.GroupName == groupName) && ServerCommunicationHelper.Instance.WorldserverGroups.Any(sgi => sgi.Servers.Any(w => w.Endpoint.Equals(endpoint)))) { //servergroup does not exist but world does run in a different servergroup WorldserverGroupDTO worldserverGroupDTO = ServerCommunicationHelper.Instance.WorldserverGroups.SingleOrDefault(sgi => sgi.Servers.Any(w => w.Endpoint.Equals(endpoint))); RemoveWorldFromWorldserver(endpoint, worldserverGroupDTO.GroupName); } } catch (Exception ex) { Logger.Log.Error($"Registering world {endpoint} failed.", ex); } }
public int?RegisterWorldserver(string groupName, WorldserverDTO worldserver) { int?newChannelId = null; try { if (!ServerCommunicationHelper.Instance.WorldserverGroups.Any(g => g.GroupName == groupName)) { //add world server ServerCommunicationHelper.Instance.Worldservers.Add(worldserver); //create new server group worldserver.ChannelId = 1; newChannelId = 1; ServerCommunicationHelper.Instance.WorldserverGroups.Add(new WorldserverGroupDTO(groupName, worldserver)); Logger.Log.InfoFormat($"World {worldserver.Id} with address {worldserver.Endpoint} has been registered to new server group {groupName}."); } else if (ServerCommunicationHelper.Instance.WorldserverGroups.SingleOrDefault(wg => wg.GroupName == groupName)?.Servers.Contains(worldserver) ?? false) { //worldserver is already registered Logger.Log.InfoFormat($"World {worldserver.Id} with address {worldserver.Endpoint} is already registered."); } else { //add worldserver to existing group WorldserverGroupDTO worldserverGroup = ServerCommunicationHelper.Instance.WorldserverGroups.SingleOrDefault(wg => wg.GroupName == groupName); //add world server worldserver.ChannelId = worldserverGroup.Servers.Count() + 1; newChannelId = worldserver.ChannelId; ServerCommunicationHelper.Instance.Worldservers.Add(worldserver); worldserverGroup?.Servers.Add(worldserver); Logger.Log.InfoFormat($"World {worldserver.Id} with address {worldserver.Endpoint} has been added to server group {groupName}."); } } catch (Exception ex) { Logger.Log.Error($"Registering world {worldserver.Id} with endpoint {worldserver.Endpoint} failed.", ex); } return(newChannelId); }
private void RemoveWorldFromWorldserver(ScsTcpEndPoint endpoint, string groupName) { WorldserverDTO worldserverToRemove = ServerCommunicationHelper.Instance.WorldserverGroups .SingleOrDefault(g => g.GroupName == groupName).Servers.SingleOrDefault(w => w.Endpoint.Equals(endpoint)); ServerCommunicationHelper.Instance.WorldserverGroups.SingleOrDefault(g => g.GroupName == groupName).Servers.Remove(worldserverToRemove); ServerCommunicationHelper.Instance.Worldservers.Remove(worldserverToRemove); Logger.Log.InfoFormat($"World {worldserverToRemove.Id} with address {endpoint} has been unregistered successfully."); if (!ServerCommunicationHelper.Instance.WorldserverGroups.SingleOrDefault(g => g.GroupName == groupName)?.Servers.Any() ?? false) { WorldserverGroupDTO worldserverGroup = ServerCommunicationHelper.Instance.WorldserverGroups.SingleOrDefault(g => g.GroupName == groupName); if (worldserverGroup != null) { ServerCommunicationHelper.Instance.WorldserverGroups.Remove(worldserverGroup); Logger.Log.InfoFormat($"World server group {groupName} has been removed as no world was left."); } } }