Exemple #1
0
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);
            }
        }
   }
}
Exemple #3
0
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, &param)) {
		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, &param_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, &param_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, &param)) {
		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);
            }
        }
   }
}