Ejemplo n.º 1
0
 public static async Task SendMessageToDeviceAsync(MAD.ServiceClient serviceClient, string targetDeviceId, string message)
 {
     var payload = new MAD.Message(Encoding.UTF8.GetBytes(message));
     await serviceClient.SendAsync(targetDeviceId, payload);
 }
        private async Task<bool> SendMessageAndWaitForResponse(ServiceClient serviceClient, string deviceId, UpdateAccessKeyRequest updateAccessKey)
        {
            var serviceMessage = new Message(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(updateAccessKey)));
            serviceMessage.Ack = DeliveryAcknowledgement.Full;
            serviceMessage.MessageId = Guid.NewGuid().ToString();

            var feedbackReceiver = serviceClient.GetFeedbackReceiver();
            var feedbackReceived = false;
            var cancellationToken = new CancellationTokenSource(TimeSpan.FromSeconds(60)).Token;
            var feedbackTask = Task.Run(async () =>
            {
                while (!feedbackReceived && !cancellationToken.IsCancellationRequested)
                {
                    var feedbackBatch = await feedbackReceiver.ReceiveAsync(TimeSpan.FromSeconds(0.5));
                    if (feedbackBatch != null)
                    {
                        feedbackReceived = feedbackBatch.Records.Any(fm =>
                            fm.DeviceId == deviceId
                            && fm.OriginalMessageId == serviceMessage.MessageId);
                        if (feedbackReceived)
                        {
                            await feedbackReceiver.CompleteAsync(feedbackBatch);
                        }
                    }
                }
            }, cancellationToken);

            await Task.WhenAll(
                feedbackTask,
                serviceClient.SendAsync(deviceId, serviceMessage));

            return feedbackReceived;
        }
Ejemplo n.º 3
0
 public async Task SendC2DMessage(string deviceId, byte[] msg)
 {
     var message = new Microsoft.Azure.Devices.Message(msg);
     await serviceClient.SendAsync(deviceId, message);
 }
Ejemplo n.º 4
0
 // Azure Function -> Console App    [Sender]
 public static async Task SendMessageToDeviceAsync(MAD.ServiceClient serviceClient, string targetDeviceId, string message)
 {
     // Skicka meddelande "message" till Device "targetDeviceId" mha SendAsync
     var payload = new MAD.Message(Encoding.UTF8.GetBytes(message));
     await serviceClient.SendAsync(targetDeviceId, payload);
 }