b26c68c6dbe0a1a409b8f7d5913d56f7e8acd15a
[platform/upstream/eldbus.git] / src / lib / eldbus_object.h
1 #ifndef ELDBUS_OBJECT_H
2 #define ELDBUS_OBJECT_H 1
3
4 /**
5  * @defgroup Eldbus_Object_Mapper Object Mapper
6  *
7  * @{
8  */
9
10 /**
11  * @brief Get an object of the given bus and path.
12  *
13  * @param conn connection where object belongs
14  * @param bus name of bus or unique-id of who listens for calls of this object
15  * @param path object path of this object
16  */
17 EAPI Eldbus_Object *eldbus_object_get(Eldbus_Connection *conn, const char *bus, const char *path) EINA_ARG_NONNULL(1, 2, 3) EINA_WARN_UNUSED_RESULT;
18
19 /**
20  * @brief Increase object reference.
21  */
22 EAPI Eldbus_Object *eldbus_object_ref(Eldbus_Object *obj) EINA_ARG_NONNULL(1);
23
24 /**
25  * @brief Decrease object reference.
26  * If reference == 0 object will be freed and all its children.
27  */
28 EAPI void          eldbus_object_unref(Eldbus_Object *obj) EINA_ARG_NONNULL(1);
29
30 /**
31  * @brief Add a callback function to be called when object will be freed.
32  *
33  * @param obj object that you want to monitor
34  * @param cb callback that will be executed
35  * @param data passed to callback
36  */
37 EAPI void          eldbus_object_free_cb_add(Eldbus_Object *obj, Eldbus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
38
39 /**
40  * @brief Remove callback registered in eldbus_object_free_cb_add().
41  */
42 EAPI void          eldbus_object_free_cb_del(Eldbus_Object *obj, Eldbus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
43
44 typedef enum
45 {
46    ELDBUS_OBJECT_EVENT_IFACE_ADDED = 0, /**< a parent path must have a ObjectManager interface */
47    ELDBUS_OBJECT_EVENT_IFACE_REMOVED, /**< a parent path must have a ObjectManager interface */
48    ELDBUS_OBJECT_EVENT_PROPERTY_CHANGED,
49    ELDBUS_OBJECT_EVENT_PROPERTY_REMOVED,
50    ELDBUS_OBJECT_EVENT_DEL,
51    ELDBUS_OBJECT_EVENT_LAST    /**< sentinel, not a real event type */
52 } Eldbus_Object_Event_Type;
53
54 typedef struct _Eldbus_Object_Event_Interface_Added
55 {
56    const char  *interface;
57    Eldbus_Proxy *proxy;
58 } Eldbus_Object_Event_Interface_Added;
59
60 typedef struct _Eldbus_Object_Event_Interface_Removed
61 {
62    const char *interface;
63 } Eldbus_Object_Event_Interface_Removed;
64
65 typedef struct _Eldbus_Object_Event_Property_Changed
66 {
67    const char       *interface;
68    Eldbus_Proxy      *proxy;
69    const char       *name;
70    const Eina_Value *value;
71 } Eldbus_Object_Event_Property_Changed;
72
73 typedef struct _Eldbus_Object_Event_Property_Removed
74 {
75    const char  *interface;
76    Eldbus_Proxy *proxy;
77    const char  *name;
78 } Eldbus_Object_Event_Property_Removed;
79
80 typedef void (*Eldbus_Object_Event_Cb)(void *data, Eldbus_Object *obj, void *event_info);
81
82 /**
83  * @brief Add a callback function to be called when an event of the specified
84  * type occurs.
85  */
86 EAPI void                  eldbus_object_event_callback_add(Eldbus_Object *obj, Eldbus_Object_Event_Type type, Eldbus_Object_Event_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 3);
87
88 /**
89  * @brief Remove callback registered in eldbus_object_event_callback_add().
90  */
91 EAPI void                  eldbus_object_event_callback_del(Eldbus_Object *obj, Eldbus_Object_Event_Type type, Eldbus_Object_Event_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 3);
92
93 EAPI Eldbus_Connection     *eldbus_object_connection_get(const Eldbus_Object *obj) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
94 EAPI const char           *eldbus_object_bus_name_get(const Eldbus_Object *obj) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
95 EAPI const char           *eldbus_object_path_get(const Eldbus_Object *obj) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
96
97 /**
98  * @brief Send a message.
99  *
100  * @param obj the msg will be sent in connection to this object
101  * @param msg message that will be sent
102  * @param cb if msg is a method call a callback should be passed
103  * to be executed when a response arrives
104  * @param cb_data data passed to callback
105  * @param timeout timeout in milliseconds, -1 to default internal value or
106  * ELDBUS_TIMEOUT_INFINITE for no timeout
107  */
108 EAPI Eldbus_Pending        *eldbus_object_send(Eldbus_Object *obj, Eldbus_Message *msg, Eldbus_Message_Cb cb, const void *cb_data, double timeout) EINA_ARG_NONNULL(1, 2);
109
110 /**
111  * @brief Add a signal handler.
112  *
113  * @param obj where the signal is emitted
114  * @param interface of the signal
115  * @param member name of the signal
116  * @param cb callback that will be called when this signal is received
117  * @param cb_data data that will be passed to callback
118  */
119 EAPI Eldbus_Signal_Handler *eldbus_object_signal_handler_add(Eldbus_Object *obj, const char *interface, const char *member, Eldbus_Signal_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 4);
120
121 EAPI Eldbus_Message *eldbus_object_method_call_new(Eldbus_Object *obj, const char *interface, const char *member) EINA_ARG_NONNULL(1, 2, 3) EINA_WARN_UNUSED_RESULT;
122
123 /**
124  * @}
125  */
126 #endif