bool QmfObject::process_event(ConsoleEvent &event) { QmfAsyncRequest *ar; if (event.getType() == CONSOLE_METHOD_RESPONSE) { ar = _outstanding_calls[event.getCorrelator()]; if (ar) { qpid::types::Variant::Map my_map = event.getArguments(); if (ar->state == QmfAsyncRequest::JOB_RUNNING) { method_response(ar, my_map, RPC_OK); } else { qb_log(LOG_ERR, " method_response is too late! "); } _outstanding_calls.erase(event.getCorrelator()); ar->unref(); } } else if (event.getType() == CONSOLE_EXCEPTION) { ar = _outstanding_calls[event.getCorrelator()]; if (ar) { qpid::types::Variant::Map my_map; string error(" unknown "); if (event.getDataCount() >= 1) { my_map = event.getData(0).getProperties(); error = (string)event.getData(0).getProperty("error_text"); } qb_log(LOG_ERR, "%s'ing: EXCEPTION %s ", ar->method.c_str(), error.c_str()); method_response(ar, my_map, RPC_EXCEPTION); _outstanding_calls.erase(event.getCorrelator()); ar->unref(); } } else if (event.getType() == CONSOLE_EVENT) { if (_event_fn != NULL) { _event_fn(event, _event_user_data); } } return true; }
static void method_call_tmo(void* data) { QmfAsyncRequest *ar = (QmfAsyncRequest *)data; gdouble elapsed = 0; if (ar->state == QmfAsyncRequest::JOB_COMPLETED) { // all good - it's finished } else { // timed out :( qpid::types::Variant::Map empty_args; if (ar->state == QmfAsyncRequest::JOB_SCHEDULED) { ar->obj->method_response(ar, empty_args, QmfObject::RPC_NOT_CONNECTED); } else { ar->obj->method_response(ar, empty_args, QmfObject::RPC_TIMEOUT); } } ar->unref(); }