1 #ifndef __STG_SGCP_PROTO_H__
2 #define __STG_SGCP_PROTO_H__
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 * Author : Maxim Mamontov <faust@stargazer.dp.ua>
24 #include "sgcp_types.h" // TransportType
25 #include "sgcp_utils.h" // hton/ntoh
27 #include "stg/os_int.h"
43 struct Error : public std::runtime_error
45 Error(const std::string& mesage);
49 Proto(TransportType transport, const std::string& key);
52 void connect(const std::string& address, uint16_t port);
54 void writeAllBuf(const void* buf, size_t size);
55 void readAllBuf(void* buf, size_t size);
58 void writeAll(const T& value);
64 TransportProto* m_transport;
69 void Proto::writeAll<uint64_t>(const uint64_t& value)
71 uint64_t temp = hton(value);
72 writeAllBuf(&temp, sizeof(temp));
77 void Proto::writeAll<std::string>(const std::string& value)
79 uint64_t size = hton(value.size());
80 writeAllBuf(&size, sizeof(size));
81 writeAllBuf(value.c_str(), value.size());
86 uint64_t Proto::readAll<uint64_t>()
89 readAllBuf(&temp, sizeof(temp));
95 std::string Proto::readAll<std::string>()
98 readAllBuf(&size, sizeof(size));
100 std::vector<char> res(size);
101 readAllBuf(res.data(), res.size());