summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/wifi/Wifi.qml27
-rw-r--r--binding-wifi/wifi-api.c37
2 files changed, 58 insertions, 6 deletions
diff --git a/app/wifi/Wifi.qml b/app/wifi/Wifi.qml
index 3bf4774..f3871a6 100644
--- a/app/wifi/Wifi.qml
+++ b/app/wifi/Wifi.qml
@@ -185,7 +185,8 @@ SettingPage {
} else if (websocket.status == WebSocket.Closed) {
status_str = "Socket closed"
- //TODO: unsubscribe for events
+ console.log("Socket closed, bye.")
+
}
console.log(status_str)
@@ -207,6 +208,30 @@ SettingPage {
var parameterJson = 'None'
sendSocketMesage(verb_str, parameterJson)
+
+ verb_str = "eventunsub"
+ parameterJson = {
+ tag: 'password'
+ }
+ sendSocketMesage(verb_str, parameterJson)
+
+ verb_str = "eventdel"
+ parameterJson = {
+ tag: 'password'
+ }
+ sendSocketMesage(verb_str, parameterJson)
+
+ verb_str = "eventunsub"
+ parameterJson = {
+ tag: 'networkList'
+ }
+ sendSocketMesage(verb_str, parameterJson)
+
+ verb_str = "eventdel"
+ parameterJson = {
+ tag: 'networkList'
+ }
+
websocket.active = false
}
diff --git a/binding-wifi/wifi-api.c b/binding-wifi/wifi-api.c
index 933a121..02ff106 100644
--- a/binding-wifi/wifi-api.c
+++ b/binding-wifi/wifi-api.c
@@ -585,6 +585,18 @@ static void eventadd (struct afb_req request)
afb_req_success(request, NULL, NULL);
}
+static void eventdel (struct afb_req request)
+{
+ const char *tag = afb_req_value(request, "tag");
+
+ if (tag == NULL)
+ afb_req_fail(request, "failed", "bad arguments");
+ else if (0 != event_del(tag))
+ afb_req_fail(request, "failed", "deletion error");
+ else
+ afb_req_success(request, NULL, NULL);
+}
+
static int event_subscribe(struct afb_req request, const char *tag)
{
struct event *e;
@@ -592,6 +604,13 @@ static int event_subscribe(struct afb_req request, const char *tag)
return e ? afb_req_subscribe(request, e->event) : -1;
}
+static int event_unsubscribe(struct afb_req request, const char *tag)
+{
+ struct event *e;
+ e = event_get(tag);
+ return e ? afb_req_unsubscribe(request, e->event) : -1;
+}
+
static void eventsub (struct afb_req request)
{
const char *tag = afb_req_value(request, "tag");
@@ -604,6 +623,17 @@ static void eventsub (struct afb_req request)
afb_req_success(request, NULL, NULL);
}
+static void eventunsub (struct afb_req request)
+{
+ const char *tag = afb_req_value(request, "tag");
+
+ if (tag == NULL)
+ afb_req_fail(request, "failed", "bad arguments");
+ else if (0 != event_unsubscribe(request, tag))
+ afb_req_fail(request, "failed", "unsubscription error");
+ else
+ afb_req_success(request, NULL, NULL);
+}
/*
@@ -623,11 +653,8 @@ static const struct afb_verb_desc_v1 binding_verbs[] = {
{ .name = "eventadd", .session = AFB_SESSION_NONE, .callback = eventadd, .info ="adds the event of 'name' for the 'tag'"},
{ .name = "eventsub", .session = AFB_SESSION_NONE, .callback = eventsub, .info ="unsubscribes to the event of 'tag'"},
{ .name = "eventpush", .session = AFB_SESSION_NONE, .callback = eventpush, .info ="pushes the event of 'tag' with the 'data'"},
-
-
-
-
-
+{ .name = "eventunsub", .session = AFB_SESSION_NONE, .callback = eventunsub, .info ="unsubscribes to the event of 'tag'"},
+{ .name = "eventdel", .session = AFB_SESSION_NONE, .callback = eventdel, .info ="deletes the event of 'tag'"},
{ .name = NULL } /* marker for end of the array */
};