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); } }
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" : "")); } }
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\":")); }
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 }); }
public async Task <IActionResult> BroadcastAsync(PushedMessage input) { int sentCount = await _wsNotifyHandler.SendAsync(null, input.Message); return(Ok(new { sentCount })); }