using System.Collections.Generic; using Best.HTTP.Shared; using Best.MQTT; using Best.MQTT.Examples; using Best.MQTT.Examples.Helpers; using UnityEngine; using UnityEngine.UI; namespace Best.MQTT.Examples { public partial class GenericClient : MonoBehaviour { #pragma warning disable 0649 [Header("Connect")] [SerializeField] private Dropdown templatesDropdown; [SerializeField] private InputField hostInput; [SerializeField] private InputField portInput; [SerializeField] private Dropdown transportDropdown; [SerializeField] private InputField pathInput; [SerializeField] private Toggle isSecureToggle; [SerializeField] private InputField userNameInput; [SerializeField] private InputField passwordInput; [SerializeField] private InputField keepAliveInput; [SerializeField] private Dropdown protocolVersionDropdown; [SerializeField] private Button connectButton; [Header("Connect Last-Will")] [SerializeField] private InputField lastWill_TopicInput; [SerializeField] private Dropdown lastWill_QoSDropdown; [SerializeField] private Toggle lastWill_RetainToggle; [SerializeField] private InputField lastWill_MessageInput; [Header("Publish")] [SerializeField] private InputField publish_TopicInput; [SerializeField] private Dropdown publish_QoSDropdown; [SerializeField] private Toggle publish_RetainToggle; [SerializeField] private InputField publish_MessageInput; [Header("Subscribe")] [SerializeField] private InputField subscribe_ColorInput; [SerializeField] private Dropdown subscribe_QoSDropdown; [SerializeField] private InputField subscribe_TopicInput; [SerializeField] private Transform subscribe_ListItemRoot; [SerializeField] private SubscriptionListItem subscription_ListItem; [SerializeField] private Transform publishSubscribePanel; [Header("Logs")] [SerializeField] private InputField logs_MaxEntriesInput; [SerializeField] private Toggle logs_AutoScroll; [SerializeField] private TextListItem textListItem; [SerializeField] private ScrollRect log_view; [SerializeField] private Transform logRoot; #pragma warning restore private void Awake() { InitUI(); PopulateTemplates(); } private void AddText(string text) { int maxEntries = this.logs_MaxEntriesInput.GetIntValue(100); if (this.logRoot.childCount >= maxEntries) { TrimLogEntries(maxEntries); var child = this.logRoot.GetChild(0); child.GetComponent().SetText(text); child.SetAsLastSibling(); } else { var item = Instantiate(this.textListItem, this.logRoot); item.SetText(text); } bool autoScroll = this.logs_AutoScroll.GetBoolValue(); if (autoScroll) { this.log_view.normalizedPosition = new Vector2(0, 0); } } private void TrimLogEntries(int maxEntries) { while (this.logRoot.childCount > maxEntries) { var child = this.logRoot.GetChild(0); child.transform.SetParent(this.transform); Destroy(child.gameObject); } } private void InitUI() { this.connectButton.GetComponentInChildren().text = "Connect"; this.connectButton.interactable = true; this.connectButton.onClick.RemoveAllListeners(); this.connectButton.onClick.AddListener(OnConnectButton); foreach (var button in this.publishSubscribePanel.GetComponentsInChildren