Client-server through DBus, cmake support
[qtrapids] / src / include / qtrapids / dbus.hpp
diff --git a/src/include/qtrapids/dbus.hpp b/src/include/qtrapids/dbus.hpp
new file mode 100644 (file)
index 0000000..52681d4
--- /dev/null
@@ -0,0 +1,120 @@
+#ifndef _QTRAPIDS_DBUS_HPP_
+#define _QTRAPIDS_DBUS_HPP_
+
+#include <QtDBus/QtDBus>
+#include <QtCore/QString>
+#include <QtCore/QHash>
+
+// TMP TODO
+#include <iostream>
+
+namespace qtrapids
+{
+
+    struct TorrentState
+    {
+        TorrentState() 
+            : hash("")
+            , name("")
+            , state(0)
+            , progress(0)
+            , down_rate(0)
+            , up_rate(0)
+            , seeds(0)
+            , leeches(0)
+            , ratio(0)
+            , total_size(0)
+        { }
+
+        QString hash;
+        QString name;
+        uint state;
+        uint progress;
+        uint down_rate;
+        uint up_rate;
+        uint seeds;
+        uint leeches;
+        uint ratio;
+        qulonglong total_size;
+    };
+
+    typedef QHash<QString, QString> ParamsMap_t;
+    typedef QHash<QString, QString> const ParamsMapConst_t;
+    typedef QHash<QString, QString>::iterator ParamsMapIterator_t;
+    typedef QHash<QString, QString>::const_iterator ParamsMapConstIterator_t;
+
+    static inline QDBusArgument& operator << (QDBusArgument& argument
+                                              , TorrentState const& state)
+    {
+        std::cout << "serialize" << std::endl;
+        argument.beginStructure();
+        argument << state.hash << state.name << state.state << state.progress 
+                 << state.down_rate << state.up_rate << state.seeds
+                 << state.leeches << state.ratio << state.total_size;
+        argument.endStructure();
+        return argument;
+    }
+
+    static inline QDBusArgument const& operator >> (QDBusArgument const& argument
+                                                    , TorrentState& state)
+    {
+        std::cout << "deserialize" << std::endl;
+        argument.beginStructure();
+        argument >> state.hash >> state.name >> state.state >> state.progress 
+                 >> state.down_rate >> state.up_rate >> state.seeds
+                 >> state.leeches >> state.ratio >> state.total_size;
+        argument.endStructure();
+        return argument;
+    }
+
+    static inline QDBusArgument& operator << (QDBusArgument& argument
+                                              , ParamsMapConst_t& params)
+    {
+        ParamsMapConstIterator_t p;
+        std::cout << "serialize params" << std::endl;
+        argument.beginMap();
+        for (p = params.constBegin(); p != params.constEnd(); ++p) {
+            argument.beginMapEntry();
+            argument << p.key() << p.value();
+            argument.endMapEntry();
+        }
+        argument.endMap();
+        return argument;
+    }
+
+    static inline QDBusArgument const& operator >> (QDBusArgument const& argument
+                                                    , ParamsMap_t& params)
+    {
+        ParamsMapConstIterator_t p;
+        QString key, value;
+        std::cout << "deserialize params" << std::endl;
+        argument.beginMap();
+        for (p = params.constBegin(); p != params.constEnd(); ++p) {
+            argument.beginMapEntry();
+            argument >> key >> value;
+            params[key] = value; 
+            argument.endMapEntry();
+        }
+        argument.endMap();
+        return argument;
+    }
+
+
+    // class DBusConnector
+    // {
+    // public:
+    //     DBusConnector()
+    //         : connection_()
+    //     {
+    //     }
+    // private:
+    //     QDBusConnection connection_;
+    // };
+
+}
+
+Q_DECLARE_METATYPE(qtrapids::TorrentState);
+Q_DECLARE_METATYPE(qtrapids::ParamsMap_t);
+
+#endif // _QTRAPIDS_DBUS_HPP_
+