Example #1
0
        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();
        }
Example #2
0
        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);
        }
Example #3
0
 void IObservableSink <string> .Next(string val)
 {
     _queue.Enqueue(val);
 }