MQTT_Aug7CreativeTech/godot_client/mqttexample.gd

115 lines
4.1 KiB
GDScript3
Raw Permalink Normal View History

2024-08-06 15:33:18 +00:00
extends Control
var receivedmessagecount = 0
func _ready():
connectedactionsactive(false)
func _on_brokerprotocol_item_selected(index):
# port defaults for [tcp, ssl, ws, wss] used at https://test.mosquitto.org/
$VBox/HBoxBroker/brokerport.text = "%d" % ([ 1883, 8886, 8080, 8081 ][index])
func _on_button_connect_toggled(button_pressed):
if button_pressed:
randomize()
$MQTT.client_id = "s%d" % randi()
if $VBox/HBoxLastwill/lastwilltopic.text:
$MQTT.set_last_will($VBox/HBoxLastwill/lastwilltopic.text,
$VBox/HBoxLastwill/lastwillmessage.text,
$VBox/HBoxLastwill/lastwillretain.button_pressed)
else:
$MQTT.set_last_will("", "", false)
if $VBox/HBoxBroker/brokeruser.text:
$MQTT.set_user_pass($VBox/HBoxBroker/brokeruser.text,
$VBox/HBoxBroker/brokerpswd.text)
else:
$MQTT.set_user_pass(null, null)
$VBox/HBoxBrokerControl/status.text = "connecting..."
var brokerurl = $VBox/HBoxBroker/brokeraddress.text
var protocol = $VBox/HBoxBroker/brokerprotocol.get_item_text($VBox/HBoxBroker/brokerprotocol.selected)
$MQTT.connect_to_broker("%s%s:%s" % [protocol, brokerurl, $VBox/HBoxBroker/brokerport.text])
else:
#$VBox/HBoxBrokerControl/status.text = "disconnecting..."
$MQTT.disconnect_from_server()
func brokersettingsactive(active):
$VBox/HBoxBroker/brokeraddress.editable = active
$VBox/HBoxBroker/brokerport.editable = active
$VBox/HBoxBroker/brokerprotocol.disabled = not active
$VBox/HBoxLastwill/lastwilltopic.editable = active
$VBox/HBoxLastwill/lastwillmessage.editable = active
$VBox/HBoxLastwill/lastwillretain.disabled = not active
$VBox/HBoxBrokerControl/ButtonConnect.button_pressed = not active
func connectedactionsactive(active):
$VBox/HBoxSubscriptions/subscribetopic.editable = active
$VBox/HBoxSubscriptions/subscribe.disabled = not active
$VBox/HBoxPublish/publishtopic.editable = active
$VBox/HBoxPublish/publishmessage.editable = active
$VBox/HBoxPublish/publishretain.disabled = not active
$VBox/HBoxPublish/publish.disabled = not active
if not active:
$VBox/HBoxSubscriptions/subscriptions.clear()
$VBox/HBoxSubscriptions/subscriptions.disabled = true
$VBox/HBoxSubscriptions/unsubscribe.disabled = true
func _on_mqtt_broker_connected():
$VBox/HBoxBrokerControl/status.text = "connected."
brokersettingsactive(false)
connectedactionsactive(true)
receivedmessagecount = 0
func _on_mqtt_broker_disconnected():
$VBox/HBoxBrokerControl/status.text = "disconnected."
brokersettingsactive(true)
connectedactionsactive(false)
func _on_mqtt_broker_connection_failed():
$VBox/HBoxBrokerControl/status.text = "failed."
brokersettingsactive(true)
connectedactionsactive(false)
func _on_mqtt_received_message(topic, message):
if receivedmessagecount == 0:
$VBox/subscribedmessages.clear()
receivedmessagecount += 1
$VBox/subscribedmessages.append_text("[b]%s[/b] %s\n" % [topic, message])
func _on_publish_pressed():
var qos = 0
$MQTT.publish($VBox/HBoxPublish/publishtopic.text,
$VBox/HBoxPublish/publishmessage.text,
$VBox/HBoxPublish/publishretain.button_pressed,
qos)
func _on_subscribe_pressed():
var qos = 0
var topic = $VBox/HBoxSubscriptions/subscribetopic.text.strip_edges()
$MQTT.subscribe(topic, qos)
for i in range($VBox/HBoxSubscriptions/subscriptions.item_count):
if topic == $VBox/HBoxSubscriptions/subscriptions.get_item_text(i):
return
$VBox/HBoxSubscriptions/subscriptions.add_item(topic)
$VBox/HBoxSubscriptions/subscriptions.select($VBox/HBoxSubscriptions/subscriptions.item_count - 1)
$VBox/HBoxSubscriptions/subscriptions.disabled = false
$VBox/HBoxSubscriptions/unsubscribe.disabled = false
func _on_unsubscribe_pressed():
var seloptbutt = $VBox/HBoxSubscriptions/subscriptions
var sel = seloptbutt.selected
var topic = seloptbutt.get_item_text(sel)
$MQTT.unsubscribe(topic)
seloptbutt.remove_item(seloptbutt.selected)
$VBox/HBoxSubscriptions/subscriptions.disabled = (seloptbutt.item_count == 0)
$VBox/HBoxSubscriptions/unsubscribe.disabled = (seloptbutt.item_count == 0)
if seloptbutt.item_count != 0:
seloptbutt.select(min(sel, seloptbutt.item_count - 1))