Ejemplo n.º 1
0
		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;
		}
Ejemplo n.º 2
0
		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;
				});
			}
		}
Ejemplo n.º 3
0
		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;
			});
		}