/// <summary> /// Registers a service offerer if not exists already /// </summary> /// <param name="service"></param> /// <returns></returns> public bool RegisterServiceOfferer(IServiceOfferer <IServiceMessage> service) { if (!serviceNameTable.ContainsKey(service.GetServiceName())) { services.Add(service); services = services.OrderBy(x => x.Priority).ToList(); serviceTable[service] = new List <IServiceConsumer <IServiceMessage> >(); serviceNameTable[service.GetServiceName()] = service; //post-register all services that are in the specific stack if (consumerStack.ContainsKey(service.GetServiceName())) { serviceTable[service].AddRange(consumerStack[service.GetServiceName()]); consumerStack.Remove(service.GetServiceName()); if (service.SendMessageToNewSubscribers) { var serviceItem = service.RetrieveServiceItem(); foreach (var consumer in serviceTable[service]) { consumer.ConsumeServiceItem(serviceItem, service.GetServiceName()); } } } return(true); } else { //Debug.Log("Service was added twice"); return(false); } }
/// <summary> /// Unregisters a service offerer if it exists /// </summary> /// <param name="service"></param> /// <returns></returns> public bool UnregisterServiceOfferer(IServiceOfferer <IServiceMessage> service) { if (serviceTable.ContainsKey(service)) { services.Remove(service); serviceTable.Remove(service); serviceNameTable.Remove(service.GetServiceName()); return(true); } else { Debug.Log("Service was not found in service table"); return(false); } }