Exemplo n.º 1
0
void ServerConnection::onReceiveWriteDataRowsResponseHeader()
{
	GenericReadResponseHeader responseHeader = *reinterpret_cast<GenericReadResponseHeader*>(_buffer);
	if(responseHeader.blockIdentifier != GenericReadResponseHeaderId || responseHeader.blockSize != sizeof(responseHeader))
	{
		_onError(shared_from_this(), "Bad response from client upon write data rows request");
		StopClient();
	}
	else if(responseHeader.errorCode != NoError)
	{
		handleError(responseHeader);
		_onAwaitingCommand(shared_from_this());
	}
	else if(responseHeader.dataSize != 0) {
		_onError(shared_from_this(), "Client sent unexpected data during write rows action");
		StopClient();
	} else {
		_onAwaitingCommand(shared_from_this());
	}
}
Exemplo n.º 2
0
    void AsyncTask::_error()
    {
        log::messageln("AsyncTask::_error %d - %s", getObjectID(), typeid(*this).name());

        _status = status_failed;
        _onFinal(true);
        _finalize(true);
        _onError();

        AsyncTaskEvent ev(ERROR, this);
        dispatchEvent(&ev);
    }
Exemplo n.º 3
0
void ServerConnection::handleError(const GenericReadResponseHeader &header)
{
	std::stringstream s;
	s << "Client reported \"" << ErrorStr::GetStr(header.errorCode) << '\"';
	if(header.dataSize > 0)
	{
		std::vector<char> message(header.dataSize+1);
		boost::asio::read(_socket, boost::asio::buffer(&message[0], header.dataSize));
		message[header.dataSize] = 0;
		s << " (detailed info: " << &message[0] << ')';
	}
	_onError(shared_from_this(), s.str());
}
Exemplo n.º 4
0
void ServerConnection::onReceiveReadDataRowsResponseHeader()
{
	GenericReadResponseHeader responseHeader = *reinterpret_cast<GenericReadResponseHeader*>(_buffer);
	if(responseHeader.blockIdentifier != GenericReadResponseHeaderId || responseHeader.blockSize != sizeof(responseHeader))
	{
		_onError(shared_from_this(), "Bad response from client upon read data rows request");
		StopClient();
	}
	else if(responseHeader.errorCode != NoError)
	{
		handleError(responseHeader);
		_onAwaitingCommand(shared_from_this());
	}
	else {
		prepareBuffer(responseHeader.dataSize);
		boost::asio::async_read(_socket, boost::asio::buffer(_buffer, responseHeader.dataSize),
			boost::bind(&ServerConnection::onReceiveReadDataRowsResponseData, shared_from_this(), responseHeader.dataSize));
	}
}