Beispiel #1
0
        private static void PersistentRecvCommit(string[] lines, int deviceOrder, int sleep)
        {
            var line = lines[deviceOrder];

            var parts = line.Split(' ');

            var deviceId = parts[0];
            var apiKey   = parts[1];

            Log(deviceId);


            PushedMessage pushedMessage = null;
            int           cnt           = 0;
            var           persistentConnectionClient = new PersistentConnectionClient(Config.PlatformApiWS);

            RetryableLogin(persistentConnectionClient, deviceId, apiKey);
            RetryableSubscribe(persistentConnectionClient, SubscriptionType.PeekAndCommit, message =>
            {
                if (message != null)
                {
                    pushedMessage = message;
                    cnt           = message.MessageId;
                    Interlocked.Increment(ref allCounter);
                    Log(cnt.ToString());
                    Log("Allcounter: " + allCounter);
                }
            });

            while (true)
            {
                persistentConnectionClient.Spin();
                Thread.Sleep(sleep);
            }
        }
Beispiel #2
0
        private static void OcassionalRecvForget(string[] lines, int deviceOrder, int sleep)
        {
            var line = lines[deviceOrder];

            var parts = line.Split(' ');

            var deviceId = parts[0];
            var apiKey   = parts[1];

            Log(deviceId);

            var ocassionalConnectionClient = new OccasionallyConnectionClient(Config.PlatformApi, deviceId, apiKey);
            int cnt = 0;

            while (true)
            {
                PushedMessage pushedMsg = null;
                try
                {
                    pushedMsg = ocassionalConnectionClient.ReceiveAndForgetMessage();
                    cnt++;
                }
                catch (WebException)
                {
                    Log("throttled");
                }
                Thread.Sleep(sleep);
                Log(cnt.ToString() + ((pushedMsg != null) ? "PM" : ""));
            }
        }
Beispiel #3
0
        public void SendToAndReceiveTest()
        {
            RegisterDevice(true);

            var persistentConnection = new PersistentConnectionClient(PlatformWebsocketApi);

            persistentConnection.Login(_deviceId, _apiKey);

            persistentConnection.SendMessageTo(_otherDeviceId, "{\"Temperature\": 24, \"Time\":" + DateTime.UtcNow.Ticks + "}");

            persistentConnection.Close();

            var persistentConnection2 = new PersistentConnectionClient(PlatformWebsocketApi);

            PushedMessage    received = null;
            ManualResetEvent mre      = new ManualResetEvent(false);

            persistentConnection2.Login(_otherDeviceId, _apiKey);
            persistentConnection2.Subscribe(SubscriptionType.ReceiveAndForget, msg => { received = msg;
                                                                                        mre.Set(); });

            mre.WaitOne(TimeSpan.FromSeconds(2));

            Assert.IsNotNull(received);
            Assert.AreEqual(_deviceId, received.SenderDeviceId);
            Assert.IsTrue(received.Payload.StartsWith("{\"Temperature\": 24, \"Time\":"));
        }
Beispiel #4
0
        protected override IEnumerator <IAsyncResult> PutMessageImpl(IAccountIdentifier identity, string account, string queue, List <PushedMessage> messagesList, TimeSpan?timeout, RequestContext requestContext, bool usePutMessageRowCommand, AsyncIteratorContext <IEnumerable <PoppedMessage> > context)
        {
            TimeSpan      timeSpan;
            RemainingTime remainingTime = new RemainingTime(timeout);
            SASAuthorizationParameters sASAuthorizationParameter = new SASAuthorizationParameters()
            {
                SupportedSasTypes  = SasType.ResourceSas | SasType.AccountSas,
                SignedResourceType = SasResourceType.Object,
                SignedPermission   = SASPermission.Add
            };
            SASAuthorizationParameters sASAuthorizationParameter1 = sASAuthorizationParameter;
            IAsyncResult asyncResult = this.BeginGetQueue(identity, account, queue, PermissionLevel.Write, sASAuthorizationParameter1, remainingTime, requestContext, context.GetResumeCallback(), context.GetResumeState("QueueManager.PutMessageImpl"));

            yield return(asyncResult);

            IQueueContainer operationStatus = this.EndGetQueue(asyncResult);

            if (requestContext != null)
            {
                operationStatus.OperationStatus = requestContext.OperationStatus;
            }
            object obj = messagesList;

            if (obj == null)
            {
                obj = Enumerable.Empty <PushedMessage>();
            }
            foreach (PushedMessage pushedMessage in (IEnumerable <PushedMessage>)obj)
            {
                PushedMessage nullable   = pushedMessage;
                TimeSpan?     messageTTL = pushedMessage.MessageTTL;
                timeSpan            = (messageTTL.HasValue ? messageTTL.GetValueOrDefault() : TimeSpan.FromSeconds((double)this.config.MaxTtlSeconds));
                nullable.MessageTTL = new TimeSpan?(timeSpan);
            }
            operationStatus.Timeout = remainingTime;
            asyncResult             = operationStatus.BeginPutMessage(messagesList, usePutMessageRowCommand, context.GetResumeCallback(), context.GetResumeState("QueueManager.PutMessageImpl"));
            yield return(asyncResult);

            List <IMessageData> messageDatas = operationStatus.EndPutMessage(asyncResult);

            context.ResultData = this.WrapGetMessageResults(messageDatas);
            IStringDataEventStream verboseDebug = Logger <IRestProtocolHeadLogger> .Instance.VerboseDebug;

            verboseDebug.Log("PutMessage response: MessageId={0}", new object[] { context.ResultData });
        }
Beispiel #5
0
        public async Task <IActionResult> BroadcastAsync(PushedMessage input)
        {
            int sentCount = await _wsNotifyHandler.SendAsync(null, input.Message);

            return(Ok(new { sentCount }));
        }