Thinger.io Client Library for ARM mbed platform. This is a generic library that provides a base class that can be used to other develop hardware specific libraries.

Fork of ThingerClient by Alvaro Luis Bustamante

Revision:
0:b75d784c7c1a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/thinger/thinger_encoder.hpp	Thu Dec 24 13:18:08 2015 +0000
@@ -0,0 +1,90 @@
+// The MIT License (MIT)
+//
+// Copyright (c) 2015 THINGER LTD
+// Author: alvarolb@gmail.com (Alvaro Luis Bustamante)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#ifndef THINGER_ENCODER_HPP
+#define THINGER_ENCODER_HPP
+
+#include "thinger_message.hpp"
+#include "thinger_io.hpp"
+
+namespace thinger{
+
+class thinger_encoder : public protoson::pson_encoder{
+
+protected:
+    virtual void write(const void *buffer, size_t size){
+        protoson::pson_encoder::write(buffer, size);
+    }
+
+public:
+    void encode(thinger_message& message){
+        if(message.get_stream_id()!=0){
+            pb_encode_varint(thinger_message::STREAM_ID, message.get_stream_id());
+        }
+        if(message.get_signal_flag()!=thinger_message::NONE){
+            pb_encode_varint(thinger_message::SIGNAL_FLAG, message.get_signal_flag());
+        }
+        if(message.has_resource()){
+            pb_encode_tag(protoson::pson_type, thinger_message::RESOURCE);
+            protoson::pson_encoder::encode(message.get_resources());
+        }
+        if(message.has_data()){
+            pb_encode_tag(protoson::pson_type, thinger_message::PSON_PAYLOAD);
+            protoson::pson_encoder::encode((protoson::pson&) message);
+        }
+    }
+};
+
+class thinger_write_encoder : public thinger_encoder{
+    public:
+        thinger_write_encoder(thinger_io& io) : io_(io)
+        {}
+
+    protected:
+        virtual void write(const void *buffer, size_t size){
+            io_.write((const char*)buffer, size);
+            protoson::pson_encoder::write(buffer, size);
+        }
+
+    private:
+        thinger_io& io_;
+};
+
+class thinger_memory_encoder : public thinger_encoder{
+    public:
+        thinger_memory_encoder(uint8_t* buffer, size_t size) : buffer_(buffer), size_(size){}
+
+    protected:
+        virtual void write(const void *buffer, size_t size){
+            memcpy(buffer_ + written_, buffer, size);
+            protoson::pson_encoder::write(buffer, size);
+        }
+
+    private:
+        uint8_t* buffer_;
+        size_t size_;
+};
+
+}
+
+#endif