void ProxyServer::process_request(boost::asio::ip::tcp::socket * socket, std::string const & message) { vector<string>tokens; tokenizer(const_cast<string &>(message), tokens); if (tokens.size() > 0) { if (tokens[0] == "READ" && tokens.size() > 1) { std::cout << "Application Server - Message received from " << socket->remote_endpoint() << " - Message: " << message << std::endl; string res = readFunc(tokens[1]); socket->write_some(boost::asio::buffer(res)); } else if (tokens[0] == "WRITE" && tokens.size() > 2) { std::cout << "Application Server - Message received from " << socket->remote_endpoint() << " - Message: " << message << std::endl; bool res = writeFunc(tokens[1], tokens[2]); socket->write_some(boost::asio::buffer(res ? string("WRITE_OK") : string("WRITE_FAIL"))); } else { std::cout << "Application Server - Message received from " << socket->remote_endpoint() << " - Message: " << message << std::endl; socket->write_some(boost::asio::buffer(string("INVALID"))); } } }
static u32 tcp_write(const s32 s, const u8 *buffer, const u32 length) { const u8 *p; u32 left, block, sent, step=0; s64 t; s32 res; p = buffer; left = length; sent = 0; t = gettime(); while (left) { if (ticks_to_millisecs(diff_ticks(t, gettime())) > TCP_BLOCK_SEND_TIMEOUT) { break; } block = left; if (block > TCP_SEND_SIZE) block = TCP_SEND_SIZE; res = writeFunc(s, p, block); if ((res == 0) || (res == -56)) { usleep(20 * 1000); continue; } if (res < 0) break; sent += res; left -= res; p += res; usleep(100); if ((sent / TCP_BLOCK_SIZE) > step) { t = gettime (); step++; } } return left == 0; }