Пример #1
0
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")));
    }
  }
}
Пример #2
0
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;
}