void HttpClientImpl::call(IComposer& r, IRemoteProcedure& method, IDecomposer** argv, unsigned argc) { _proc = &method; prepareRequest(method.name(), argv, argc); _client.execute(_request); _scanner.begin(_deserializer, r); char ch; std::istream& is = _client.in(); while (is.get(ch)) { if (_scanner.advance(ch)) { log_debug("scanner finished"); _proc = 0; _scanner.finalizeReply(); return; } } throw std::runtime_error("unexpected end of data"); }
void RpcClientImpl::beginCall(IComposer& r, IRemoteProcedure& method, IDecomposer** argv, unsigned argc) { if (_socket.selector() == 0) throw std::logic_error("cannot run async rpc request without a selector"); if (_proc) throw std::logic_error("asyncronous request already running"); _proc = &method; prepareRequest(method.name(), argv, argc); if (_socket.isConnected()) { try { _stream.buffer().beginWrite(); } catch (const IOError&) { log_debug("write failed, connection is not active any more"); _socket.beginConnect(_addr, _port); } } else { log_debug("not yet connected - do it now"); _socket.beginConnect(_addr, _port); } _scanner.begin(_deserializer, r); }
void HttpClientImpl::beginCall(IComposer& r, IRemoteProcedure& method, IDecomposer** argv, unsigned argc) { _proc = &method; prepareRequest(method.name(), argv, argc); _client.beginExecute(_request); _scanner.begin(_deserializer, r); }