Пример #1
0
        public async Task TestAttachChannel_Sending3Messages_EchoesItBack(Protocol protocol)
        {
            Logger.LogLevel = LogLevel.Debug;
            ;
            // Arrange
            var client = await GetRealtimeClient(protocol);

            await client.WaitForState(ConnectionState.Connected);

            ManualResetEvent resetEvent = new ManualResetEvent(false);
            IRealtimeChannel target     = client.Channels.Get("test" + protocol);

            target.Attach();
            await target.WaitForState(ChannelState.Attached);

            ConcurrentQueue <Message> messagesReceived = new ConcurrentQueue <Message>();
            int count = 0;

            target.Subscribe(message =>
            {
                messagesReceived.Enqueue(message);
                count++;
                if (count == 3)
                {
                    resetEvent.Set();
                }
            });

            // Act
            target.Publish("test1", "test 12");
            target.Publish("test2", "test 123");
            target.Publish("test3", "test 321");

            bool result = resetEvent.WaitOne(8000);
            await Task.Delay(100);

            result.Should().BeTrue();

            // Assert
            messagesReceived.Count.ShouldBeEquivalentTo(3);
            var messages = messagesReceived.ToList();

            messages[0].Name.ShouldBeEquivalentTo("test1");
            messages[0].Data.ShouldBeEquivalentTo("test 12");
            messages[1].Name.ShouldBeEquivalentTo("test2");
            messages[1].Data.ShouldBeEquivalentTo("test 123");
            messages[2].Name.ShouldBeEquivalentTo("test3");
            messages[2].Data.ShouldBeEquivalentTo("test 321");
        }
Пример #2
0
 internal static async Task WaitForAttachedState(this IRealtimeChannel channel, TimeSpan?waitSpan = null)
 {
     await channel.WaitForState(ChannelState.Attached, waitSpan);
 }