Advertisement
Guest User

Untitled

a guest
Jan 19th, 2018
780
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.65 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using AWSSignatureV4_S3_Sample.Signers;
  8. using AWSSignatureV4_S3_Sample.Util;
  9. using MQTTnet;
  10. using MQTTnet.Client;
  11. using MQTTnet.Serializer;
  12.  
  13. namespace MySecondWebsocket
  14. {
  15. class Program
  16. {
  17. static private string presignedURl;
  18. static void Main(string[] args)
  19. {
  20. var endpoint = "wss://<AWS_Account>.iot.us-east-1.amazonaws.com/mqtt";
  21. var queryParams = new StringBuilder();
  22. var expiresOn = DateTime.UtcNow.AddDays(2);
  23. var period = Convert.ToInt64((expiresOn.ToUniversalTime() - DateTime.UtcNow).TotalSeconds);
  24. queryParams.AppendFormat("{0}={1}", AWS4SignerBase.X_Amz_Expires, HttpHelpers.UrlEncode(period.ToString()));
  25.  
  26. var headers = new Dictionary<string, string>();
  27.  
  28. var signer = new AWS4SignerForQueryParameterAuth()
  29. {
  30. EndpointUri = new Uri(endpoint),
  31. HttpMethod = "GET",
  32. Region = "us-east-1",
  33. Service = "iotdevicegateway"
  34. };
  35.  
  36. var authorization = signer.ComputeSignature(headers,
  37. queryParams.ToString(),
  38. "UNSIGNED-PAYLOAD",
  39. "<Access>",
  40. "<Secret>");
  41. // build the presigned url to incorporate the authorization element
  42. var urlBuilder = new StringBuilder(endpoint.ToString());
  43.  
  44. // add our query params
  45. urlBuilder.AppendFormat("?{0}", queryParams.ToString());
  46.  
  47. // and finally the Signature V4 authorization string components
  48. urlBuilder.AppendFormat("&{0}", authorization);
  49.  
  50. var presignedUrl = urlBuilder.ToString();
  51. Console.WriteLine(presignedUrl);
  52. Task.Run(()=>Connect(presignedUrl));
  53. Console.ReadLine();
  54. }
  55.  
  56. public static async void Connect(string presignedurl)
  57. {
  58. string CLIENT_ID = "12345;
  59. var client = new MqttFactory().CreateMqttClient();
  60. var options = new MqttClientOptionsBuilder()
  61. .WithWebSocketServer(presignedurl)
  62. .WithClientId(CLIENT_ID)
  63. .Build();
  64. (options.ChannelOptions as MqttClientWebSocketOptions).SubProtocols = new List<string>();
  65. (options.ChannelOptions as MqttClientWebSocketOptions).SubProtocols.Add("mqtt");
  66.  
  67. MqttClientConnectResult res = await client.ConnectAsync(options);
  68. Console.WriteLine(res.IsSessionPresent);
  69. }
  70. }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement