Esempio n. 1
0
    /// <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);
        }
    }
Esempio n. 2
0
 /// <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);
     }
 }