MqttClientOptionsBuilderExtension.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using System;
  2. using System.Linq;
  3. using MQTTnet.Client.Options;
  4. namespace MQTTnet.Extensions
  5. {
  6. public static class MqttClientOptionsBuilderExtension
  7. {
  8. public static MqttClientOptionsBuilder WithConnectionUri(this MqttClientOptionsBuilder builder, Uri uri)
  9. {
  10. var port = uri.IsDefaultPort ? null : (int?) uri.Port;
  11. switch (uri.Scheme.ToLower())
  12. {
  13. case "tcp":
  14. case "mqtt":
  15. builder.WithTcpServer(uri.Host, port);
  16. break;
  17. case "mqtts":
  18. builder.WithTcpServer(uri.Host, port).WithTls();
  19. break;
  20. case "ws":
  21. case "wss":
  22. builder.WithWebSocketServer(uri.ToString());
  23. break;
  24. default:
  25. throw new ArgumentException("Unexpected scheme in uri.");
  26. }
  27. if (!string.IsNullOrEmpty(uri.UserInfo))
  28. {
  29. var userInfo = uri.UserInfo.Split(':');
  30. var username = userInfo[0];
  31. var password = userInfo.Length > 1 ? userInfo[1] : "";
  32. builder.WithCredentials(username, password);
  33. }
  34. return builder;
  35. }
  36. public static MqttClientOptionsBuilder WithConnectionUri(this MqttClientOptionsBuilder builder, string uri)
  37. {
  38. return WithConnectionUri(builder, new Uri(uri, UriKind.Absolute));
  39. }
  40. }
  41. }