ARENA Library Scene Callbacks
Library supported callback functions.
Scene callbacks
on_msg_callback
This is called whenever there is a new message sent to the client. Use this whenever you want to sniff out all incoming messages.
Usage:
# [scene] is the Scene that called the callback
# [obj] will be an Object instance
# [msg] is the raw JSON message as a dict
def on_msg_callback(scene, obj, msg):
## do stuff with obj here
obj.object_id
obj.data.position.x
obj.data.scale.y
# etc.
# could also do obj["object_id"] or msg["object_id"]
scene.on_msg_callback = on_msg_callback
new_obj_callback
This is called whenever there is a new object that has been created in the scene, one that the user does not have a reference to. Use this to make references to any new objects that may appear during a programs lifetime. Also a good way to find camera ID’s.
Usage:
# [scene] is the Scene that called the callback
# [obj] will be an Object instance
# [msg] is the raw JSON message as a dict
def new_obj_callback(scene, obj, msg):
## do stuff with obj here
obj.object_id
obj.data.position.x
obj.data.scale.y
# etc.
# could also do obj["object_id"] or msg["object_id"]
scene.new_obj_callback = new_obj_callback
delete_obj_callback
This is called whenever there is an object has been deleted in the scene. arena-py will look for all “action” = “delete” messages and call this callback. Use this to delete references and to be notified when an object is removed by another user or program.
Usage:
# [scene] is the Scene that called the callback
# [obj] will be an Object instance
# [msg] is the raw JSON message as a dict
def delete_obj_callback(scene, obj, msg):
## do stuff with obj here
obj.object_id
obj.data.position.x
obj.data.scale.y
# etc.
# could also do obj["object_id"] or msg["object_id"]
scene.delete_obj_callback = delete_obj_callback
end_program_callback
This is called whenever the program is ending from the SIGINT, Crtl-C, or other kill process. Use this to cleanup resources you don’t want in the scene when the program ends. This is especially useful for persisted objects use created that you want to be removed.
Usage:
# [scene] is the Scene that called the callback
def end_program_callback(scene):
## do stuff with scene root objects here
scene.delete_object(appParentObject)
scene.delete_object(otherAppParentObject)
print("App Terminated.")
# etc.
scene.end_program_callback = end_program_callback
User callbacks
user_join_callback
This is called whenever the library detects/finds a new user that it hasn’t seen before in a scene.
Note: this is not necessarily called when a user “joins” a scene, rather, it is called when the library first sees a Camera
object/receives an “update” message from a user.
Usage:
def user_join_callback(camera):
## Get access to user state
# camera is a Camera class instance (see Objects)
camera.object_id
camera.displayName
camera.hasVideo
# etc.
scene.user_join_callback = user_join_callback
user_left_callback
This is called whenever a user leaves a scene/sends a delete message.
Usage:
def user_left_callback(camera):
## Get access to user state
# camera is a Camera class instance (see Objects)
camera.object_id
camera.displayName
camera.hasVideo
# etc.
scene.user_left_callback = user_left_callback
Adding callbacks when you instantiate the class
You can also add callbacks like so:
from arena import *
def on_msg_callback(scene, obj, msg):
pass
def new_obj_callback(scene, obj, msg):
pass
def delete_obj_callback(scene, obj, msg):
pass
scene = Scene(..., on_msg_callback=on_msg_callback, new_obj_callback=new_obj_callback, delete_obj_callback=delete_obj_callback)
Custom Message Callbacks
If you need to use an MQTT client, the Scene
object exposes a way to use its MQTT client to subscribe to custom topics.
def led_toggle(client, userdata, msg):
# do stuff here
scene.message_callback_add("custom/control/light", led_toggle)