|
@@ -1,8 +1,81 @@
|
|
|
#include "../include/machineiomanager.hpp"
|
|
|
+#include "../include/commands.hpp"
|
|
|
|
|
|
#include <iostream>
|
|
|
#include <jsoncpp/json/json.h>
|
|
|
|
|
|
+#include <readline/readline.h>
|
|
|
+
|
|
|
+using boost::asio::buffer;
|
|
|
+
|
|
|
void MachineIoManager::run() {
|
|
|
std::cout << "MachineIoManager::run() says hello!" << std::endl;
|
|
|
-}
|
|
|
+
|
|
|
+ boost::asio::streambuf recvbuf;
|
|
|
+ boost::system::error_code errcode;
|
|
|
+
|
|
|
+ Json::Value root;
|
|
|
+ const char *recvjson;
|
|
|
+
|
|
|
+ Json::StreamWriterBuilder wbuilder;
|
|
|
+
|
|
|
+ bool keep_reading = true;
|
|
|
+ COMMANDID cmd;
|
|
|
+ char *line = NULL;
|
|
|
+ while(keep_reading){
|
|
|
+ free(line);
|
|
|
+ root = Json::Value();
|
|
|
+
|
|
|
+ // read an input line
|
|
|
+ line = readline ("");
|
|
|
+
|
|
|
+ // if no input continue
|
|
|
+ if (strlen(line) == 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ cmd = getCmdIdFromString(line);
|
|
|
+
|
|
|
+ switch(cmd) {
|
|
|
+ case CMD_DISCONNECT: {
|
|
|
+ std::cerr << "disconnecting\n";
|
|
|
+ keep_reading = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case CMD_STATUS: {
|
|
|
+ root["command"] = "status";
|
|
|
+
|
|
|
+ // send request
|
|
|
+ boost::asio::write(*tcpsock, buffer(Json::writeString(wbuilder, root)), errcode);
|
|
|
+ if(errcode) {
|
|
|
+ std::cerr << "couldnt send version check" << std::endl
|
|
|
+ << errcode.message() << std::endl;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ // receive answer
|
|
|
+ // using transfer_at_least(1) to avoid lockup with transfer_all()
|
|
|
+ boost::asio::read(*tcpsock, recvbuf, boost::asio::transfer_at_least(1), errcode);
|
|
|
+ if (errcode && errcode != boost::asio::error::eof) {
|
|
|
+ std::cerr << "couldnt recieve version check" << std::endl
|
|
|
+ << errcode.message() << std::endl;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ // dump received data to stdout for gui to handle
|
|
|
+ recvjson = boost::asio::buffer_cast<const char *>(recvbuf.data());
|
|
|
+ std::cout << recvjson;
|
|
|
+
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ default: {
|
|
|
+ std::cerr << "unknown command " << line << "\n";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ std::printf("\n");
|
|
|
+ }
|
|
|
+ free(line);
|
|
|
+
|
|
|
+ return;
|
|
|
+}
|