public Guid Register(Models.Route item, bool fromTopic = false) { var message = new Models.RouteMessage() { Action = "register", Route = item, Sender = Sender }; if (!fromTopic) { RouteSynchronizer.Current.Bus.Send("RoutesHostAction", message); } var key = $"{item.ApiKey}|{item.ServiceName}".ToLower(); var existing = RoutesRepository.ContainsKey(key); Guid id = Guid.Empty; if (existing) { List<Models.Route> routes = null; Retry((list) => { var result = RoutesRepository.TryGetValue(key, out routes); if (result) { var route = routes.SingleOrDefault(i => $"{i.ApiKey}|{i.ServiceName}".Equals(key, StringComparison.InvariantCultureIgnoreCase) && i.Priority == item.Priority); if (route == null) { id = item.Id = Guid.NewGuid(); routes.Add(item); } else { route.WebApiAddress = item.WebApiAddress; route.PingPath = item.PingPath; id = route.Id; } } return result; }); return id; } item.CreationDate = DateTime.Now; Retry((list) => { var routes = new List<Models.Route>(); id = item.Id = Guid.NewGuid(); routes.Add(item); var result = RoutesRepository.TryAdd(key, routes); return result; }); return id; }
public void UnRegister(Guid routeId, bool fromTopic = false) { var message = new Models.RouteMessage() { Action = "unregister", RouteId = routeId, Sender = Sender }; if (!fromTopic) { RouteSynchronizer.Current.Bus.Send("RoutesHostAction", message); } foreach (var key in RoutesRepository.Keys) { List<Models.Route> routes = null; Retry((list) => { var result = RoutesRepository.TryGetValue(key, out routes); if (result) { var route = routes.SingleOrDefault(i => i.Id == routeId); if (route != null) { routes.Remove(route); } } if (routes.Count == 0) { result = RoutesRepository.TryRemove(key, out routes); return result; } return true; }); } }
public void UnRegisterService(string apiKey, string serviceName, bool fromTopic = false) { var message = new Models.RouteMessage() { Action = "unregisterservice", ApiKey = apiKey, ServiceName = serviceName, Sender = Sender }; if (!fromTopic) { RouteSynchronizer.Current.Bus.Send("RoutesHostAction", message); } var key = $"{apiKey}|{serviceName}".ToLower(); var exists = RoutesRepository.ContainsKey(key); if (!exists) { return; } List<Models.Route> routes = null; Retry((list) => { var result = RoutesRepository.TryRemove(key, out routes); return result; }); }