Kaynağa Gözat

Command status

sends stub status message
anon 5 yıl önce
ebeveyn
işleme
443c710e29
1 değiştirilmiş dosya ile 47 ekleme ve 1 silme
  1. 47 1
      daemon/src/Server.cpp

+ 47 - 1
daemon/src/Server.cpp

@@ -155,7 +155,53 @@ void con_handler::handle_read_login(const boost::system::error_code &err,
 
 void con_handler::handle_read_command(const boost::system::error_code &err,
                                       size_t bytes_transferred) {
-  // TODO
+  if (!err) {
+    // set up json stuff
+    JSONCPP_STRING err;
+    Json::Value root;
+    Json::CharReaderBuilder builder;
+    const std::unique_ptr<Json::CharReader> reader(builder.newCharReader());
+
+    // parse data
+    if (!reader->parse(this->data, this->data + bytes_transferred, &root,
+                       &err)) {
+      std::cerr << "Json error: " << err << std::endl << "data: " << this->data;
+      sock.close();
+    }
+
+    Json::Value answer;
+    Json::StreamWriterBuilder stringBuilder;
+
+    // check command
+    if (root["command"].compare("status") == 0) {
+      answer["command"] = "status";
+
+      // TODO answer a real status message
+      answer["response"] = "This is a status message :)";
+      const std::string answerString = Json::writeString(stringBuilder, answer);
+
+      // send answer
+      sock.async_write_some(buffer(answerString, max_length),
+                            boost::bind(&con_handler::handle_write,
+                                        shared_from_this(), placeholders::error,
+                                        placeholders::bytes_transferred));
+
+      // read next data
+      sock.async_read_some(buffer(data, max_length),
+                           boost::bind(&con_handler::handle_read_command,
+                                       shared_from_this(), placeholders::error,
+                                       placeholders::bytes_transferred));
+    } else {
+      // TODO handle error
+
+      // close connection
+      sock.close();
+    }
+
+  } else {
+    std::cerr << "error: " << err.message() << std::endl;
+    sock.close();
+  }
 }
 
 void con_handler::handle_write(const boost::system::error_code &err,