mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-15 00:15:15 +08:00
140 lines
3.9 KiB
Python
140 lines
3.9 KiB
Python
import json
|
|
|
|
|
|
def initialize():
|
|
"""
|
|
This function is invoked after the script file has been loaded.
|
|
It will be executed only one time.
|
|
"""
|
|
|
|
print("Hello World from sample script.")
|
|
|
|
|
|
def destroy():
|
|
"""
|
|
This function is invoked when the script is unloaded due to a script file update etc.
|
|
"""
|
|
|
|
print("Bye from sample script.")
|
|
|
|
|
|
def on_validate_client_connection(context):
|
|
"""
|
|
This function is invoked whenever a client wants to connect. It can be used to validate the connection.
|
|
"""
|
|
|
|
print(context)
|
|
|
|
# Access some custom data here which was inserted upon connect and may use it for validation.
|
|
mqtt_net_server.write_shared_data(context["client_id"], {"custom_value_1": 1, "custom_value_2": True})
|
|
|
|
return
|
|
|
|
# Supported results:
|
|
# * success
|
|
# * unspecified_error
|
|
# * malformed_packet
|
|
# * protocol_error
|
|
# * implementation_specific_error
|
|
# * unsupported_protocol_version
|
|
# * client_identifier_not_valid
|
|
# * bad_user_name_or_password
|
|
# * not_authorized
|
|
# * server_unavailable
|
|
# * server_busy
|
|
# * banned
|
|
# * bad_authentication_method
|
|
# * topic_name_invalid
|
|
# * packet_too_large
|
|
# * quota_exceeded
|
|
# * payload_format_invalid
|
|
# * retain_not_supported
|
|
# * qos_not_supported
|
|
# * use_another_server
|
|
# * server_moved
|
|
# * connection_rate_exceeded
|
|
|
|
if context["client_id"] != "test_client":
|
|
context["result"] = "bad_user_name_or_password"
|
|
return
|
|
|
|
if context["username"] != "bud spencer":
|
|
context["result"] = "bad_user_name_or_password"
|
|
return
|
|
|
|
if context["password_string"] != "secret":
|
|
context["result"] = "bad_user_name_or_password"
|
|
|
|
print(context)
|
|
|
|
|
|
def on_intercept_subscription(context):
|
|
"""
|
|
This function is invoked whenever a client wants to subscribe to a topic.
|
|
"""
|
|
|
|
print("Client '{client_id}' want's to subscribe to topic '{topic}'.".format(client_id=context["client_id"], topic=context["topic"]))
|
|
|
|
|
|
def on_intercept_application_message(context):
|
|
"""
|
|
This function is invoked for every processed application message. It also allows modifying
|
|
the message or cancel processing at all.
|
|
"""
|
|
|
|
client_id = context["client_id"]
|
|
|
|
if client_id != None:
|
|
shared_data = mqtt_net_server.read_shared_data(context["client_id"], {})
|
|
print(shared_data)
|
|
|
|
if context["topic"] == "topic_with_response":
|
|
|
|
json_payload = {
|
|
"hello": "world",
|
|
"x": 1,
|
|
"y": True,
|
|
"z": None
|
|
}
|
|
|
|
application_message = {
|
|
"retain": False,
|
|
"topic": "reply",
|
|
"payload": json.dumps(json_payload)
|
|
}
|
|
|
|
mqtt_net_server.publish(application_message)
|
|
|
|
print("Client '{client_id}' published topic '{topic}'.".format(client_id=context["client_id"], topic=context["topic"]))
|
|
|
|
|
|
def on_client_connected(event_args):
|
|
"""
|
|
This function is called whenever a client has passed the validation is connected.
|
|
"""
|
|
|
|
print("Client '{client_id}' is now connected.".format(client_id=event_args["client_id"]))
|
|
|
|
|
|
def on_client_disconnected(event_args):
|
|
"""
|
|
This function is called whenever a client has disconnected.
|
|
"""
|
|
|
|
print("Client '{client_id}' is now disconnected (type = {type}).".format(client_id=event_args["client_id"], type=event_args["type"]))
|
|
|
|
|
|
def on_client_subscribed_topic(event_args):
|
|
"""
|
|
This function is called whenever a client has subscribed to a topic (when allowed).
|
|
"""
|
|
|
|
print("Client '{client_id}' has subscribed to '{topic}'.".format(client_id=event_args["client_id"], topic=event_args["topic"]))
|
|
|
|
|
|
def on_client_unsubscribed_topic(event_args):
|
|
"""
|
|
This function is called whenever a client has unsubscribed from a topic.
|
|
"""
|
|
|
|
print("Client '{client_id}' has unsubscribed from '{topic}'.".format(client_id=event_args["client_id"], topic=event_args["topic"])) |