Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using AWSSignatureV4_S3_Sample.Signers;
- using AWSSignatureV4_S3_Sample.Util;
- using MQTTnet;
- using MQTTnet.Client;
- using MQTTnet.Serializer;
- namespace MySecondWebsocket
- {
- class Program
- {
- static private string presignedURl;
- static void Main(string[] args)
- {
- var endpoint = "wss://<AWS_Account>.iot.us-east-1.amazonaws.com/mqtt";
- var queryParams = new StringBuilder();
- var expiresOn = DateTime.UtcNow.AddDays(2);
- var period = Convert.ToInt64((expiresOn.ToUniversalTime() - DateTime.UtcNow).TotalSeconds);
- queryParams.AppendFormat("{0}={1}", AWS4SignerBase.X_Amz_Expires, HttpHelpers.UrlEncode(period.ToString()));
- var headers = new Dictionary<string, string>();
- var signer = new AWS4SignerForQueryParameterAuth()
- {
- EndpointUri = new Uri(endpoint),
- HttpMethod = "GET",
- Region = "us-east-1",
- Service = "iotdevicegateway"
- };
- var authorization = signer.ComputeSignature(headers,
- queryParams.ToString(),
- "UNSIGNED-PAYLOAD",
- "<Access>",
- "<Secret>");
- // build the presigned url to incorporate the authorization element
- var urlBuilder = new StringBuilder(endpoint.ToString());
- // add our query params
- urlBuilder.AppendFormat("?{0}", queryParams.ToString());
- // and finally the Signature V4 authorization string components
- urlBuilder.AppendFormat("&{0}", authorization);
- var presignedUrl = urlBuilder.ToString();
- Console.WriteLine(presignedUrl);
- Task.Run(()=>Connect(presignedUrl));
- Console.ReadLine();
- }
- public static async void Connect(string presignedurl)
- {
- string CLIENT_ID = "12345;
- var client = new MqttFactory().CreateMqttClient();
- var options = new MqttClientOptionsBuilder()
- .WithWebSocketServer(presignedurl)
- .WithClientId(CLIENT_ID)
- .Build();
- (options.ChannelOptions as MqttClientWebSocketOptions).SubProtocols = new List<string>();
- (options.ChannelOptions as MqttClientWebSocketOptions).SubProtocols.Add("mqtt");
- MqttClientConnectResult res = await client.ConnectAsync(options);
- Console.WriteLine(res.IsSessionPresent);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement