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; }
public async Task SendC2DMessage(string deviceId, byte[] msg) { var message = new Microsoft.Azure.Devices.Message(msg); await serviceClient.SendAsync(deviceId, message); }
// 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); }