-
Notifications
You must be signed in to change notification settings - Fork 3
/
Program.cs
121 lines (99 loc) · 3.61 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
using System;
using Microsoft.Azure.Devices.Client;
using Newtonsoft.Json;
using System.Threading.Tasks;
using System.IO;
using System.Text;
namespace device_messaging
{
class Program
{
static string DeviceConnectionString = "";
static DeviceClient Client = null;
static async Task Main(string[] args)
{
Console.WriteLine("****************************************************");
Console.WriteLine("Welcome to the Azure IoT Hub Device Messaging Tester");
Console.WriteLine();
Console.WriteLine("Author: Pete Gallagher");
Console.WriteLine("Twitter: @pete_codes");
Console.WriteLine("Date: 19th December 2020");
Console.WriteLine();
Console.WriteLine("****************************************************");
Console.WriteLine();
try
{
Console.WriteLine("Enter the Device Connection String");
DeviceConnectionString = Console.ReadLine();
InitClient();
await Client.SetReceiveMessageHandlerAsync(OnReceiveMessage, null);
await Client.SetMethodHandlerAsync("performUpdate", performUpdate, null);
while (true)
{
Console.WriteLine("Enter Message to Send (Empty Message to exit)");
var messageToSend = Console.ReadLine();
if (messageToSend != null && messageToSend != "")
{
SendDeviceToCloudMessageAsync(messageToSend).Wait();
}
else
{
return;
}
}
}
catch (System.Exception ex)
{
Console.WriteLine();
Console.WriteLine("Error in sample: {0}", ex.Message);
}
}
public static void InitClient()
{
try
{
Console.WriteLine("Connecting to hub");
Client = DeviceClient.CreateFromConnectionString(DeviceConnectionString, Microsoft.Azure.Devices.Client.TransportType.Mqtt);
}
catch (Exception ex)
{
Console.WriteLine();
Console.WriteLine("Error in sample: {0}", ex.Message);
}
}
private static async Task OnReceiveMessage(Message message, object userContext)
{
var reader = new StreamReader(message.BodyStream);
var messageContents = reader.ReadToEnd();
Console.WriteLine($"Message Contents: {messageContents}");
Console.WriteLine("Message Propeties:");
foreach (var property in message.Properties)
{
Console.WriteLine($"Key: {property.Key}, Value: {property.Value}");
}
await Client.CompleteAsync(message);
}
private static Task<MethodResponse> performUpdate(MethodRequest methodRequest, object userContext)
{
Console.WriteLine("IoT Hub invoked the 'performUpdate' method.");
Console.WriteLine("Payload:");
Console.WriteLine(methodRequest.DataAsJson);
var responseMessage = "{\"response\": \"OK\"}";
return Task.FromResult(new MethodResponse(Encoding.ASCII.GetBytes(responseMessage), 200));
}
private static async Task SendDeviceToCloudMessageAsync(String messageToSend)
{
Message message = new Message(Encoding.ASCII.GetBytes(messageToSend));
message.Properties.Add("buttonEvent", "true");
Console.WriteLine("Sending Message {0}", messageToSend);
try
{
await Client.SendEventAsync(message);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
}
}