Beispiel #1
0
bool Client::Post(const char* method, Value& params, Value& result)
{
    log_trace();
    gettimeofday( &startTime_, 0 );
    result.SetInvalid();

    PreserveReceiveBuffer();
    ResetTransaction();

    if (Connect(result) &&
        GenerateRequest(method, params) &&
        GenerateHeader())
    {
        if (!WriteRequest(result))
        {
            // retry the connection
            Close();
            if (!Connect(result) ||
                !WriteRequest(result))
            {
                Reset();
                return false;
            }
        }
        return true;
    }
    Reset();
    return false;
}
Beispiel #2
0
bool Client::GetPostResult(Value& result)
{
    log_trace();
    gettimeofday( &startTime_, 0 );
    result.SetInvalid();

    if (responseProcessed_)
    {
        PreserveReceiveBuffer();
        ResetTransaction();
    }

    if (socket_.IsConnected(0) &&
        ReadHeader(result) &&
        ReadResponse(result))
    {
        switch (ProcessResponse(result))
        {
            case ProcessResponseSuccess       : return true;
            case ProcessResponseErrorKeepOpen : return false;
        }
    }

    Reset();
    return false;
}
Beispiel #3
0
bool Client::Notify(const char* method, Value& params, Value& result)
{
    log_trace();
    gettimeofday( &startTime_, 0 );
    result.SetInvalid();

    PreserveReceiveBuffer();
    ResetTransaction();

    if (Connect(result) &&
        GenerateRequest(method, params, true) &&
        GenerateHeader())
    {
        if (!WriteRequest(result))
        {
            // retry the connection
            Close();
            if (!Connect(result) ||
                !WriteRequest(result))
            {
                Reset();
                return false;
            }
        }
        // Not all notification require a response
        if (!TransportHasNotifyResponse())
        {
            requestId_.pop_front();
            return true;
        }
        // continue with the processing response
        if (ReadHeader(result) &&
            ReadResponse(result))
        {
            // don't process the response for a notification
            requestId_.pop_front();
            result.SetNull();
            return true;
        }
    }
    Reset();
    return false;
}
Beispiel #4
0
bool Client::Call(const char* method, Value& params, Value& result)
{
    log_trace();
    gettimeofday( &startTime_, 0 );
    result.SetInvalid();

    PreserveReceiveBuffer();
    ResetTransaction();

    if (Connect() &&
        GenerateRequest(method, params) &&
        GenerateHeader())
    {
        if (!WriteRequest(result))
        {
            // retry the connection
            Close();
            if (!Connect() ||
                !WriteRequest(result))
            {
                Reset();
                return false;
            }
        }
        // continue with the processing
        if (ReadHeader(result) &&
            ReadResponse(result))
        {
            switch (ProcessResponse(result))
            {
                case ProcessResponseSuccess       : return true;
                case ProcessResponseErrorKeepOpen : return false;
                default                           : ; // continue processing
            }
        }
    }
    Reset();
    return false;
}