#include #include #include #include #include #include #include #include using boost::asio::ip::tcp; void SaveFileInDirectory(std::string filename, std::string directory, std::string *file_content) { try { //std::cout << "Current Dir: " << boost::filesystem::current_path().string() << std::endl; //boost::filesystem::create_directories( "TempFolder" ); if(!(boost::filesystem::exists(directory))) { //std::cout<<"Doesn't Exists"<=512); } catch(boost::system::system_error &ec) { std::cout << ec.code() << " " << ec.what() << std::endl; } return message; } Connection::Connection(boost::asio::io_service &io_service, std::string ip, std::string port):io_service_(io_service),socket_(io_service) { //Constructor port_ = port; ip_ = ip;; } bool Connection::DownloadFile(std::string json) { try { uintmax_t file_size; boost::array buffer; std::string file; boost::system::error_code ec_write; size_t bytes_written = socket_.write_some(boost::asio::buffer(json),ec_write); if(bytes_written == 0) std::cout << "Error Occured\n"; boost::system::error_code ec; uintmax_t total_bytes_of_file_transferred =0; std::string filename = ""; while(ec==0) { size_t bytes_transferred= socket_.read_some(boost::asio::buffer(buffer),ec); if(bytes_transferred <= 0) break; total_bytes_of_file_transferred = total_bytes_of_file_transferred + bytes_transferred; std::string data(buffer.data(), bytes_transferred); if (filename.empty()) { boost::iterator_range r1 = boost::find_nth(data, "\n", 0); filename = std::string(data.begin(),r1.begin()); boost::iterator_range r2 = boost::find_nth(data, "\n", 1); std::string file_sizestr = std::string(r1.begin()+1,r2.begin()); file_size = boost::lexical_cast(file_sizestr); std::string remaining_data = std::string(r2.end(),data.end()); file+=remaining_data; total_bytes_of_file_transferred = total_bytes_of_file_transferred-(filename.length()+file_sizestr.length()+1); } else { file += data; } if(total_bytes_of_file_transferred>=file_size){ break; } } if(ec==0 || ec== boost::asio::error::eof) { if(total_bytes_of_file_transferred>=file_size){ SaveFileInDirectory(filename,"asdf\\",&file); return true; }else{ return false; } } else { return false; } } catch (boost::system::system_error err) { } } int main(int argc, char* argv[]) { try { srand( (unsigned)time( NULL ) ); boost::asio::io_service io_service; Connection *connection = new Connection(io_service, "127.0.0.1", "1936"); connection->Connect(); int first_fetch = 1; while(true) { //int random = rand() % 3 + 1; int random = 1; switch(random) { case 1: { std::string message; if(first_fetch) { message = "{\"heartbeat\":\"true\", \"first_fetch\":\"true\"}\\q\\q"; first_fetch = 0; } else { message = "{\"heartbeat\":\"true\", \"first_fetch\":\"false\"}\\q\\q"; } std::cout << connection->isConnected() << std::endl; if(connection->isConnected()) { connection->SendData(message); std::string messageReceived = connection->ReceiveData(); std::cout << messageReceived << std::endl; } else { std::cout << "Seems like connection is closed\n"; } } break; case 2: { std::string message = "{\"message\":\"This is some Message to be sent to Server\"}"; connection->SendData(message); std::string messageReceived = connection->ReceiveData(); std::cout << messageReceived << std::endl; } break; case 3: { std::string message = "{\"app\":\"filesystem_collector\"}"; connection->DownloadFile(message); } break; default: break; } /* connection->Close(); connection->Connect();*/ Sleep(3000); } } catch(std::exception& e) { std::cerr << e.what() << std::endl; } std::getchar(); return 0; }