|
@@ -40,7 +40,7 @@ bool IoManager::connect() {
|
|
|
|
|
|
// send version check
|
|
|
// TODO make client version global
|
|
|
- root["version"] = "0.2";
|
|
|
+ root["version"] = "0.1";
|
|
|
|
|
|
std::cout << root << std::endl;
|
|
|
|
|
@@ -55,7 +55,8 @@ bool IoManager::connect() {
|
|
|
fflush(stdout);
|
|
|
|
|
|
// recieve answer to version check
|
|
|
- boost::asio::read(*tcpsock, recvbuf, boost::asio::transfer_all(), errcode);
|
|
|
+ // using transfer_at_least(1) to avoid lockup with transfer_all()
|
|
|
+ boost::asio::read(*tcpsock, recvbuf, boost::asio::transfer_at_least(1), errcode);
|
|
|
//~ boost::asio::read(*tcpsock, recvbuf, errcode);
|
|
|
if (errcode && errcode != boost::asio::error::eof) {
|
|
|
std::cerr << "couldnt recieve version check" << std::endl
|
|
@@ -77,13 +78,16 @@ bool IoManager::connect() {
|
|
|
printf("parse ok\n");
|
|
|
fflush(stdout);
|
|
|
|
|
|
+ // remove processed data from recvbuf
|
|
|
+ recvbuf.consume(recvbuf.size());
|
|
|
+
|
|
|
std::cout << root << std::endl;
|
|
|
|
|
|
// check if version check was ok
|
|
|
checkok = root["accept"];
|
|
|
if(checkok.type() != Json::ValueType::booleanValue || !checkok) {
|
|
|
// TODO make client version global
|
|
|
- std::cerr << "version check failed. client version is " << "0.2" << std::endl
|
|
|
+ std::cerr << "version check failed. client version is " << "0.1" << std::endl
|
|
|
<< "server reports version " << root["version"] << std::endl;
|
|
|
return false;
|
|
|
}
|
|
@@ -91,6 +95,56 @@ bool IoManager::connect() {
|
|
|
printf("check ok\n");
|
|
|
fflush(stdout);
|
|
|
|
|
|
+ /* */
|
|
|
+ // TODO remove hardcoded login
|
|
|
+ root = Json::Value();
|
|
|
+ // send version check
|
|
|
+ // TODO make client version global
|
|
|
+ root["user"] = "user";
|
|
|
+ root["pass"] = "pass";
|
|
|
+
|
|
|
+ std::cout << root << std::endl;
|
|
|
+
|
|
|
+ boost::asio::write(*tcpsock, buffer(Json::writeString(wbuilder, root)), errcode);
|
|
|
+ if(errcode) {
|
|
|
+ std::cerr << "couldnt send login" << std::endl
|
|
|
+ << errcode.message() << std::endl;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ printf("send ok\n");
|
|
|
+ fflush(stdout);
|
|
|
+
|
|
|
+ // recieve answer to version check
|
|
|
+ // using transfer_at_least(1) to avoid lockup with transfer_all()
|
|
|
+ boost::asio::read(*tcpsock, recvbuf, boost::asio::transfer_at_least(1), errcode);
|
|
|
+ //~ boost::asio::read(*tcpsock, recvbuf, errcode);
|
|
|
+ if (errcode && errcode != boost::asio::error::eof) {
|
|
|
+ std::cerr << "couldnt recieve login response" << std::endl
|
|
|
+ << errcode.message() << std::endl;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ printf("recieve ok\n");
|
|
|
+ fflush(stdout);
|
|
|
+
|
|
|
+ // parse json
|
|
|
+ recvjson = boost::asio::buffer_cast<const char *>(recvbuf.data());
|
|
|
+ if (!reader->parse(recvjson, recvjson + recvbuf.size(), &root, &jsonerror)) {
|
|
|
+ std::cerr << "couldnt parse recieved json" << std::endl
|
|
|
+ << jsonerror << std::endl;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ printf("parse ok\n");
|
|
|
+ fflush(stdout);
|
|
|
+
|
|
|
+ // remove processed data from recvbuf
|
|
|
+ recvbuf.consume(recvbuf.size());
|
|
|
+
|
|
|
+ std::cout << root << std::endl;
|
|
|
+ /* */
|
|
|
+
|
|
|
// clean up
|
|
|
delete ep;
|
|
|
|
|
@@ -98,6 +152,63 @@ bool IoManager::connect() {
|
|
|
}
|
|
|
|
|
|
IoManager::~IoManager() {
|
|
|
+
|
|
|
+ /* */
|
|
|
+
|
|
|
+
|
|
|
+ Json::Value root, checkok;
|
|
|
+ const char *recvjson;
|
|
|
+ std::string jsonerror;
|
|
|
+
|
|
|
+ Json::CharReaderBuilder rbuilder;
|
|
|
+ const std::unique_ptr<Json::CharReader> reader(rbuilder.newCharReader());
|
|
|
+ Json::StreamWriterBuilder wbuilder;
|
|
|
+
|
|
|
+ // TODO remove hardcoded login
|
|
|
+ root = Json::Value();
|
|
|
+ // send version check
|
|
|
+ // TODO make client version global
|
|
|
+ root["command"] = "close";
|
|
|
+
|
|
|
+ std::cout << root << std::endl;
|
|
|
+
|
|
|
+ boost::asio::write(*tcpsock, buffer(Json::writeString(wbuilder, root)), errcode);
|
|
|
+ if(errcode) {
|
|
|
+ std::cerr << "couldnt send close" << std::endl
|
|
|
+ << errcode.message() << std::endl;
|
|
|
+ }
|
|
|
+
|
|
|
+ printf("send ok\n");
|
|
|
+ fflush(stdout);
|
|
|
+
|
|
|
+ // recieve answer to version check
|
|
|
+ // using transfer_at_least(1) to avoid lockup with transfer_all()
|
|
|
+ boost::asio::read(*tcpsock, recvbuf, boost::asio::transfer_at_least(1), errcode);
|
|
|
+ //~ boost::asio::read(*tcpsock, recvbuf, errcode);
|
|
|
+ if (errcode && errcode != boost::asio::error::eof) {
|
|
|
+ std::cerr << "couldnt recieve close response" << std::endl
|
|
|
+ << errcode.message() << std::endl;
|
|
|
+ }
|
|
|
+
|
|
|
+ printf("recieve ok\n");
|
|
|
+ fflush(stdout);
|
|
|
+
|
|
|
+ // parse json
|
|
|
+ recvjson = boost::asio::buffer_cast<const char *>(recvbuf.data());
|
|
|
+ if (!reader->parse(recvjson, recvjson + recvbuf.size(), &root, &jsonerror)) {
|
|
|
+ std::cerr << "couldnt parse recieved json" << std::endl
|
|
|
+ << jsonerror << std::endl;
|
|
|
+ }
|
|
|
+
|
|
|
+ printf("parse ok\n");
|
|
|
+ fflush(stdout);
|
|
|
+
|
|
|
+ // remove processed data from recvbuf
|
|
|
+ recvbuf.consume(recvbuf.size());
|
|
|
+
|
|
|
+ std::cout << root << std::endl;
|
|
|
+ /* */
|
|
|
+
|
|
|
tcpsock->close();
|
|
|
|
|
|
delete ipstring;
|