summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AFBClient.cpp92
-rw-r--r--AFBClient.h3
2 files changed, 66 insertions, 29 deletions
diff --git a/AFBClient.cpp b/AFBClient.cpp
index e67e74b..eb85a39 100644
--- a/AFBClient.cpp
+++ b/AFBClient.cpp
@@ -4,10 +4,11 @@
#include <stdio.h>
#include <errno.h>
#include <string.h>
+#include <unistd.h>
#define UNUSED(x) (void)(x)
-const char * AFBClient::wmURI = "ws://localhost:1700/api?wm";
+const char * AFBClient::wmURI = "ws://localhost:1700/api?token=wm";
const char * AFBClient::wmAPI = "winman";
AFBClient::AFBClient() : itf()
@@ -18,18 +19,13 @@ AFBClient::AFBClient() : itf()
itf.on_event = AFBClient::onEvent;
}
-AFBClient& AFBClient::operator =(const AFBClient &that)
-{
- itf = that.itf;
- return *this;
-}
-
AFBClient::~AFBClient()
{
}
bool AFBClient::init()
{
+ printf("init() -->\n");
/* get the default event loop */
int rc = sd_event_default(&loop);
if (rc < 0) {
@@ -46,29 +42,61 @@ bool AFBClient::init()
}
#endif
+ printf("init() <--\n");
return true;
}
void AFBClient::requestSurface(const char *label)
{
- const char functionParamName[] = "{\"drawing_name\":\"";
- char *parameter = (char *)malloc(strlen(functionParamName) + strlen(label) + 3);
- strcpy(parameter, functionParamName);
+ printf("requestSurface(%s) -->\n", label);
+ fflush(stdout);
+
+ static int num = 0;
+ char *key;
+ int rc;
+ const char begin[] = "{\"drawing_name\":\"";
+ const char end[] = "\"}";
+ const char verb[] = "request_surface";
+ char *parameter = (char *)malloc(strlen(begin) +
+ strlen(label) +
+ strlen(end) + 1);
+ strcpy(parameter, begin);
strcat(parameter, label);
- strcat(parameter, "\"}");
- printf("requestSurface(%s): %s\n", label, parameter);
- call(AFBClient::wmAPI, "request_surface", parameter);
+ strcat(parameter, end);
+
+ /* allocates an id for the request */
+ rc = asprintf(&key, "%d:%s/%s", ++num, AFBClient::wmAPI, verb);
+
+ /* send the request */
+ rc = afb_wsj1_call_s(wsj1, AFBClient::wmAPI, verb, parameter, AFBClient::onRequestSurfaceReply, key);
+ if (rc < 0)
+ fprintf(stderr, "calling %s/%s(%s) failed: %m\n", AFBClient::wmAPI, verb, parameter);
+
+ printf("requestSurface(%s) <--\n", label);
+ fflush(stdout);
}
void AFBClient::activateSurface(const char *label)
{
- const char functionParamName[] = "{\"drawing_name\":\"";
- char *parameter = (char *)malloc(strlen(functionParamName) + strlen(label) + 3);
+ printf("activateSurface(%s) -->\n", label);
+ fflush(stdout);
+
+ const char begin[] = "{\"drawing_name\":\"";
+ const char end[] = "\"}";
+ const char verb[] = "activate_surface";
strcpy(parameter, functionParamName);
strcat(parameter, label);
strcat(parameter, "\"}");
- printf("activateSurface(%s): %s\n", label, parameter);
- call(AFBClient::wmAPI, "activate_surface", parameter);
+ char *parameter = (char *)malloc(strlen(begin) +
+ strlen(label) +
+ strlen(end) + 1);
+ strcpy(parameter, begin);
+ strcat(parameter, label);
+ strcat(parameter, end);
+ call(AFBClient::wmAPI, verb, parameter);
+
+ printf("activateSurface(%s) <--\n", label);
+ fflush(stdout);
}
void AFBClient::deactivateSurface(const char *label)
@@ -132,6 +160,20 @@ void AFBClient::onReply(void *closure, afb_wsj1_msg *msg)
#endif
}
+void AFBClient::onRequestSurfaceReply(void *closure, afb_wsj1_msg *msg)
+{
+#ifdef AFB
+ printf("onRequestSurfaceReply %s: %s\n%s\n", (char*)closure,
+ afb_wsj1_msg_is_reply_ok(msg) ? "OK" : "ERROR",
+ json_object_to_json_string_ext(afb_wsj1_msg_object_j(msg),
+ JSON_C_TO_STRING_PRETTY));
+ printf("\n\n===>RETURN STR: %s\n\n", afb_wsj1_msg_object_s(msg));
+ // putenv("QT_IVI_SURFACE_ID=16778219");
+ fflush(stdout);
+ free(closure);
+#endif
+}
+
/* makes a call */
void AFBClient::call(const char *api, const char *verb, const char *object)
{
@@ -140,6 +182,9 @@ void AFBClient::call(const char *api, const char *verb, const char *object)
char *key;
int rc;
+ printf("call(%s, %s, %s) -->\n", api, verb, object);
+ fflush(stdout);
+
/* allocates an id for the request */
rc = asprintf(&key, "%d:%s/%s", ++num, api, verb);
@@ -147,6 +192,9 @@ void AFBClient::call(const char *api, const char *verb, const char *object)
rc = afb_wsj1_call_s(wsj1, api, verb, object, AFBClient::onReply, key);
if (rc < 0)
fprintf(stderr, "calling %s/%s(%s) failed: %m\n", api, verb, object);
+
+ printf("call(%s, %s, %s) <--\n", api, verb, object);
+ fflush(stdout);
#endif
}
@@ -161,13 +209,3 @@ void AFBClient::event(const char *event, const char *object)
fprintf(stderr, "sending !%s(%s) failed: %m\n", event, object);
#endif
}
-
-void AFBClient::emitSignalOrCall(const char *api, const char *verb, const char *object)
-{
- if (object == NULL || object[0] == 0)
- object = "null";
- if (api[0] == '!' && api[1] == 0)
- event(verb, object);
- else
- call(api, verb, object);
-}
diff --git a/AFBClient.h b/AFBClient.h
index 1005432..3961baf 100644
--- a/AFBClient.h
+++ b/AFBClient.h
@@ -17,7 +17,6 @@ class AFBClient
{
explicit AFBClient();
AFBClient(const AFBClient& that) = delete;
- AFBClient& operator=(AFBClient const&);
virtual~AFBClient();
public:
@@ -37,10 +36,10 @@ public:
static void onEvent(void *closure, const char *event, struct afb_wsj1_msg *msg);
static void onHangup(void *closure, struct afb_wsj1 *wsj1);
static void onReply(void *closure, struct afb_wsj1_msg *msg);
+ static void onRequestSurfaceReply(void *closure, struct afb_wsj1_msg *msg);
private:
void call(const char *api, const char *verb, const char *object);
- void emitSignalOrCall(const char *api, const char *verb, const char *object);
void event(const char *event, const char *object);
struct afb_wsj1 *wsj1;