Skip to content

Common Task Service Interface ​

FunctionC++PythonC#Java
Create Task✔✔✔✔
Dry Run Task✔✔✔✔
Execute Task✔✔✔✔
Pause Task✔✔✔✔
Resume Task✔✔✔✔
Stop Task✔✔✔✔
Delete Task✔✔✔✔
Get Task List✔✔✔✔
Listen Task Status✔✔✔✔
Unregister Task Status✔✔✔✔
Listen Task Script✔-✔✔
Unregister Task Script✔-✔✔

CreateTask ​

Function Prototypes ​

  • C#: RobotTaskOperationResponse CreateTask(string taskId, string scriptContent, int id = 301, int timeoutMs = 5000)
  • C++: TaskOperationReply createTask(const std::string &task_id, const std::string &script_content)
  • Python: async def create_task(task_id: str, script_content: str, timeout: int = 30, wait_timeout: float = 10.0) -> dict
  • Java: void CreateTask(String taskId, String scriptContent)

Function Description ​

Creates a common task.

Parameters ​

Parameter NameTypeRequired/DefaultDescription
taskIdstringRequiredTask identifier
scriptContentstringRequiredTask script content
timeoutintOptionalTimeout (supported by some languages)

Return Value ​

LanguageReturn TypeDescription
C#RobotTaskOperationResponseContains success(bool) and message(string)
C++TaskOperationReplyContains success(bool) and message(string)
PythondictContains success(bool) and message(string)
JavavoidNo return value

Code Example ​

csharp
// C#
private RobotSDKManager _robotSDKManager;
private RobotTaskClient _robotTaskClient;

_robotSDKManager = RobotSDKManager.Instance;
_robotTaskClient = _robotSDKManager.CreateRobotTaskClient();

var result = _robotTaskClient.CreateTask("task_001", "print('hello'");
if (result.success)
{
    Debug.Log($"✓ Task created successfully: {result.message}");
}
else
{
    Debug.LogError($"✗ Task creation failed: {result.message}");
}
python
# Python
from daystar_sdk import WebSocketRobotClient

# Init Client
with WebSocketRobotClient(host='localhost', port=5252) as client:
    success, result_dict = await client.create_task("task_001", "print('hello')")
    if success:
        print("Task created successfully, result:", result_dict)
    else:
        print("Task creation failed, error message:", result_dict)
java
// Java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import com.lenovo.daystar_bot_sdk_client.RobotSDKManager;
import com.lenovo.daystar_bot_sdk_client.DataEntities.RobotType;
import com.lenovo.daystar_bot_sdk_client.adapter.IRobotAdapter;

RobotSDKManager sdkManager = RobotSDKManager.getInstance();
IRobotAdapter adapter = sdkManager.createRobotAdapter(RobotType.HEXAPOD);
TaskServiceClient task = new TaskServiceClient(adapter);
ServiceOperationResponse response = task.CreateTask("task001", "print('Hello from robot task')");
if (!response.success) {
    logger.error("Create task failed: " + response.message);
}
cpp
// C++
Lenovo::Daystar::SDK sdk;

if (!sdk.isConnected()) {
    std::cerr << "Can not connect SDK server with default settings"
              << std::endl;
    return 1;
} else {
    std::cout << "Connected with default settings" << std::endl;
}
auto &sysb = sdk.getSYSB();
auto result = sysb.createTask("task_001", "print('hello')");
if (result.success)
{
    std::cout << "✓ Task created successfully: " << result.message << std::endl;
}
else
{
    std::cout << "✗ Task creation failed: " << result.message << std::endl;
}

Task Script Content Example ​

The following example is a navigation task. You can also add tasks such as gimbal control, manipulation, and charging docking. For a complete introduction and examples of common task scripts, please visit http://im.daystar.cloud:8000/

python
from daystar_api.lowlevel_skills import *
from daystar_api.lowlevel_skills import NavCompleteEvent, NavFailedEvent, NavProgressEvent

# Use this for outdoor waypoints
travel_params_road = MsgTravelParams() # Outdoor waypoint navigation parameters, open obstacle avoidance, ignore orientation
travel_params_road.speed_mode = 2  # HIGH speed
travel_params_road.distance_tolerance = 0.3  # 30cm distance tolerance
travel_params_road.gait = 2  # TROT gait
travel_params_road.disable_body_obstacle_avoidance = False  # Enable obstacle avoidance
travel_params_road.ignore_final_yaw = True  # Ignore target orientation
travel_params_road.path_following_mode = 1  # Default line following
travel_params_road.direction_constraint = 1  # No direction constraint

# Use this for stair endpoints
travel_params_stair = MsgTravelParams() # Stair navigation parameters, close obstacle avoidance, ignore orientation
travel_params_stair.speed_mode = 2  # LOW speed
travel_params_stair.distance_tolerance = 0.3  # 30cm distance tolerance
travel_params_stair.gait = 2  # TROT gait
travel_params_stair.disable_body_obstacle_avoidance = True  # Disable obstacle avoidance
travel_params_stair.ignore_final_yaw = True  # Ignore target orientation
travel_params_stair.path_following_mode = 1  # Default line following
travel_params_stair.direction_constraint = 1  # No direction constraint


def nav_complete_callback(event : NavCompleteEvent):
    print(f"target: {event.target}")

def nav_failed_callback(event: NavFailedEvent):
    print(f"✗ Navigation failed: {event.error_msg}")

def nav_progress_callback(event : NavProgressEvent):
    print(f"distance : {event.distance_remaining}")

navigation_to_location(location='pointD', travel_params=travel_params_road, complete_callback=nav_complete_callback, failed_callback=nav_failed_callback, progress_callback=nav_progress_callback)
navigation_to_location(location='pointC', travel_params=travel_params_road, complete_callback=nav_complete_callback, failed_callback=nav_failed_callback, progress_callback=nav_progress_callback)
navigation_to_location(location='pointE', travel_params=travel_params_road, complete_callback=nav_complete_callback, failed_callback=nav_failed_callback, progress_callback=nav_progress_callback)

ExecuteTask ​

Function Prototypes ​

  • C#: RobotTaskOperationResponse ExecuteTask(string taskId, string scriptContent = null, int id = 302, int timeoutMs = 5000)
  • C++: TaskOperationReply executeTask(const std::string &task_id, const std::string &script_content = "")
  • Python: async def execute_task(task_id: str = "", script_content: str = "", timeout: int = 60, wait_timeout: float = 15.0) -> dict
  • Java: void ExecuteTask(String taskId, String scriptContent, int timeout)

Function Description ​

Executes a common task. If taskId is not empty, it executes an existing task. If taskId is empty and scriptContent is not empty, it dry runs the script.

Parameters ​

Parameter NameTypeRequired/DefaultDescription
taskIdstringOptionalTask identifier (required for existing tasks)
scriptContentstringOptionalScript content (required for dry run)
timeoutintOptionalTimeout

Return Value ​

Same as CreateTask, Java returns void.

Code Example ​

csharp
private RobotSDKManager _robotSDKManager;
private RobotTaskClient _robotTaskClient;

_robotSDKManager = RobotSDKManager.Instance;
_robotTaskClient = _robotSDKManager.CreateRobotTaskClient();

// C# Execute an existing task
var result_1 = _robotTaskClient.ExecuteTask("task_001");
// C# Test run script
var result_2 = _robotTaskClient.ExecuteTask("", "print('test')");
python
# Python
from daystar_sdk import WebSocketRobotClient

with WebSocketRobotClient(host='localhost', port=5252) as client:
    success, result_dict = await client.execute_task(task_id="task_001")
    if success:
        print("Task created successfully, result:", result_dict)
    else:
        print("Task creation failed, error message:", result_dict)
java
// Java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import com.lenovo.daystar_bot_sdk_client.RobotSDKManager;
import com.lenovo.daystar_bot_sdk_client.DataEntities.RobotType;
import com.lenovo.daystar_bot_sdk_client.adapter.IRobotAdapter;

RobotSDKManager sdkManager = RobotSDKManager.getInstance();
IRobotAdapter adapter = sdkManager.createRobotAdapter(RobotType.HEXAPOD);
TaskServiceClient task = new TaskServiceClient(adapter);
ServiceOperationResponse response = task.ExecuteTask("task_001", "", 0);
if (!response.success) {
    logger.error("Execute task failed: " + response.message);
}
cpp
// C++
Lenovo::Daystar::SDK sdk;

if (!sdk.isConnected()) {
    std::cerr << "Can not connect SDK server with default settings"
              << std::endl;
    return 1;
} else {
    std::cout << "Connected with default settings" << std::endl;
}
auto &sysb = sdk.getSYSB();
auto result = sysb.executeTask("task_001");
if (result.success)
{
    std::cout << "✓ Task executed: " << result.message << std::endl;
}
else
{
    std::cout << "✗ Task execution failed: " << result.message << std::endl;
}

Notes ​

  1. Before executing a task, ensure that the current navigation status is localization successful and the current position can be obtained.
  2. How to verify? You can check it in the SDK visualization tool. For detailed usage, refer to the chapter Application Development - Visualization Tool.

PauseTask ​

Function Prototypes ​

  • C#: RobotTaskOperationResponse PauseTask(string taskId, int id = 304, int timeoutMs = 5000)
  • C++: TaskOperationReply pauseTask(const std::string &task_id)
  • Python: async def pause_task(task_id: str, wait_timeout: float = 6.0) -> dict
  • Java: void PauseTask(String taskId)

Function Description ​

Pauses the specified task.

Parameters ​

Parameter NameTypeRequired/DefaultDescription
taskIdstringRequiredTask identifier

Return Value ​

Same as CreateTask, Java returns void.

Code Example ​

csharp
// C#
private RobotSDKManager _robotSDKManager;
private RobotTaskClient _robotTaskClient;

_robotSDKManager = RobotSDKManager.Instance;
_robotTaskClient = _robotSDKManager.CreateRobotTaskClient();

var result = _robotTaskClient.PauseTask("task_001");
python
# Python
from daystar_sdk import WebSocketRobotClient

with WebSocketRobotClient(host='localhost', port=5252) as client:
    success, result_dict = await client.pause_task(task_id="task_001")
    if success:
        print("Task paused successfully, result:", result_dict)
    else:
        print("Task paused failed, error message:", result_dict)
java
// Java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import com.lenovo.daystar_bot_sdk_client.RobotSDKManager;
import com.lenovo.daystar_bot_sdk_client.DataEntities.RobotType;
import com.lenovo.daystar_bot_sdk_client.adapter.IRobotAdapter;

RobotSDKManager sdkManager = RobotSDKManager.getInstance();
IRobotAdapter adapter = sdkManager.createRobotAdapter(RobotType.HEXAPOD);
TaskServiceClient task = new TaskServiceClient(adapter);
ServiceOperationResponse response = robot.PauseTask("task_001");
if (!response.success) {
    logger.error("Failed to pause task: " + response.message);
}
cpp
// C++
Lenovo::Daystar::SDK sdk;

if (!sdk.isConnected()) {
    std::cerr << "Can not connect SDK server with default settings"
              << std::endl;
    return 1;
} else {
    std::cout << "Connected with default settings" << std::endl;
}
auto &sysb = sdk.getSYSB();
auto result = sysb.pauseTask("task_001");
if (result.success)
{
    std::cout << "✓ Task paused: " << result.message << std::endl;
}
else
{
    std::cout << "✗ Failed to pause the task: " << result.message << std::endl;
}

ResumeTask ​

Function Prototypes ​

  • C#: RobotTaskOperationResponse ResumeTask(string taskId, int id = 305, int timeoutMs = 5000)
  • C++: TaskOperationReply resumeTask(const std::string &task_id)
  • Python: async def resume_task(task_id: str, wait_timeout: float = 6.0) -> dict
  • Java: void ResumeTask(String taskId)

Function Description ​

Resumes a paused task.

Parameters ​

Parameter NameTypeRequired/DefaultDescription
taskIdstringRequiredTask identifier

Return Value ​

Same as CreateTask, Java returns void.

Code Example ​

csharp
// C#
private RobotSDKManager _robotSDKManager;
private RobotTaskClient _robotTaskClient;

_robotSDKManager = RobotSDKManager.Instance;
_robotTaskClient = _robotSDKManager.CreateRobotTaskClient();

var result = _robotTaskClient.ResumeTask("task_001");
python
# Python
from daystar_sdk import WebSocketRobotClient

with WebSocketRobotClient(host='localhost', port=5252) as client:
    success, result_dict = await client.resume_task(task_id="task_001")
    if success:
        print("Task resumed successfully, result:", result_dict)
    else:
        print("Task resumed failed, error message:", result_dict)
java
// Java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import com.lenovo.daystar_bot_sdk_client.RobotSDKManager;
import com.lenovo.daystar_bot_sdk_client.DataEntities.RobotType;
import com.lenovo.daystar_bot_sdk_client.adapter.IRobotAdapter;

RobotSDKManager sdkManager = RobotSDKManager.getInstance();
IRobotAdapter adapter = sdkManager.createRobotAdapter(RobotType.HEXAPOD);
TaskServiceClient task = new TaskServiceClient(adapter);
ServiceOperationResponse response = robot.ResumeTask("task_001");
if (!response.success) {
    logger.error("Task resumed failed: " + response.message);
}
cpp
// C++
Lenovo::Daystar::SDK sdk;

if (!sdk.isConnected()) {
    std::cerr << "Can not connect SDK server with default settings"
              << std::endl;
    return 1;
} else {
    std::cout << "Connected with default settings" << std::endl;
}
auto &sysb = sdk.getSYSB();
auto result = sysb.resumeTask("task_001");
if (result.success)
{
    std::cout << "✓ Task resumed: " << result.message << std::endl;
}
else
{
    std::cout << "✗ Task resumed failed: " << result.message << std::endl;
}

StopTask ​

Function Prototypes ​

  • C#: RobotTaskOperationResponse StopTask(string taskId, int id = 306, int timeoutMs = 5000)
  • C++: TaskOperationReply stopTask(const std::string &task_id)
  • Python: async def stop_task(task_id: str = "", wait_timeout: float = 10.0) -> dict
  • Java: void StopTask(String taskId)

Function Description ​

Stops the specified task.

Parameters ​

Parameter NameTypeRequired/DefaultDescription
taskIdstringRequiredTask identifier

Return Value ​

Same as CreateTask, Java returns void.

Code Example ​

csharp
// C#
private RobotSDKManager _robotSDKManager;
private RobotTaskClient _robotTaskClient;

_robotSDKManager = RobotSDKManager.Instance;
_robotTaskClient = _robotSDKManager.CreateRobotTaskClient();

var result = _robotTaskClient.StopTask("task_001");
python
# Python
from daystar_sdk import WebSocketRobotClient

with WebSocketRobotClient(host='localhost', port=5252) as client:
    success, result_dict = await client.stop_task(task_id="task_001")
    if success:
        print("Task stopped successfully, result:", result_dict)
    else:
        print("Failed to stop the task, error message:", result_dict)
java
// Java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import com.lenovo.daystar_bot_sdk_client.RobotSDKManager;
import com.lenovo.daystar_bot_sdk_client.DataEntities.RobotType;
import com.lenovo.daystar_bot_sdk_client.adapter.IRobotAdapter;

RobotSDKManager sdkManager = RobotSDKManager.getInstance();
IRobotAdapter adapter = sdkManager.createRobotAdapter(RobotType.HEXAPOD);
TaskServiceClient task = new TaskServiceClient(adapter);
ServiceOperationResponse response = robot.StopTask("task_001");
if (!response.success) {
    logger.error("Failed to stop the task: " + response.message);
}
cpp
// C++
Lenovo::Daystar::SDK sdk;

if (!sdk.isConnected()) {
    std::cerr << "Can not connect SDK server with default settings"
              << std::endl;
    return 1;
} else {
    std::cout << "Connected with default settings" << std::endl;
}
auto &sysb = sdk.getSYSB();
auto result = sysb.stopTask("task_001");
if (result.success)
{
    std::cout << "✓ Task stopped: " << result.message << std::endl;
}
else
{
    std::cout << "✗ Failed to stop the task: " << result.message << std::endl;
}

DeleteTask ​

Function Prototypes ​

  • C#: RobotTaskOperationResponse DeleteTask(string taskId, int id = 307, int timeoutMs = 5000)
  • C++: TaskOperationReply deleteTask(const std::string &task_id)
  • Python: async def delete_task(task_id: str, wait_timeout: float = 8.0) -> dict
  • Java: void DeleteTask(String taskId)

Function Description ​

Deletes the specified task.

Parameters ​

Parameter NameTypeRequired/DefaultDescription
taskIdstringRequiredTask identifier

Return Value ​

Same as CreateTask, Java returns void.

Code Example ​

csharp
// C#
private RobotSDKManager _robotSDKManager;
private RobotTaskClient _robotTaskClient;

_robotSDKManager = RobotSDKManager.Instance;
_robotTaskClient = _robotSDKManager.CreateRobotTaskClient();

var result = _robotTaskClient.DeleteTask("task_001");
python
# Python
from daystar_sdk import WebSocketRobotClient

with WebSocketRobotClient(host='localhost', port=5252) as client:
    success, result_dict = await client.delete_task(task_id="task_001")
    if success:
        print("Task deleted successfully, result:", result_dict)
    else:
        print("Failed to delete task, error message:", result_dict)
java
// Java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import com.lenovo.daystar_bot_sdk_client.RobotSDKManager;
import com.lenovo.daystar_bot_sdk_client.DataEntities.RobotType;
import com.lenovo.daystar_bot_sdk_client.adapter.IRobotAdapter;

RobotSDKManager sdkManager = RobotSDKManager.getInstance();
IRobotAdapter adapter = sdkManager.createRobotAdapter(RobotType.HEXAPOD);
TaskServiceClient task = new TaskServiceClient(adapter);
ServiceOperationResponse response = robot.DeleteTask("task_001");
if (!response.success) {
    logger.error("Failed to delete task: " + response.message);
}
cpp
// C++
Lenovo::Daystar::SDK sdk;

if (!sdk.isConnected()) {
    std::cerr << "Can not connect SDK server with default settings"
              << std::endl;
    return 1;
} else {
    std::cout << "Connected with default settings" << std::endl;
}
auto &sysb = sdk.getSYSB();
auto result = sysb.deleteTask("task_001");
if (result.success)
{
    std::cout << "✓ Task deleted: " << result.message << std::endl;
}
else
{
    std::cout << "✗ Failed to delete the task: " << result.message << std::endl;
}

GetAllTasks ​

Function Prototypes ​

  • C#: RobotTaskOperationResponse GetAllTasks(int id = 308, int timeoutMs = 5000)
  • C++: GetAllTasksReply getAllTasks()
  • Python: async def get_all_tasks(wait_timeout: float = 8.0) -> dict
  • Java: List<String> GetAllTasks()

Function Description ​

Retrieves the list of all created tasks.

Parameters ​

None

Return Value ​

LanguageReturn TypeDescription
C#RobotTaskOperationResponseParsed to get task list
C++GetAllTasksReplyContains std::vector<std::string> tasks
PythondictContains task_ids list
JavaList<String>Returns task ID list directly

Code Example ​

csharp
// C#
private RobotSDKManager _robotSDKManager;
private RobotTaskClient _robotTaskClient;

_robotSDKManager = RobotSDKManager.Instance;
_robotTaskClient = _robotSDKManager.CreateRobotTaskClient();

var result = _robotTaskClient.GetAllTasks();
if (result.success)
{
    string taskList = "Task List:\n";
    if (result.taskIds != null && result.taskIds.Length > 0)
    {
        for (int i = 0; i < result.taskIds.Length; i++)
        {
            taskList += $"{i + 1}. {result.taskIds[i]}\n";
        }
    }
    else
    {
        taskList += "No tasks";
    }
    
    Debug.Log($"✓ Got all tasks: {result.message}");
}
else
{
    Debug.LogError($"✗ Failed to get all tasks: {result.message}");
}
python
# Python
from daystar_sdk import WebSocketRobotClient

with WebSocketRobotClient(host='localhost', port=5252) as client:
    result = await client.get_all_tasks()
    print(f"result: {result}")
java
// Java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import com.lenovo.daystar_bot_sdk_client.RobotSDKManager;
import com.lenovo.daystar_bot_sdk_client.DataEntities.RobotType;
import com.lenovo.daystar_bot_sdk_client.adapter.IRobotAdapter;

RobotSDKManager sdkManager = RobotSDKManager.getInstance();
IRobotAdapter adapter = sdkManager.createRobotAdapter(RobotType.HEXAPOD);
TaskServiceClient task = new TaskServiceClient(adapter);
List<String> tasks = task.GetAllTasks();
for (String taskId : tasks) {
    System.out.println("Task: " + taskId);
}
cpp
// C++
Lenovo::Daystar::SDK sdk;

if (!sdk.isConnected()) {
    std::cerr << "Can not connect SDK server with default settings"
              << std::endl;
    return 1;
} else {
    std::cout << "Connected with default settings" << std::endl;
}
auto &sysb = sdk.getSYSB();
auto result = sysb.getAllTasks();
if (result.success)
{
    std::cout << "✓ Task List(" << result.task_ids.size() << "task):" << std::endl;
    for (size_t i = 0; i < result.task_ids.size(); i++)
    {
        std::cout << "  " << (i + 1) << ". ID: " << result.task_ids[i] << std::endl;
    }
}
else
{
    std::cout << "✗ Failed to get task list: " << result.message << std::endl;
}

RegisterTaskStatusCallback ​

Function Prototypes ​

  • C#: bool RegisterTaskStatusCallback(Action<object> callback)
  • C++: void setTaskStatusCallback(std::function<void(const TaskStatus &)> callback)
  • Python: async def register_task_status_callback(callback: Callable)
  • Java: void RegisterTaskStatusFeedback(Consumer<TaskStatus> callback)

Function Description ​

Registers a callback to listen for task status updates.

Parameters ​

Parameter NameTypeRequired/DefaultDescription
callbackfunctionRequiredCallback function, receives the task status object

Return Value ​

  • C#: bool (success)
  • Python: bool (success)
  • C++/Java: void

Code Example ​

csharp
// C#
private RobotSDKManager _robotSDKManager;
private RobotTaskClient _robotTaskClient;

_robotSDKManager = RobotSDKManager.Instance;
_robotTaskClient = _robotSDKManager.CreateRobotTaskClient();

void OnTaskStatusUpdate(object statusData)
{
    try
    {
        Debug.Log($"[TaskStatusCallback] Received task status update: {statusData}");
        
        // Attempt to parse task status data
        string statusText = "【Task Status Update】\n";
        
        if (statusData == null)
        {
            statusText += "Status data is null";
        }
        else
        {
            // Parse status data using reflection or type conversion
            var dataType = statusData.GetType();
            statusText += $"Data Type: {dataType.Name}\n";
            statusText += $"Details: {statusData}\n";
            
            // Attempt to get common fields
            try
            {
                var taskIdProp = dataType.GetProperty("task_id") ?? dataType.GetProperty("taskId");
                var statusProp = dataType.GetProperty("status");
                var messageProp = dataType.GetProperty("message");
                var progressProp = dataType.GetProperty("progress");
                
                if (taskIdProp != null)
                {
                    var taskId = taskIdProp.GetValue(statusData);
                    statusText += $"Task ID: {taskId}\n";
                }
                
                if (statusProp != null)
                {
                    var status = statusProp.GetValue(statusData);
                    statusText += $"Status: {status}\n";
                }
                
                if (messageProp != null)
                {
                    var message = messageProp.GetValue(statusData);
                    statusText += $"Message: {message}\n";
                }
                
                if (progressProp != null)
                {
                    var progress = progressProp.GetValue(statusData);
                    statusText += $"Progress: {progress}\n";
                }
            }
            catch (Exception parseEx)
            {
                Debug.LogWarning($"Failed to parse task status fields: {parseEx.Message}");
            }
        }
        
    }
    catch (Exception ex)
    {
        Debug.LogError($"Error in OnTaskStatusUpdate: {ex.Message}\n{ex.StackTrace}");
    }
}

bool success = _robotTaskClient.RegisterTaskStatusCallback(OnTaskStatusUpdate);
if (success)
{
    Debug.Log("✓ Task status callback registered successfully");
}
else
{
    Debug.LogError("✗ Failed to register task status callback");
}
python
# Python
from daystar_sdk import WebSocketRobotClient

async def on_status(data):
    print(data)

with WebSocketRobotClient(host='localhost', port=5252) as client:
    await client.register_task_status(on_status)
java
// Java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import com.lenovo.daystar_bot_sdk_client.RobotSDKManager;
import com.lenovo.daystar_bot_sdk_client.DataEntities.RobotType;
import com.lenovo.daystar_bot_sdk_client.adapter.IRobotAdapter;

RobotSDKManager sdkManager = RobotSDKManager.getInstance();
IRobotAdapter adapter = sdkManager.createRobotAdapter(RobotType.HEXAPOD);
TaskServiceClient task = new TaskServiceClient(adapter);
task.RegisterTaskStatusFeedback(new Consumer<TaskStatus>() {
    @Override
    public void accept(TaskStatus feedback) {
        logger.info("TaskStatusFeedback with id: " + feedback.task_id + 
                    ", State: " + feedback.state +
                    ", State Name: " + feedback.state_name +
                    ", Progress: " + feedback.progress + 
                    ", Current Operation: " + feedback.current_operation +
                    ", Error Message: " + feedback.error_message +
                    ", Start Time: " + feedback.start_time +
                    ", Last Update: " + feedback.last_update +
                    ", Timeout Seconds: " + feedback.timeout_seconds);
    }
});
cpp
// C++
Lenovo::Daystar::SDK sdk;

if (!sdk.isConnected()) {
    std::cerr << "Can not connect SDK server with default settings"
              << std::endl;
    return 1;
} else {
    std::cout << "Connected with default settings" << std::endl;
}
auto &sysb = sdk.getSYSB();
sysb.setTaskStatusCallback([](const Lenovo::Daystar::TaskStatus &task_status) {
    std::cout << "[Callback] Task status update: ID=" << task_status.task_id 
        << ", Status=" << task_status.status 
        << ", Message=" << task_status.message << std::endl;
});
std::cout << "✓ Task status callback registered" << std::endl;

RegisterScriptOutputCallback ​

Function Prototypes ​

  • C#: bool RegisterScriptOutputCallback(Action<object> callback)
  • C++: void setScriptOutputCallback(std::function<void(const ScriptOutput &)> callback)
  • Java: void registerScriptOutputFeedback(Consumer<ScriptOutput> callback)
  • Python: N/A

Function Description ​

Registers a callback to listen for script execution output.

Parameters ​

Parameter NameTypeRequired/DefaultDescription
callbackfunctionRequiredCallback function, receives the script output object

Return Value ​

None

Code Example ​

csharp
// C#
private RobotSDKManager _robotSDKManager;
private RobotTaskClient _robotTaskClient;

_robotSDKManager = RobotSDKManager.Instance;
_robotTaskClient = _robotSDKManager.CreateRobotTaskClient();

void OnScriptOutput(object outputData)
{
    try
    {
        Debug.Log($"[ScriptOutputCallback] Received script output: {outputData}");
        
        // Attempt to parse script output data
        string outputText = "【Script Output】\n";
        
        if (outputData == null)
        {
            outputText += "Output data is null";
        }
        else
        {
            // Parse output data using reflection or type conversion
            var dataType = outputData.GetType();
            outputText += $"Data Type: {dataType.Name}\n";
            outputText += $"Details: {outputData}\n";
            
            // Attempt to get common fields
            try
            {
                var taskIdProp = dataType.GetProperty("task_id") ?? dataType.GetProperty("taskId");
                var outputProp = dataType.GetProperty("output") ?? dataType.GetProperty("content");
                var timestampProp = dataType.GetProperty("timestamp");
                
                if (taskIdProp != null)
                {
                    var taskId = taskIdProp.GetValue(outputData);
                    outputText += $"Task ID: {taskId}\n";
                }
                
                if (timestampProp != null)
                {
                    var timestamp = timestampProp.GetValue(outputData);
                    outputText += $"Timestamp: {timestamp}\n";
                }
                
                if (outputProp != null)
                {
                    var output = outputProp.GetValue(outputData);
                    outputText += $"Output Content:\n{output}\n";
                }
            }
            catch (Exception parseEx)
            {
                Debug.LogWarning($"Failed to parse script output fields: {parseEx.Message}");
            }
        }
    }
    catch (Exception ex)
    {
        Debug.LogError($"Error in OnScriptOutput: {ex.Message}\n{ex.StackTrace}");
    }
}

bool success = _robotTaskClient.RegisterScriptOutputCallback(OnScriptOutput);
if (success)
{
    Debug.Log("✓ Script output callback registered successfully");
}
else
{
    Debug.LogError("✗ Failed to register script output callback");
}
csharp
cpp
// C++
Lenovo::Daystar::SDK sdk;

if (!sdk.isConnected()) {
    std::cerr << "Can not connect SDK server with default settings"
              << std::endl;
    return 1;
} else {
    std::cout << "Connected with default settings" << std::endl;
}
auto &sysb = sdk.getSYSB();
sysb.setScriptOutputCallback([](const Lenovo::Daystar::ScriptOutput &output) {
    std::cout << "[Callback] Script output: Level=" << output.level 
        << ", Content=" << output.output << std::endl;
});
std::cout << "✓ Script output callback registered successfully" << std::endl;

UnregisterTaskStatusCallback ​

Function Prototypes ​

  • C#: bool UnregisterTaskStatusCallback()
  • C++: void setTaskStatusCallback(nullptr)
  • Python: async def unregister_task_status() -> bool
  • Java: void UnregisterTaskStatusFeedback()

Function Description ​

Unregisters the task status callback.

Parameters ​

None

Return Value ​

  • C#: bool (Success)
  • Python: bool (Success)
  • C++/Java: void

Code Example ​

csharp
// C#
private RobotSDKManager _robotSDKManager;
private RobotTaskClient _robotTaskClient;

_robotSDKManager = RobotSDKManager.Instance;
_robotTaskClient = _robotSDKManager.CreateRobotTaskClient();

bool success = _robotTaskClient.UnregisterTaskStatusCallback();
if (success)
{
    Debug.Log("✓ Task status callback unregistered successfully");
}
else
{
    Debug.LogError("✗ Failed to unregister task status callback");
}
python
# Python
from daystar_sdk import WebSocketRobotClient

with WebSocketRobotClient(host='localhost', port=5252) as client:
    await client.unregister_task_status()
java
// Java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import com.lenovo.daystar_bot_sdk_client.RobotSDKManager;
import com.lenovo.daystar_bot_sdk_client.DataEntities.RobotType;
import com.lenovo.daystar_bot_sdk_client.adapter.IRobotAdapter;

RobotSDKManager sdkManager = RobotSDKManager.getInstance();
IRobotAdapter adapter = sdkManager.createRobotAdapter(RobotType.HEXAPOD);
TaskServiceClient task = new TaskServiceClient(adapter);
task.UnregisterTaskStatusFeedback();
cpp
// C++
Lenovo::Daystar::SDK sdk;

if (!sdk.isConnected()) {
    std::cerr << "Can not connect SDK server with default settings"
              << std::endl;
    return 1;
} else {
    std::cout << "Connected with default settings" << std::endl;
}
auto &sysb = sdk.getSYSB();
sysb.setTaskStatusCallback(nullptr);
std::cout << "✓ Task status callback unregistered successfully" << std::endl;

UnregisterScriptOutputCallback ​

Function Prototypes ​

  • C#: bool UnregisterScriptOutputCallback()
  • C++: void setScriptOutputCallback(nullptr)
  • Java: void unregisterScriptOutputFeedback()
  • Python: N/A

Function Description ​

Unregisters the script output callback.

Parameters ​

None

Return Value ​

  • C#: bool (Success)
  • C++/Java: void

Code Example ​

csharp
// C#
private RobotSDKManager _robotSDKManager;
private RobotTaskClient _robotTaskClient;

_robotSDKManager = RobotSDKManager.Instance;
_robotTaskClient = _robotSDKManager.CreateRobotTaskClient();

bool success = _robotTaskClient.UnregisterScriptOutputCallback();
if (success)
{
    Debug.Log("✓ Script output callback unregistered successfully");
}
else
{
    Debug.LogError("✗ Failed to unregister script output callback");
}
java
// Java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import com.lenovo.daystar_bot_sdk_client.RobotSDKManager;
import com.lenovo.daystar_bot_sdk_client.DataEntities.RobotType;
import com.lenovo.daystar_bot_sdk_client.adapter.IRobotAdapter;

RobotSDKManager sdkManager = RobotSDKManager.getInstance();
IRobotAdapter adapter = sdkManager.createRobotAdapter(RobotType.HEXAPOD);
TaskServiceClient task = new TaskServiceClient(adapter);
task.unregisterScriptOutputFeedback();
cpp
// C++
Lenovo::Daystar::SDK sdk;

if (!sdk.isConnected()) {
    std::cerr << "Can not connect SDK server with default settings"
              << std::endl;
    return 1;
} else {
    std::cout << "Connected with default settings" << std::endl;
}
auto &sysb = sdk.getSYSB();
sysb.setScriptOutputCallback(nullptr); 
std::cout << "✓ Script output callback unregistered successfully" << std::endl;