public void RegisterService(object serviceImplementation, Type serviceInterface, Guid guid) { if (serviceImplementation == null) { throw new ArgumentNullException(nameof(serviceImplementation)); } else if (serviceInterface == null) { throw new ArgumentNullException(nameof(serviceInterface)); } else if (!serviceInterface.IsInterface) { throw new ArgumentException($"Provided Service Interface '{serviceInterface.FullName}' was not an interface!"); } else if (guid.Equals(Guid.Empty)) { throw new ArgumentException($"Provided guid for service '{serviceInterface.FullName}' was zero guid!"); } else { InvokableServiceContext context = invokableServiceContextFactory.Create(serviceImplementation, serviceInterface, guid); if (serviceContextsById.TryAdd(guid, context)) { localServiceContainer.Register(context); clusteringPhaseManager.HandleServiceRegistered(context); } } }
public void HandleServiceUnregistered(InvokableServiceContext invokableServiceContext) { synchronization.EnterReadLock(); try { currentClusteringPhase.HandleServiceUnregistered(invokableServiceContext); } finally { synchronization.ExitReadLock(); } }
public void Register(InvokableServiceContext invokableServiceContext) { lock (synchronization) { if (serviceContextsByGuid.TryAdd(invokableServiceContext.Guid, invokableServiceContext)) { ServiceRegistered?.Invoke(invokableServiceContext); } } }
public void Unregister(InvokableServiceContext invokableServiceContext) { lock (synchronization) { var kvp = invokableServiceContext.Guid.PairValue(invokableServiceContext); if (serviceContextsByGuid.Remove(kvp)) { ServiceUnregistered?.Invoke(invokableServiceContext); } } }
public void HandleServiceRegistered(InvokableServiceContext invokableServiceContext) { logger.Trace($"Locally registered service {invokableServiceContext.Guid}."); var addedServices = new HashSet <Guid> { invokableServiceContext.Guid }; var removedServices = new HashSet <Guid>(); messageSender.SendServiceUpdateAsync(addedServices, removedServices); }
public void HandleServiceUnregistered(InvokableServiceContext invokableServiceContext) { // does nothing }