class_name KeetIdentity
extends Node
## Identity management for keet-daemon.
## Get/set display name, lookup users, manage profile.
signal identity_loaded(identity: Dictionary)
signal name_changed(name: String)
signal member_found(member: Dictionary)
signal error_occurred(message: String)
var client: KeetUdsClient
## Get the current identity.
func get_identity(callback: Callable = Callable()) -> void:
_require_client()
client.call_rpc("identity", {}, func(result, err):
if err != null:
error_occurred.emit("get_identity: %s" % str(err))
return
var ident: Dictionary = result if result is Dictionary else {}
identity_loaded.emit(ident)
if callback.is_valid():
callback.call(ident)
)
## Set display name.
func set_display_name(display_name: String, callback: Callable = Callable()) -> void:
_require_client()
client.call_rpc("identity.setName", {"name": display_name}, func(result, err):
if err != null:
error_occurred.emit("set_name: %s" % str(err))
return
name_changed.emit(display_name)
if callback.is_valid():
callback.call(result)
)
## Check if a username is available.
func check_username(username: String, callback: Callable = Callable()) -> void:
_require_client()
client.call_rpc("identity.checkName", {"username": username}, func(result, err):
if err != null:
error_occurred.emit("check_username: %s" % str(err))
return
if callback.is_valid():
callback.call(result)
)
## Lookup a user by username.
func lookup_user(username: String, callback: Callable = Callable()) -> void:
_require_client()
client.call_rpc("identity.lookup", {"username": username}, func(result, err):
if err != null:
error_occurred.emit("lookup_user: %s" % str(err))
return
var member: Dictionary = result if result is Dictionary else {}
member_found.emit(member)
if callback.is_valid():
callback.call(member)
)
## Lookup a member by ID within a room.
func lookup_member(room_id: String, member_id: String, callback: Callable = Callable()) -> void:
_require_client()
client.call_rpc("identity.lookupMember", {"roomId": room_id, "memberId": member_id}, func(result, err):
if err != null:
error_occurred.emit("lookup_member: %s" % str(err))
return
var member: Dictionary = result if result is Dictionary else {}
member_found.emit(member)
if callback.is_valid():
callback.call(member)
)
## Get daemon status (uptime, rooms, identity summary).
func get_status(callback: Callable = Callable()) -> void:
_require_client()
client.call_rpc("status", {}, func(result, err):
if err != null:
error_occurred.emit("get_status: %s" % str(err))
return
if callback.is_valid():
callback.call(result)
)
## List all available identities.
func list_identities(callback: Callable = Callable()) -> void:
_require_client()
client.call_rpc("identity-manager.list", {}, func(result, err):
if callback.is_valid():
callback.call(result, err)
)
## Switch to a different identity by ID.
func switch_identity(id: String, callback: Callable = Callable()) -> void:
_require_client()
client.call_rpc("identity-manager.switch", {"id": id}, func(result, err):
if callback.is_valid():
callback.call(result, err)
)
func _require_client() -> void:
if client == null:
push_error("KeetIdentity: client not set. Assign a KeetUdsClient node.")