]> git.stg.codes - stg.git/blobdiff - stglibs/sgcp.lib/include/stg/sgcp_proto.h
Removed more unused stuff.
[stg.git] / stglibs / sgcp.lib / include / stg / sgcp_proto.h
index 3cc35b19223e388036b18646d4a1bdb8d3bda1b5..4d16c844acc3a51c2988febf87aed54327786410 100644 (file)
  */
 
 #include "sgcp_types.h" // TransportType
-#include "sgcp_utils.h" // hton/ntoh
 
 #include "stg/os_int.h"
 
+#include <boost/function.hpp>
+#include <boost/scoped_ptr.hpp>
+
 #include <string>
-#include <vector>
 #include <stdexcept>
 
 namespace STG
@@ -35,73 +36,31 @@ namespace STG
 namespace SGCP
 {
 
-class TransportProto;
-
 class Proto
 {
     public:
+
         struct Error : public std::runtime_error
         {
-            Error(const std::string& mesage);
-            Error();
+            Error(const std::string& mesage) : runtime_error(message) {}
         };
 
+        typedef boost::function<void (ConnectionPtr /*conn*/, const std::string& /*enpoint*/, const std::string& /*error*/)> AcceptHandler;
+
         Proto(TransportType transport, const std::string& key);
         ~Proto();
 
-        void connect(const std::string& address, uint16_t port);
-
-        void writeAllBuf(const void* buf, size_t size);
-        void readAllBuf(void* buf, size_t size);
-
-        template <typename T>
-        void writeAll(const T& value);
+        ConnectionPtr connect(const std::string& address, uint16_t port);
+        void bind(const std::string& address, uint16_t port, AcceptHandler handler);
 
-        template <typename T>
-        T readAll();
+        void run();
+        bool stop();
 
     private:
-        TransportProto* m_transport;
+        class Impl;
+        boost::scoped_ptr<Impl> m_impl;
 };
 
-template <>
-inline
-void Proto::writeAll<uint64_t>(const uint64_t& value)
-{
-    uint64_t temp = hton(value);
-    writeAllBuf(&temp, sizeof(temp));
-}
-
-template <>
-inline
-void Proto::writeAll<std::string>(const std::string& value)
-{
-    uint64_t size = hton(value.size());
-    writeAllBuf(&size, sizeof(size));
-    writeAllBuf(value.c_str(), value.size());
-}
-
-template <>
-inline
-uint64_t Proto::readAll<uint64_t>()
-{
-    uint64_t temp = 0;
-    readAllBuf(&temp, sizeof(temp));
-    return ntoh(temp);
-}
-
-template <>
-inline
-std::string Proto::readAll<std::string>()
-{
-    uint64_t size = 0;
-    readAllBuf(&size, sizeof(size));
-    size = ntoh(size);
-    std::vector<char> res(size);
-    readAllBuf(res.data(), res.size());
-    return res.data();
-}
-
 } // namespace SGCP
 } // namespace STG