示例#1
0
        public override void InstallBindings()
        {
            var option = Container.BindMessagePipe();

            // GlobalMessagePipeを使用する前にSetProviderに設定する必要がある
            GlobalMessagePipe.SetProvider(Container.AsServiceProvider());
        }
示例#2
0
        public IEnumerator 非同期送受信テスト_GlobalMessagePipe()
        {
            // GlobalMessagePipeを使用する前にSetProviderに設定する必要がある
            GlobalMessagePipe.SetProvider(_container.AsServiceProvider());

            // 非同期用のPublisher/Subscriberを生成する
            var asyncSubscriber = GlobalMessagePipe.GetAsyncSubscriber <MyEvent>();
            var asyncPublisher  = GlobalMessagePipe.GetAsyncPublisher <MyEvent>();

            var cts = new CancellationTokenSource();

            var task1 = UniTask.Create(async() =>
            {
                Debug.Log("イベント受信");

                // イベントを受ける方
                var ev = await asyncSubscriber.FirstAsync(cts.Token);

                Debug.Log($"イベント受信完了 : {ev.Message}");
            });

            var task2 = UniTask.Create(async() =>
            {
                Debug.Log("イベント送信");

                // イベントを投げる方
                await asyncPublisher.PublishAsync(new MyEvent {
                    Message = "イベント"
                }, cts.Token);

                Debug.Log("イベント送信完了");
            });

            return(UniTask.ToCoroutine(async() => await UniTask.WhenAll(task1, task2)));
        }
示例#3
0
    public void SimpelePush()
    {
        var resolver = TestHelper.BuildBuiltin((builder) =>
        {
            builder.AddMessageBroker <int>();
        });

        GlobalMessagePipe.SetProvider(resolver);

        var pub  = resolver.GetRequiredService <IPublisher <int> >();
        var sub1 = resolver.GetRequiredService <ISubscriber <int> >();
        var sub2 = resolver.GetRequiredService <ISubscriber <int> >();

        var list = new List <int>();
        var d1   = sub1.Subscribe(x => list.Add(x));
        var d2   = sub2.Subscribe(x => list.Add(x));

        pub.Publish(10);
        pub.Publish(20);
        CollectionAssert.AreEqual(list, new[] { 10, 10, 20, 20 });

        list.Clear();
        d1.Dispose();

        pub.Publish(99);
        CollectionAssert.AreEqual(list, new[] { 99 });
    }
示例#4
0
    public MessagePipeDemo(IPublisher <int> publisher, ISubscriber <int> subscriber, IObjectResolver resolver)
    {
        this.publisher  = publisher;
        this.subscriber = subscriber;

        GlobalMessagePipe.SetProvider(resolver.AsServiceProvider());
    }
示例#5
0
    public void Start()
    {
        var builder = new BuiltinContainerBuilder();

        builder.AddMessagePipe(x => { x.EnableCaptureStackTrace = true; });
        builder.AddMessageBroker <int>();

        var resolver = builder.BuildServiceProvider();

        GlobalMessagePipe.SetProvider(resolver);

        publisher  = resolver.GetRequiredService <IPublisher <int> >();
        subscriber = resolver.GetRequiredService <ISubscriber <int> >();

        button1.onClick.AddListener(FooSubscribe);
        button2.onClick.AddListener(BarSubscribe);
        button3.onClick.AddListener(() =>
        {
            disposable = DisposableBag.Create(disposable, subscriber.Subscribe(x => Debug.Log($"{id}:Baz")));
        });
        button4.onClick.AddListener(UnSubscribeAll);

        disposable = DisposableBag.Empty;
        Forever().Forget();
    }
示例#6
0
        public void GrobalScope()
        {
            _container1 = new DiContainer();
            _container2 = new DiContainer();

            // Grobalに設定する前に必要
            var option = _container1.BindMessagePipe();

            _container1.BindMessageBroker <string>(option);
            _container2.BindMessageBroker <string>(_container2.BindMessagePipe());

            // GlobalMessagePipeを使用する前にSetProviderに設定する必要がある
            GlobalMessagePipe.SetProvider(_container1.AsServiceProvider());

            var p = GlobalMessagePipe.GetPublisher <string>();
            var s = GlobalMessagePipe.GetSubscriber <string>();

            var d = s.Subscribe(x => Debug.Log(x));

            var service2 = _container2.Instantiate <Subscriber>();

            service2.Setup("Container2");

            p.Publish("10");
            p.Publish("20");

            // Disposeしたら購読ができなくなる
            d.Dispose();

            p.Publish("30");

            /*
             * _container1.BindMessageBroker<string>(_container1.BindMessagePipe());
             * _container2.BindMessageBroker<string>(_container2.BindMessagePipe());
             *
             * // イベントを受ける方
             * var service1 = _container1.Instantiate<Subscriber>();
             * service1.Setup("Container1");
             *
             * var service2 = _container2.Instantiate<Subscriber>();
             * service2.Setup("Container2");
             *
             * // イベントを投げる方
             * var publisher1 = _container1.Instantiate<Publisher>();
             * publisher1.Send("Test");*/
        }