public async Task RepeatFirstMessage() { var channel = GenerateRandomChannelName(); var client = new RtmClientBuilder(Config.Endpoint, Config.AppKey).Build(); await client.Yield(); var subObs = new SubscriptionObserver(); var subData = subObs.CreateSubscriptionDataQueue(); var subscription = new QueueAsync <string>(); subObs.OnEnterSubscribed += s => { subscription.Enqueue(s.Position); }; client.Start(); client.CreateSubscription(channel, SubscriptionModes.Advanced, subObs); var pos = await subscription.Dequeue().ConfigureAwait(false); await client.Publish(channel, "message-1", Ack.Yes).ConfigureAwait(false); await subData.DequeueAndVerify(channel, "message-1").ConfigureAwait(false); await client.Yield(); client.RemoveSubscription(channel); client.CreateSubscription( channel, new SubscriptionConfig(SubscriptionModes.Advanced, position: pos, observer: subObs)); await subData.DequeueAndVerify(channel, "message-1").ConfigureAwait(false); await client.Dispose(); }
public async Task <ConnectionOperationResult> DoOperationAsync <T>(string action, T body) { _requests?.Enqueue( new Pdu <object> { Action = action, Body = body }); var res = await _connection.DoOperationAsync(action, body); var reply = res.AsReply(); if (reply != null) { _replies?.Enqueue(reply.pdu); } return(_operationTransform?.Invoke(res) ?? res); }
void IObservableSink <string> .Next(string val) { _queue.Enqueue(val); }