#ifndef __BBL_NETWORK_PLUGIN_HPP__ #define __BBL_NETWORK_PLUGIN_HPP__ #include "bambu_networking.hpp" #include "libslic3r/ProjectTask.hpp" #include #include #include #include #include #include #if defined(_MSC_VER) || defined(_WIN32) #include #endif namespace Slic3r { // ============================================================================ // Function Pointer Types (copied from NetworkAgent.hpp) // ============================================================================ typedef bool (*func_check_debug_consistent)(bool is_debug); typedef std::string (*func_get_version)(void); typedef void* (*func_create_agent)(std::string log_dir); typedef int (*func_destroy_agent)(void *agent); typedef int (*func_init_log)(void *agent); typedef int (*func_set_config_dir)(void *agent, std::string config_dir); typedef int (*func_set_cert_file)(void *agent, std::string folder, std::string filename); typedef int (*func_set_country_code)(void *agent, std::string country_code); typedef int (*func_start)(void *agent); typedef int (*func_set_on_ssdp_msg_fn)(void *agent, OnMsgArrivedFn fn); typedef int (*func_set_on_user_login_fn)(void *agent, OnUserLoginFn fn); typedef int (*func_set_on_printer_connected_fn)(void *agent, OnPrinterConnectedFn fn); typedef int (*func_set_on_server_connected_fn)(void *agent, OnServerConnectedFn fn); typedef int (*func_set_on_http_error_fn)(void *agent, OnHttpErrorFn fn); typedef int (*func_set_get_country_code_fn)(void *agent, GetCountryCodeFn fn); typedef int (*func_set_on_subscribe_failure_fn)(void *agent, GetSubscribeFailureFn fn); typedef int (*func_set_on_message_fn)(void *agent, OnMessageFn fn); typedef int (*func_set_on_user_message_fn)(void *agent, OnMessageFn fn); typedef int (*func_set_on_local_connect_fn)(void *agent, OnLocalConnectedFn fn); typedef int (*func_set_on_local_message_fn)(void *agent, OnMessageFn fn); typedef int (*func_set_queue_on_main_fn)(void *agent, QueueOnMainFn fn); typedef int (*func_connect_server)(void *agent); typedef bool (*func_is_server_connected)(void *agent); typedef int (*func_refresh_connection)(void *agent); typedef int (*func_start_subscribe)(void *agent, std::string module); typedef int (*func_stop_subscribe)(void *agent, std::string module); typedef int (*func_add_subscribe)(void *agent, std::vector dev_list); typedef int (*func_del_subscribe)(void *agent, std::vector dev_list); typedef void (*func_enable_multi_machine)(void *agent, bool enable); typedef int (*func_send_message)(void *agent, std::string dev_id, std::string json_str, int qos, int flag); typedef int (*func_connect_printer)(void *agent, std::string dev_id, std::string dev_ip, std::string username, std::string password, bool use_ssl); typedef int (*func_disconnect_printer)(void *agent); typedef int (*func_send_message_to_printer)(void *agent, std::string dev_id, std::string json_str, int qos, int flag); typedef int (*func_check_cert)(void* agent); typedef void (*func_install_device_cert)(void* agent, std::string dev_id, bool lan_only); typedef bool (*func_start_discovery)(void *agent, bool start, bool sending); typedef int (*func_change_user)(void *agent, std::string user_info); typedef bool (*func_is_user_login)(void *agent); typedef int (*func_user_logout)(void *agent, bool request); typedef std::string (*func_get_user_id)(void *agent); typedef std::string (*func_get_user_name)(void *agent); typedef std::string (*func_get_user_avatar)(void *agent); typedef std::string (*func_get_user_nickanme)(void *agent); typedef std::string (*func_build_login_cmd)(void *agent); typedef std::string (*func_build_logout_cmd)(void *agent); typedef std::string (*func_build_login_info)(void *agent); typedef int (*func_ping_bind)(void *agent, std::string ping_code); typedef int (*func_bind_detect)(void *agent, std::string dev_ip, std::string sec_link, detectResult& detect); typedef int (*func_set_server_callback)(void *agent, OnServerErrFn fn); typedef int (*func_bind)(void *agent, std::string dev_ip, std::string dev_id, std::string sec_link, std::string timezone, bool improved, OnUpdateStatusFn update_fn); typedef int (*func_unbind)(void *agent, std::string dev_id); typedef std::string (*func_get_bambulab_host)(void *agent); typedef std::string (*func_get_user_selected_machine)(void *agent); typedef int (*func_set_user_selected_machine)(void *agent, std::string dev_id); typedef int (*func_start_print)(void *agent, PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, OnWaitFn wait_fn); typedef int (*func_start_local_print_with_record)(void *agent, PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, OnWaitFn wait_fn); typedef int (*func_start_send_gcode_to_sdcard)(void *agent, PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, OnWaitFn wait_fn); typedef int (*func_start_local_print)(void *agent, PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn); typedef int (*func_start_sdcard_print)(void *agent, PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn); typedef int (*func_get_user_presets)(void *agent, std::map>* user_presets); typedef std::string (*func_request_setting_id)(void *agent, std::string name, std::map* values_map, unsigned int* http_code); typedef int (*func_put_setting)(void *agent, std::string setting_id, std::string name, std::map* values_map, unsigned int* http_code); typedef int (*func_get_setting_list)(void *agent, std::string bundle_version, ProgressFn pro_fn, WasCancelledFn cancel_fn); typedef int (*func_get_setting_list2)(void *agent, std::string bundle_version, CheckFn chk_fn, ProgressFn pro_fn, WasCancelledFn cancel_fn); typedef int (*func_delete_setting)(void *agent, std::string setting_id); typedef std::string (*func_get_studio_info_url)(void *agent); typedef int (*func_set_extra_http_header)(void *agent, std::map extra_headers); typedef int (*func_get_my_message)(void *agent, int type, int after, int limit, unsigned int* http_code, std::string* http_body); typedef int (*func_check_user_task_report)(void *agent, int* task_id, bool* printable); typedef int (*func_get_user_print_info)(void *agent, unsigned int* http_code, std::string* http_body); typedef int (*func_get_user_tasks)(void *agent, TaskQueryParams params, std::string* http_body); typedef int (*func_get_printer_firmware)(void *agent, std::string dev_id, unsigned* http_code, std::string* http_body); typedef int (*func_get_task_plate_index)(void *agent, std::string task_id, int* plate_index); typedef int (*func_get_user_info)(void *agent, int* identifier); typedef int (*func_request_bind_ticket)(void *agent, std::string* ticket); typedef int (*func_get_subtask_info)(void *agent, std::string subtask_id, std::string* task_json, unsigned int* http_code, std::string *http_body); typedef int (*func_get_slice_info)(void *agent, std::string project_id, std::string profile_id, int plate_index, std::string* slice_json); typedef int (*func_query_bind_status)(void *agent, std::vector query_list, unsigned int* http_code, std::string* http_body); typedef int (*func_modify_printer_name)(void *agent, std::string dev_id, std::string dev_name); typedef int (*func_get_camera_url)(void *agent, std::string dev_id, std::function callback); typedef int (*func_get_design_staffpick)(void *agent, int offset, int limit, std::function callback); typedef int (*func_start_pubilsh)(void *agent, PublishParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, std::string* out); typedef int (*func_get_model_publish_url)(void *agent, std::string* url); typedef int (*func_get_subtask)(void *agent, BBLModelTask* task, OnGetSubTaskFn getsub_fn); typedef int (*func_get_model_mall_home_url)(void *agent, std::string* url); typedef int (*func_get_model_mall_detail_url)(void *agent, std::string* url, std::string id); typedef int (*func_get_my_profile)(void *agent, std::string token, unsigned int *http_code, std::string *http_body); typedef int (*func_track_enable)(void *agent, bool enable); typedef int (*func_track_remove_files)(void *agent); typedef int (*func_track_event)(void *agent, std::string evt_key, std::string content); typedef int (*func_track_header)(void *agent, std::string header); typedef int (*func_track_update_property)(void *agent, std::string name, std::string value, std::string type); typedef int (*func_track_get_property)(void *agent, std::string name, std::string& value, std::string type); typedef int (*func_put_model_mall_rating_url)(void *agent, int rating_id, int score, std::string content, std::vector images, unsigned int &http_code, std::string &http_error); typedef int (*func_get_oss_config)(void *agent, std::string &config, std::string country_code, unsigned int &http_code, std::string &http_error); typedef int (*func_put_rating_picture_oss)(void *agent, std::string &config, std::string &pic_oss_path, std::string model_id, int profile_id, unsigned int &http_code, std::string &http_error); typedef int (*func_get_model_mall_rating_result)(void *agent, int job_id, std::string &rating_result, unsigned int &http_code, std::string &http_error); typedef int (*func_get_mw_user_preference)(void *agent, std::function callback); typedef int (*func_get_mw_user_4ulist)(void *agent, int seed, int limit, std::function callback); // Legacy function pointer types (for older DLL versions) typedef int (*func_start_print_legacy)(void *agent, PrintParams_Legacy params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, OnWaitFn wait_fn); typedef int (*func_start_local_print_with_record_legacy)(void *agent, PrintParams_Legacy params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, OnWaitFn wait_fn); typedef int (*func_start_send_gcode_to_sdcard_legacy)(void *agent, PrintParams_Legacy params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, OnWaitFn wait_fn); typedef int (*func_start_local_print_legacy)(void *agent, PrintParams_Legacy params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn); typedef int (*func_start_sdcard_print_legacy)(void* agent, PrintParams_Legacy params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn); typedef int (*func_send_message_legacy)(void* agent, std::string dev_id, std::string json_str, int qos); typedef int (*func_send_message_to_printer_legacy)(void* agent, std::string dev_id, std::string json_str, int qos); /** * BBLNetworkPlugin - Singleton managing the Bambu Lab network DLL. * * Responsibilities: * - Owns the DLL module handle (netwoking_module) * - Owns the DLL source module handle (source_module) * - Manages the shared void* agent handle * - Provides all function pointers to BBL agents * * Usage: * auto& plugin = BBLNetworkPlugin::instance(); * if (plugin.initialize(version)) { * plugin.create_agent(log_dir); * // Now BBLCloudServiceAgent/BBLPrinterAgent can use plugin * } */ class BBLNetworkPlugin { public: // Singleton access static BBLNetworkPlugin& instance(); // Delete copy/move BBLNetworkPlugin(const BBLNetworkPlugin&) = delete; BBLNetworkPlugin& operator=(const BBLNetworkPlugin&) = delete; BBLNetworkPlugin(BBLNetworkPlugin&&) = delete; BBLNetworkPlugin& operator=(BBLNetworkPlugin&&) = delete; // ======================================================================== // Module Lifecycle // ======================================================================== /** * Load the network DLL from the plugins folder. * @param using_backup If true, look in plugins/backup folder * @param version Required version string (e.g., "01.09.05.01") * @return 0 on success, -1 on failure */ int initialize(bool using_backup = false, const std::string& version = ""); /** * Unload the network DLL and clear all function pointers. * @return 0 on success */ int unload(); /** * Destroy the singleton instance. * Safe to call multiple times - does nothing if already destroyed. * Must be called during application shutdown before main() returns. */ static void shutdown(); /** * Check if DLL is currently loaded. */ bool is_loaded() const; /** * Get the plugin version string. */ std::string get_version() const; // ======================================================================== // Agent Lifecycle // ======================================================================== /** * Create the shared agent handle. * Only one agent can exist at a time. * @param log_dir Directory for log files * @return The created agent handle, or nullptr on failure */ void* create_agent(const std::string& log_dir); /** * Destroy the shared agent handle. * @return 0 on success */ int destroy_agent(); /** * Get the current agent handle. * Returns nullptr if no agent created. */ void* get_agent() const { return m_agent; } /** * Check if an agent has been created. */ bool has_agent() const { return m_agent != nullptr; } // ======================================================================== // DLL Module Accessors // ======================================================================== #if defined(_MSC_VER) || defined(_WIN32) HMODULE get_networking_module() const { return m_networking_module; } HMODULE get_source_module(); #else void* get_networking_module() const { return m_networking_module; } void* get_source_module(); #endif void* get_function(const char* name); // Aliases for backward compatibility with NetworkAgent API void* get_network_function(const char* name) { return get_function(name); } #if defined(_MSC_VER) || defined(_WIN32) HMODULE get_bambu_source_entry() { return get_source_module(); } #else void* get_bambu_source_entry() { return get_source_module(); } #endif // ======================================================================== // Utility Methods // ======================================================================== static std::string get_libpath_in_current_directory(const std::string& library_name); static std::string get_versioned_library_path(const std::string& version); static bool versioned_library_exists(const std::string& version); static bool legacy_library_exists(); static void remove_legacy_library(); static std::vector scan_plugin_versions(); // ======================================================================== // Error Handling // ======================================================================== NetworkLibraryLoadError get_load_error() const { return m_load_error; } void clear_load_error(); void set_load_error(const std::string& message, const std::string& technical_details, const std::string& attempted_path); // ======================================================================== // Legacy Network Flag // ======================================================================== bool use_legacy_network() const { return m_use_legacy_network; } void set_use_legacy_network(bool legacy) { m_use_legacy_network = legacy; } // ======================================================================== // Function Pointer Accessors // ======================================================================== func_check_debug_consistent get_check_debug_consistent() const { return m_check_debug_consistent; } func_get_version get_get_version() const { return m_get_version; } func_create_agent get_create_agent() const { return m_create_agent; } func_destroy_agent get_destroy_agent() const { return m_destroy_agent; } func_init_log get_init_log() const { return m_init_log; } func_set_config_dir get_set_config_dir() const { return m_set_config_dir; } func_set_cert_file get_set_cert_file() const { return m_set_cert_file; } func_set_country_code get_set_country_code() const { return m_set_country_code; } func_start get_start() const { return m_start; } func_set_on_ssdp_msg_fn get_set_on_ssdp_msg_fn() const { return m_set_on_ssdp_msg_fn; } func_set_on_user_login_fn get_set_on_user_login_fn() const { return m_set_on_user_login_fn; } func_set_on_printer_connected_fn get_set_on_printer_connected_fn() const { return m_set_on_printer_connected_fn; } func_set_on_server_connected_fn get_set_on_server_connected_fn() const { return m_set_on_server_connected_fn; } func_set_on_http_error_fn get_set_on_http_error_fn() const { return m_set_on_http_error_fn; } func_set_get_country_code_fn get_set_get_country_code_fn() const { return m_set_get_country_code_fn; } func_set_on_subscribe_failure_fn get_set_on_subscribe_failure_fn() const { return m_set_on_subscribe_failure_fn; } func_set_on_message_fn get_set_on_message_fn() const { return m_set_on_message_fn; } func_set_on_user_message_fn get_set_on_user_message_fn() const { return m_set_on_user_message_fn; } func_set_on_local_connect_fn get_set_on_local_connect_fn() const { return m_set_on_local_connect_fn; } func_set_on_local_message_fn get_set_on_local_message_fn() const { return m_set_on_local_message_fn; } func_set_queue_on_main_fn get_set_queue_on_main_fn() const { return m_set_queue_on_main_fn; } func_connect_server get_connect_server() const { return m_connect_server; } func_is_server_connected get_is_server_connected() const { return m_is_server_connected; } func_refresh_connection get_refresh_connection() const { return m_refresh_connection; } func_start_subscribe get_start_subscribe() const { return m_start_subscribe; } func_stop_subscribe get_stop_subscribe() const { return m_stop_subscribe; } func_add_subscribe get_add_subscribe() const { return m_add_subscribe; } func_del_subscribe get_del_subscribe() const { return m_del_subscribe; } func_enable_multi_machine get_enable_multi_machine() const { return m_enable_multi_machine; } func_send_message get_send_message() const { return m_send_message; } func_connect_printer get_connect_printer() const { return m_connect_printer; } func_disconnect_printer get_disconnect_printer() const { return m_disconnect_printer; } func_send_message_to_printer get_send_message_to_printer() const { return m_send_message_to_printer; } func_check_cert get_check_cert() const { return m_check_cert; } func_install_device_cert get_install_device_cert() const { return m_install_device_cert; } func_start_discovery get_start_discovery() const { return m_start_discovery; } func_change_user get_change_user() const { return m_change_user; } func_is_user_login get_is_user_login() const { return m_is_user_login; } func_user_logout get_user_logout() const { return m_user_logout; } func_get_user_id get_get_user_id() const { return m_get_user_id; } func_get_user_name get_get_user_name() const { return m_get_user_name; } func_get_user_avatar get_get_user_avatar() const { return m_get_user_avatar; } func_get_user_nickanme get_get_user_nickanme() const { return m_get_user_nickanme; } func_build_login_cmd get_build_login_cmd() const { return m_build_login_cmd; } func_build_logout_cmd get_build_logout_cmd() const { return m_build_logout_cmd; } func_build_login_info get_build_login_info() const { return m_build_login_info; } func_ping_bind get_ping_bind() const { return m_ping_bind; } func_bind_detect get_bind_detect() const { return m_bind_detect; } func_set_server_callback get_set_server_callback() const { return m_set_server_callback; } func_bind get_bind() const { return m_bind; } func_unbind get_unbind() const { return m_unbind; } func_get_bambulab_host get_get_bambulab_host() const { return m_get_bambulab_host; } func_get_user_selected_machine get_get_user_selected_machine() const { return m_get_user_selected_machine; } func_set_user_selected_machine get_set_user_selected_machine() const { return m_set_user_selected_machine; } func_start_print get_start_print() const { return m_start_print; } func_start_local_print_with_record get_start_local_print_with_record() const { return m_start_local_print_with_record; } func_start_send_gcode_to_sdcard get_start_send_gcode_to_sdcard() const { return m_start_send_gcode_to_sdcard; } func_start_local_print get_start_local_print() const { return m_start_local_print; } func_start_sdcard_print get_start_sdcard_print() const { return m_start_sdcard_print; } func_get_user_presets get_get_user_presets() const { return m_get_user_presets; } func_request_setting_id get_request_setting_id() const { return m_request_setting_id; } func_put_setting get_put_setting() const { return m_put_setting; } func_get_setting_list get_get_setting_list() const { return m_get_setting_list; } func_get_setting_list2 get_get_setting_list2() const { return m_get_setting_list2; } func_delete_setting get_delete_setting() const { return m_delete_setting; } func_get_studio_info_url get_get_studio_info_url() const { return m_get_studio_info_url; } func_set_extra_http_header get_set_extra_http_header() const { return m_set_extra_http_header; } func_get_my_message get_get_my_message() const { return m_get_my_message; } func_check_user_task_report get_check_user_task_report() const { return m_check_user_task_report; } func_get_user_print_info get_get_user_print_info() const { return m_get_user_print_info; } func_get_user_tasks get_get_user_tasks() const { return m_get_user_tasks; } func_get_printer_firmware get_get_printer_firmware() const { return m_get_printer_firmware; } func_get_task_plate_index get_get_task_plate_index() const { return m_get_task_plate_index; } func_get_user_info get_get_user_info() const { return m_get_user_info; } func_request_bind_ticket get_request_bind_ticket() const { return m_request_bind_ticket; } func_get_subtask_info get_get_subtask_info() const { return m_get_subtask_info; } func_get_slice_info get_get_slice_info() const { return m_get_slice_info; } func_query_bind_status get_query_bind_status() const { return m_query_bind_status; } func_modify_printer_name get_modify_printer_name() const { return m_modify_printer_name; } func_get_camera_url get_get_camera_url() const { return m_get_camera_url; } func_get_design_staffpick get_get_design_staffpick() const { return m_get_design_staffpick; } func_start_pubilsh get_start_publish() const { return m_start_publish; } func_get_model_publish_url get_get_model_publish_url() const { return m_get_model_publish_url; } func_get_subtask get_get_subtask() const { return m_get_subtask; } func_get_model_mall_home_url get_get_model_mall_home_url() const { return m_get_model_mall_home_url; } func_get_model_mall_detail_url get_get_model_mall_detail_url() const { return m_get_model_mall_detail_url; } func_get_my_profile get_get_my_profile() const { return m_get_my_profile; } func_track_enable get_track_enable() const { return m_track_enable; } func_track_remove_files get_track_remove_files() const { return m_track_remove_files; } func_track_event get_track_event() const { return m_track_event; } func_track_header get_track_header() const { return m_track_header; } func_track_update_property get_track_update_property() const { return m_track_update_property; } func_track_get_property get_track_get_property() const { return m_track_get_property; } func_put_model_mall_rating_url get_put_model_mall_rating() const { return m_put_model_mall_rating; } func_get_oss_config get_get_oss_config() const { return m_get_oss_config; } func_put_rating_picture_oss get_put_rating_picture_oss() const { return m_put_rating_picture_oss; } func_get_model_mall_rating_result get_get_model_mall_rating_result() const { return m_get_model_mall_rating_result; } func_get_mw_user_preference get_get_mw_user_preference() const { return m_get_mw_user_preference; } func_get_mw_user_4ulist get_get_mw_user_4ulist() const { return m_get_mw_user_4ulist; } // ======================================================================== // Legacy Helper // ======================================================================== static PrintParams_Legacy as_legacy(PrintParams& param); private: // Singleton instance pointer (heap-allocated for explicit lifetime control) static BBLNetworkPlugin* s_instance; BBLNetworkPlugin(); ~BBLNetworkPlugin(); void load_all_function_pointers(); void clear_all_function_pointers(); // Module handles #if defined(_MSC_VER) || defined(_WIN32) HMODULE m_networking_module{nullptr}; HMODULE m_source_module{nullptr}; #else void* m_networking_module{nullptr}; void* m_source_module{nullptr}; #endif // Shared agent handle void* m_agent{nullptr}; // Load error state NetworkLibraryLoadError m_load_error; // Legacy network compatibility flag bool m_use_legacy_network{true}; // Function pointers func_check_debug_consistent m_check_debug_consistent{nullptr}; func_get_version m_get_version{nullptr}; func_create_agent m_create_agent{nullptr}; func_destroy_agent m_destroy_agent{nullptr}; func_init_log m_init_log{nullptr}; func_set_config_dir m_set_config_dir{nullptr}; func_set_cert_file m_set_cert_file{nullptr}; func_set_country_code m_set_country_code{nullptr}; func_start m_start{nullptr}; func_set_on_ssdp_msg_fn m_set_on_ssdp_msg_fn{nullptr}; func_set_on_user_login_fn m_set_on_user_login_fn{nullptr}; func_set_on_printer_connected_fn m_set_on_printer_connected_fn{nullptr}; func_set_on_server_connected_fn m_set_on_server_connected_fn{nullptr}; func_set_on_http_error_fn m_set_on_http_error_fn{nullptr}; func_set_get_country_code_fn m_set_get_country_code_fn{nullptr}; func_set_on_subscribe_failure_fn m_set_on_subscribe_failure_fn{nullptr}; func_set_on_message_fn m_set_on_message_fn{nullptr}; func_set_on_user_message_fn m_set_on_user_message_fn{nullptr}; func_set_on_local_connect_fn m_set_on_local_connect_fn{nullptr}; func_set_on_local_message_fn m_set_on_local_message_fn{nullptr}; func_set_queue_on_main_fn m_set_queue_on_main_fn{nullptr}; func_connect_server m_connect_server{nullptr}; func_is_server_connected m_is_server_connected{nullptr}; func_refresh_connection m_refresh_connection{nullptr}; func_start_subscribe m_start_subscribe{nullptr}; func_stop_subscribe m_stop_subscribe{nullptr}; func_add_subscribe m_add_subscribe{nullptr}; func_del_subscribe m_del_subscribe{nullptr}; func_enable_multi_machine m_enable_multi_machine{nullptr}; func_send_message m_send_message{nullptr}; func_connect_printer m_connect_printer{nullptr}; func_disconnect_printer m_disconnect_printer{nullptr}; func_send_message_to_printer m_send_message_to_printer{nullptr}; func_check_cert m_check_cert{nullptr}; func_install_device_cert m_install_device_cert{nullptr}; func_start_discovery m_start_discovery{nullptr}; func_change_user m_change_user{nullptr}; func_is_user_login m_is_user_login{nullptr}; func_user_logout m_user_logout{nullptr}; func_get_user_id m_get_user_id{nullptr}; func_get_user_name m_get_user_name{nullptr}; func_get_user_avatar m_get_user_avatar{nullptr}; func_get_user_nickanme m_get_user_nickanme{nullptr}; func_build_login_cmd m_build_login_cmd{nullptr}; func_build_logout_cmd m_build_logout_cmd{nullptr}; func_build_login_info m_build_login_info{nullptr}; func_ping_bind m_ping_bind{nullptr}; func_bind_detect m_bind_detect{nullptr}; func_set_server_callback m_set_server_callback{nullptr}; func_bind m_bind{nullptr}; func_unbind m_unbind{nullptr}; func_get_bambulab_host m_get_bambulab_host{nullptr}; func_get_user_selected_machine m_get_user_selected_machine{nullptr}; func_set_user_selected_machine m_set_user_selected_machine{nullptr}; func_start_print m_start_print{nullptr}; func_start_local_print_with_record m_start_local_print_with_record{nullptr}; func_start_send_gcode_to_sdcard m_start_send_gcode_to_sdcard{nullptr}; func_start_local_print m_start_local_print{nullptr}; func_start_sdcard_print m_start_sdcard_print{nullptr}; func_get_user_presets m_get_user_presets{nullptr}; func_request_setting_id m_request_setting_id{nullptr}; func_put_setting m_put_setting{nullptr}; func_get_setting_list m_get_setting_list{nullptr}; func_get_setting_list2 m_get_setting_list2{nullptr}; func_delete_setting m_delete_setting{nullptr}; func_get_studio_info_url m_get_studio_info_url{nullptr}; func_set_extra_http_header m_set_extra_http_header{nullptr}; func_get_my_message m_get_my_message{nullptr}; func_check_user_task_report m_check_user_task_report{nullptr}; func_get_user_print_info m_get_user_print_info{nullptr}; func_get_user_tasks m_get_user_tasks{nullptr}; func_get_printer_firmware m_get_printer_firmware{nullptr}; func_get_task_plate_index m_get_task_plate_index{nullptr}; func_get_user_info m_get_user_info{nullptr}; func_request_bind_ticket m_request_bind_ticket{nullptr}; func_get_subtask_info m_get_subtask_info{nullptr}; func_get_slice_info m_get_slice_info{nullptr}; func_query_bind_status m_query_bind_status{nullptr}; func_modify_printer_name m_modify_printer_name{nullptr}; func_get_camera_url m_get_camera_url{nullptr}; func_get_design_staffpick m_get_design_staffpick{nullptr}; func_start_pubilsh m_start_publish{nullptr}; func_get_model_publish_url m_get_model_publish_url{nullptr}; func_get_subtask m_get_subtask{nullptr}; func_get_model_mall_home_url m_get_model_mall_home_url{nullptr}; func_get_model_mall_detail_url m_get_model_mall_detail_url{nullptr}; func_get_my_profile m_get_my_profile{nullptr}; func_track_enable m_track_enable{nullptr}; func_track_remove_files m_track_remove_files{nullptr}; func_track_event m_track_event{nullptr}; func_track_header m_track_header{nullptr}; func_track_update_property m_track_update_property{nullptr}; func_track_get_property m_track_get_property{nullptr}; func_put_model_mall_rating_url m_put_model_mall_rating{nullptr}; func_get_oss_config m_get_oss_config{nullptr}; func_put_rating_picture_oss m_put_rating_picture_oss{nullptr}; func_get_model_mall_rating_result m_get_model_mall_rating_result{nullptr}; func_get_mw_user_preference m_get_mw_user_preference{nullptr}; func_get_mw_user_4ulist m_get_mw_user_4ulist{nullptr}; }; } // namespace Slic3r #endif // __BBL_NETWORK_PLUGIN_HPP__