public DefaultCommunicationService(ICommunicationServiceConfig config,
            IPoolableObjectFactory<IMessageSenderChannel> senderChannelFactory,
            IPoolableObjectFactory<IMessageReceiverChannel> receiverChannelFactory, 
            string name = "DefaultCommunicationService",
            Int32 instanceNum = 1) : base(name, instanceNum)
        {
            var senderChannelPoolConfig = new ObjectPoolConfig<IMessageSenderChannel>.Builder()
                {
                    SetValidateBeforeBorrow = true,
                    SetCapacity = config.TotalSenderChannels,
                    SetMaximumObjectsActiveOnStartup = config.TotalSenderChannels,
                    Factory = senderChannelFactory
                }.Build();
            _senderChannelPool = new DefaultMessageSenderChannelPool(senderChannelPoolConfig);

            var receiverChannelPoolConfig = new ObjectPoolConfig<IMessageReceiverChannel>.Builder()
            {
                SetCapacity = config.TotalReceiverChannels,
                SetMaximumObjectsActiveOnStartup = config.TotalReceiverChannels,
                SetValidateBeforeBorrow = true,
                Factory = receiverChannelFactory
            }.Build();
            _receiverChannelPool = new DefaultMessageReceiverChannelPool(
                receiverChannelPoolConfig, config.UniqueResponseTopic);
        }
    /// <summary>
    /// 根据配置生成对象
    /// </summary>
    /// <param name="config">配置信息</param>
    private void GenerateObject(ObjectPoolConfig config)
    {
        if (listDictionary == null)
        {
            return;
        }

        //配置信息
        string     key    = config.Key;
        int        count  = config.Count;
        GameObject target = config.Target;
        //放置位置
        GameObject root = new GameObject(key + "_Clone");

        root.transform.parent = allRoot;
        //生成对象
        ObjectList list = new ObjectList(root.transform, target);

        for (int i = 0; i < count; i++)
        {
            GameObject buff = GameObject.Instantiate(target, root.transform);
            buff.gameObject.SetActive(false);
            list.CloseList.Add(buff);
        }
        listDictionary.Add(key, list);
    }
Exemple #3
0
        IObjectPool <PoolManagedBehaviour> CreatePool(int numberOfInstances)
        {
            var go = new GameObject();
            PoolManagedBehaviour prefab = go.AddComponent <TestBehaviour>();
            var config = new ObjectPoolConfig(numberOfInstances, Mathf.Max(numberOfInstances, 1));

            return(base.CreatePool(prefab, config));
        }
Exemple #4
0
 /// <summary>
 /// 构造函数,实例化对象池
 /// </summary>
 /// <param name="configs"></param>
 public ObjectPool(params ObjectPoolConfig[] configs)
 {
     listDictionary = new Dictionary <string, ObjectList>();
     allRoot        = new GameObject("ObjPool_Clone").transform;
     for (int i = 0; i < configs.Length; i++)
     {
         ObjectPoolConfig config = configs[i];
         GenerateObject(config);
     }
 }
Exemple #5
0
        public void GivenIHaveCreatedAPoolWithACapacityOfAndAvailableOnStartup(int p0, int p1)
        {
            _factory = new DummyPoolableObjectFactory();
            var config = new ObjectPoolConfig<DummyPoolableObject>.Builder
            {
                Factory = _factory,
                SetCapacity = p0,
                SetMaximumObjectsActiveOnStartup = p1,
                SetValidateBeforeBorrow = true
            }
            .Build();

            _objectPool = new DummyObjectPool(config);
        }
Exemple #6
0
        IObjectPool <EventFunctionsReceiver> CreatePool(bool prefabEnable, int numberOfInstances, bool needPreactivation)
        {
            var prefab = Resources.Load("EventFunctionsReceiver") as GameObject;

            prefab.gameObject.SetActive(prefabEnable);
            var component = prefab.GetComponent <EventFunctionsReceiver>();
            var config    = new ObjectPoolConfig(
                numberOfInstances: numberOfInstances,
                createCountPerFrame: numberOfInstances,
                needPreactivation: needPreactivation
                );

            return(base.CreatePool(component, config));
        }
Exemple #7
0
        IEnumerator Start()
        {
            SetUpKeyController();

            var config = new ObjectPoolConfig(
                numberOfInstances: numberOfInstances,
                createCountPerFrame: 1,
                needPreactivation: needPreactivation
                );
            var objectPool = new ObjectPoolImpl(id, prefab, config);

            ObjectPoolManager.Instance.RegisterPool(id, objectPool);

            yield return(ObjectPoolManager.Instance.PreloadAsync().ToYieldInstruction());

            yield return(ObjectPoolManager.Instance.PreactivateAsync().ToYieldInstruction());

            Debug.Log("OnLoaded");
        }
Exemple #8
0
        protected IObjectPool <T> CreatePool <T>(T prefab, ObjectPoolConfig config) where T : PoolManagedBehaviour
        {
            var objectPool = new ObjectPoolImpl(IdGenerator.Generate(), prefab, config, hierarchyParent);

            return(new ObjectPoolWrapper <T>(objectPool));
        }