void UndoRedo::_process_operation_list(List<Operation>::Element *E) { for (;E;E=E->next()) { Operation &op=E->get(); Object *obj = ObjectDB::get_instance(op.object); if (!obj) { //corruption clear_history(); ERR_FAIL_COND(!obj); } switch(op.type) { case Operation::TYPE_METHOD: { obj->call(op.name,VARIANT_ARGS_FROM_ARRAY(op.args)); #ifdef TOOLS_ENABLED Resource* res = obj->cast_to<Resource>(); if (res) res->set_edited(true); #endif if (method_callback) { method_callback(method_callbck_ud,obj,op.name,VARIANT_ARGS_FROM_ARRAY(op.args)); } } break; case Operation::TYPE_PROPERTY: { obj->set(op.name,op.args[0]); #ifdef TOOLS_ENABLED Resource* res = obj->cast_to<Resource>(); if (res) res->set_edited(true); #endif if (property_callback) { property_callback(prop_callback_ud,obj,op.name,op.args[0]); } } break; case Operation::TYPE_REFERENCE: { //do nothing } break; } } }
void call_name(DBusConnection* conn, char* service_name ){ DBusError error; DBusMessage* msg; DBusMessageIter args; DBusPendingCall* pending; dbus_uint32_t result; dbus_error_init(&error); char* param = "calling you with something in the param"; char* target = service_name ; // target for the method call; //char* object = "/org/gnome/Tomboy/RemoteControl"; char* object = "/"; // started with root .... // we need to some how create a dynamic linked list of object -> method mapping table to displace for call char* interface = DBUS_INTERFACE_INTROSPECTABLE ; //char* interface = "org.freedesktop.DBus.Introspectable"; //char* name = "RemoteName"; // name of the method char* method = "Introspect"; if( !dbus_bus_start_service_by_name( conn, service_name, 0, &result, &error)){ fprintf(stderr, "Can't start service %s\n", error.message); exit(1); } else { // we can start looping all the methods and interface in the object tree msg = dbus_message_new_method_call( target, object, interface, method ); if( NULL == msg ) { fprintf(stderr, "Reply Null\n"); exit(1); } else { // send message and get a handle for a reply if (!dbus_connection_send_with_reply (conn, msg, &pending, -1)) { // -1 is default timeout fprintf(stderr, "Out Of Memory!\n"); exit(1); } if (NULL == pending) { fprintf(stderr, "Pending Call Null\n"); exit(1); } else { dbus_connection_flush(conn); // free message dbus_message_unref(msg); method_callback(pending); } } } }
void UndoRedo::_process_operation_list(List<Operation>::Element *E) { for (; E; E = E->next()) { Operation &op = E->get(); Object *obj = ObjectDB::get_instance(op.object); if (!obj) { //corruption clear_history(); ERR_FAIL_COND(!obj); } switch (op.type) { case Operation::TYPE_METHOD: { Vector<const Variant *> argptrs; argptrs.resize(VARIANT_ARG_MAX); int argc = 0; for (int i = 0; i < VARIANT_ARG_MAX; i++) { if (op.args[i].get_type() == Variant::NIL) { break; } argptrs.write[i] = &op.args[i]; argc++; } argptrs.resize(argc); Variant::CallError ce; obj->call(op.name, (const Variant **)argptrs.ptr(), argc, ce); if (ce.error != Variant::CallError::CALL_OK) { ERR_PRINTS("Error calling method from signal '" + String(op.name) + "': " + Variant::get_call_error_text(obj, op.name, (const Variant **)argptrs.ptr(), argc, ce)); } #ifdef TOOLS_ENABLED Resource *res = Object::cast_to<Resource>(obj); if (res) res->set_edited(true); #endif if (method_callback) { method_callback(method_callbck_ud, obj, op.name, VARIANT_ARGS_FROM_ARRAY(op.args)); } } break; case Operation::TYPE_PROPERTY: { obj->set(op.name, op.args[0]); #ifdef TOOLS_ENABLED Resource *res = Object::cast_to<Resource>(obj); if (res) res->set_edited(true); #endif if (property_callback) { property_callback(prop_callback_ud, obj, op.name, op.args[0]); } } break; case Operation::TYPE_REFERENCE: { //do nothing } break; } } }
void call_name(DBusConnection* conn, char* service_name ){ DBusError error; DBusMessage* msg; DBusMessageIter args; DBusMessageIter contain_args; DBusMessageIter dict_args; DBusMessageIter var_args; DBusPendingCall* pending; dbus_uint32_t result; dbus_error_init(&error); char* param = "calling you with something in the param"; char* param_list[2] = { "stuff 1", "stuff 2" }; dbus_uint16_t number = 16; char array_type[2]; char ele_type[5]; char* target = service_name ; // target for the method call; char* object = "/com/avengergear/PushServer/Proxy/TypeTest"; // started with root .... // we need to some how create a dynamic linked list of object -> method mapping table to displace for call //char* interface = DBUS_INTERFACE_INTROSPECTABLE ; //char* interface = "org.freedesktop.DBus.Introspectable"; char* interface = "com.avengergear.PushServer.Proxy.Interface"; //char* name = "RemoteName"; // name of the method char* method = "TypeTest"; if( !dbus_bus_start_service_by_name( conn, service_name, 0, &result, &error)){ fprintf(stderr, "Can't start service %s\n", error.message); exit(1); } else { // we can start looping all the methods and interface in the object tree msg = dbus_message_new_method_call( target, object, interface, method ); if( NULL == msg ) { fprintf(stderr, "Reply Null\n"); exit(1); } else { // send message and get a handle for a reply // append arguments dbus_message_iter_init_append(msg, &args); if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, ¶m)) { fprintf(stderr, "String Out Of Memory!\n"); exit(1); } fprintf(stderr, "Send string\n"); if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_UINT16, &number)) { fprintf(stderr, "UINT16 Out Of Memory!\n"); exit(1); } fprintf(stderr, "Send uint16\n"); array_type[0]='s'; array_type[1]='\0'; if (!dbus_message_iter_open_container(&args, DBUS_TYPE_ARRAY, array_type, &contain_args)) { fprintf(stderr, "OpenContainer Out Of Memory!\n"); exit(1); } fprintf(stderr, "OpenContainer \n"); if (!dbus_message_iter_append_basic(&contain_args, DBUS_TYPE_STRING, ¶m_list[0])) { fprintf(stderr, "Arrary String is Out Of Memory!\n"); exit(1); } fprintf(stderr, "Sending a string\n"); if (!dbus_message_iter_append_basic(&contain_args, DBUS_TYPE_STRING, ¶m_list[1])) { fprintf(stderr, "Arrary String is Out Of Memory!\n"); exit(1); } fprintf(stderr, "Sending a string\n"); if (!dbus_message_iter_close_container(&args, &contain_args)) { fprintf(stderr, "CloseContainer Out Of Memory!\n"); exit(1); } fprintf(stderr, "CloseContainer\n"); ele_type[0]=DBUS_DICT_ENTRY_BEGIN_CHAR; ele_type[1]='s'; ele_type[2]='v'; ele_type[3]=DBUS_DICT_ENTRY_END_CHAR; ele_type[4]='\0'; if (!dbus_message_iter_open_container(&args, DBUS_TYPE_ARRAY, ele_type, &contain_args)) { fprintf(stderr, "OpenContainer Out Of Memory!\n"); exit(1); } fprintf(stderr, "OpenContainer Array\n"); if (!dbus_message_iter_open_container(&contain_args, DBUS_TYPE_DICT_ENTRY, NULL, &dict_args)) { fprintf(stderr, "OpenContainer Out Of Memory!\n"); exit(1); } fprintf(stderr, "OpenContainer Array Dict\n"); if (!dbus_message_iter_append_basic(&dict_args, DBUS_TYPE_STRING, ¶m)) { fprintf(stderr, "Arrary Dict String is Out Of Memory!\n"); exit(1); } array_type[0]='q'; array_type[1]='\0'; if (!dbus_message_iter_open_container(&dict_args, DBUS_TYPE_VARIANT, array_type , &var_args)) { fprintf(stderr, "OpenContainer Out Of Memory!\n"); exit(1); } fprintf(stderr, "OpenContainer Array Dict Var\n"); if (!dbus_message_iter_append_basic(&var_args, DBUS_TYPE_UINT16, &number)) { fprintf(stderr, "Array Dict UNIT16 String is Out Of Memory!\n"); exit(1); } if (!dbus_message_iter_close_container(&dict_args, &var_args)) { fprintf(stderr, "CloseContainer Out Of Memory!\n"); exit(1); } fprintf(stderr, "CloseContainer Array Dict\n"); if (!dbus_message_iter_close_container(&contain_args, &dict_args)) { fprintf(stderr, "CloseContainer Out Of Memory!\n"); exit(1); } fprintf(stderr, "CloseContainer Array\n"); if (!dbus_message_iter_close_container(&args, &contain_args)) { fprintf(stderr, "CloseContainer Out Of Memory!\n"); exit(1); } fprintf(stderr, "CloseContainer\n"); if (!dbus_connection_send_with_reply (conn, msg, &pending, -1)) { // -1 is default timeout fprintf(stderr, "Out Of Memory!\n"); exit(1); } if (NULL == pending) { fprintf(stderr, "Pending Call Null\n"); exit(1); } else { dbus_connection_flush(conn); // free message dbus_message_unref(msg); method_callback(pending); } } } }