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"); }
internal static async Task WaitForAttachedState(this IRealtimeChannel channel, TimeSpan?waitSpan = null) { await channel.WaitForState(ChannelState.Attached, waitSpan); }