e4c54eed3c8a5d624b5ed581e5e10af6590b9326
[src/app-framework-binder.git] / src / afb-evt.h
1 /*
2  * Copyright (C) 2016-2019 "IoT.bzh"
3  * Author: José Bollo <jose.bollo@iot.bzh>
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *   http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 #pragma once
19
20 #include "uuid.h"
21
22 struct afb_event_x1;
23 struct afb_event_x2;
24 struct afb_evtid;
25 struct afb_session;
26 struct json_object;
27 struct afb_evt_listener;
28
29 struct afb_evt_itf
30 {
31         void (*push)(void *closure, const char *event, uint16_t evtid, struct json_object *object);
32         void (*broadcast)(void *closure, const char *event, struct json_object *object, const uuid_binary_t uuid, uint8_t hop);
33         void (*add)(void *closure, const char *event, uint16_t evtid);
34         void (*remove)(void *closure, const char *event, uint16_t evtid);
35 };
36
37 extern struct afb_evt_listener *afb_evt_listener_create(const struct afb_evt_itf *itf, void *closure);
38
39 extern int afb_evt_broadcast(const char *event, struct json_object *object);
40 extern int afb_evt_rebroadcast(const char *event, struct json_object *object, const  uuid_binary_t uuid, uint8_t hop);
41
42 extern struct afb_evt_listener *afb_evt_listener_addref(struct afb_evt_listener *listener);
43 extern void afb_evt_listener_unref(struct afb_evt_listener *listener);
44
45 extern struct afb_evtid *afb_evt_evtid_create(const char *fullname);
46 extern struct afb_evtid *afb_evt_evtid_create2(const char *prefix, const char *name);
47
48 extern struct afb_evtid *afb_evt_evtid_addref(struct afb_evtid *evtid);
49
50 extern void afb_evt_evtid_unref(struct afb_evtid *evtid);
51
52 extern const char *afb_evt_evtid_fullname(struct afb_evtid *evtid);
53 extern uint16_t afb_evt_evtid_id(struct afb_evtid *evtid);
54
55 extern const char *afb_evt_evtid_name(struct afb_evtid *evtid);
56
57 extern int afb_evt_evtid_push(struct afb_evtid *evtid, struct json_object *obj);
58
59 extern int afb_evt_evtid_broadcast(struct afb_evtid *evtid, struct json_object *object);
60
61 extern int afb_evt_listener_watch_evt(struct afb_evt_listener *listener, struct afb_evtid *evtid);
62 extern int afb_evt_listener_unwatch_evt(struct afb_evt_listener *listener, struct afb_evtid *evtid);
63 extern int afb_evt_listener_unwatch_id(struct afb_evt_listener *listener, uint16_t eventid);
64 extern void afb_evt_listener_unwatch_all(struct afb_evt_listener *listener, int remove);
65
66 extern struct afb_event_x2 *afb_evt_event_x2_create(const char *fullname);
67 extern struct afb_event_x2 *afb_evt_event_x2_create2(const char *prefix, const char *name);
68 extern const char *afb_evt_event_x2_fullname(struct afb_event_x2 *event);
69 extern uint16_t afb_evt_event_x2_id(struct afb_event_x2 *eventid);
70 extern struct afb_event_x2 *afb_evt_event_x2_addref(struct afb_event_x2 *eventid);
71 extern void afb_evt_event_x2_unref(struct afb_event_x2 *eventid);
72
73 extern int afb_evt_event_x2_push(struct afb_event_x2 *eventid, struct json_object *object);
74 extern int afb_evt_event_x2_unhooked_push(struct afb_event_x2 *eventid, struct json_object *object);
75
76 extern int afb_evt_listener_watch_x2(struct afb_evt_listener *listener, struct afb_event_x2 *eventid);
77 extern int afb_evt_listener_unwatch_x2(struct afb_evt_listener *listener, struct afb_event_x2 *eventid);
78
79 extern struct afb_evtid *afb_evt_event_x2_to_evtid(struct afb_event_x2 *eventid);
80 extern struct afb_event_x2 *afb_evt_event_x2_from_evtid(struct afb_evtid *evtid);
81
82 #if WITH_LEGACY_BINDING_V1 || WITH_LEGACY_BINDING_V2
83 extern struct afb_event_x1 afb_evt_event_from_evtid(struct afb_evtid *evtid);
84 #endif
85
86 #if WITH_AFB_HOOK
87 extern struct afb_evtid *afb_evt_evtid_hooked_addref(struct afb_evtid *evtid);
88 extern void afb_evt_evtid_hooked_unref(struct afb_evtid *evtid);
89 extern const char *afb_evt_evtid_hooked_name(struct afb_evtid *evtid);
90 extern int afb_evt_evtid_hooked_push(struct afb_evtid *evtid, struct json_object *obj);
91 extern int afb_evt_evtid_hooked_broadcast(struct afb_evtid *evtid, struct json_object *object);
92 extern void afb_evt_update_hooks();
93 #endif