Own fork of MbedSmartRestMain

Dependencies:   C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed

Fork of MbedSmartRestMain by Cumulocity Official

Revision:
95:5dfdc8568e9f
Child:
98:e369fc75c000
diff -r 010b0f7a0a1a -r 5dfdc8568e9f operation/PollThread.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/operation/PollThread.cpp	Mon Apr 27 10:50:21 2015 +0000
@@ -0,0 +1,65 @@
+#include <stdio.h>
+#include <ctype.h>
+#include "PollThread.h"
+#include "lex.h"
+#include "logging.h"
+
+bool PollThread::handshake()
+{
+        int l = snprintf(buf2, SMARRESTBODY_SIZE, "%s", "80\r\n");
+        l = snprintf(buf, SMARTREST_SIZE, getSmartRestFmt(), uri, l, buf2);
+        l = sock.sendAndReceive(buf, l, SMARTREST_SIZE);
+        if (l < 0)
+                return false;
+        size_t i = 0;
+        for (const char* p = skipHTTPHeader(buf); isalnum(*p); ++p, ++i) {
+                bayeuxId[i] = *p;
+        }
+        bayeuxId[i] = '\0';
+        return bayeuxId[0];
+}
+
+bool PollThread::subscribe()
+{
+        int l = snprintf(buf2, SMARRESTBODY_SIZE, "81,%s,/%s\r\n", bayeuxId, chn);
+        l = snprintf(buf, SMARTREST_SIZE, getSmartRestFmt(), uri, l, buf2);
+        l = sock.sendAndReceive(buf, l, SMARTREST_SIZE);
+        return l>=0;
+}
+
+bool PollThread::connect()
+{
+        int l = snprintf(buf2, SMARRESTBODY_SIZE, "83,%s\r\n", bayeuxId);
+        l = snprintf(buf, SMARTREST_SIZE, getSmartRestFmt(), uri, l, buf2);
+        l = sock.sendAndReceive(buf, l, SMARTREST_SIZE);
+        return l>=0;
+}
+
+void PollThread::threadFunc()
+{
+        uint8_t state = 1;
+        aInfo("Poll thread: %p\n", Thread::gettid());
+        while (true) {
+                switch (state) {
+                case 1: if (!handshake()) {
+                                aCritical("Poll: handshake fail!\n");
+                                break;
+                        }
+                case 2: if(!subscribe()) {
+                                aCritical("Poll: subscribe fail!\n");
+                                state = 1;
+                                break;
+                        }
+                case 3: if(!connect()) {
+                                aCritical("Poll: connect fail!\n");
+                                state = 1;
+                                break;
+                        }
+                default: parser.handleControlMessage(buf);
+                        if (parser.getBayeuxAdvice() == BA_HANDSHAKE)
+                                state = 1;
+                        else
+                                state = 3;
+                }
+        }
+}
\ No newline at end of file