X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=src%2Fplpbus%2FBusClient.cc;h=5c20d5d9a29055d4eaff3be39efa438030500f3c;hb=f6bd0d4fefd6459f2e8e5e7b813933be2d87dd47;hp=8c93e1d2f0e015d25f76a3ad3be8d6b3f531c2f6;hpb=a4cadd50e661871c819f9f253f3595cfba647aed;p=libplpbus.git diff --git a/src/plpbus/BusClient.cc b/src/plpbus/BusClient.cc index 8c93e1d..5c20d5d 100644 --- a/src/plpbus/BusClient.cc +++ b/src/plpbus/BusClient.cc @@ -5,14 +5,20 @@ * Author: lamikr */ +#include +#include +#include + #include "BusClient.hh" +#include "ClientServerCommon.hh" #include "BusMessageInternal.hh" +#include "RequestResponseBus.hh" using namespace std; using namespace plpbus; +using namespace plpbus_orb; -class OrbClientImpl : public virtual POA_plpbus_orb::OrbClient -{ +class OrbClientImpl : public virtual POA_plpbus_orb::OrbClient { private: IClientListener *listener; public: @@ -43,42 +49,48 @@ class OrbClientImpl : public virtual POA_plpbus_orb::OrbClient } virtual void receive_response_dataitem_sequence(const ::plpbus_orb::DataItemSequence& msg_rsp_param) { - BusMessageInternal *bus_msg; + const BusMessageInternal *bus_msg; if (listener != NULL) { bus_msg = new BusMessageInternal(msg_rsp_param); listener->response_received(bus_msg); + delete(bus_msg); } } }; BusClient::BusClient() { - cout << "created" << endl; + log_debug("created\n");; _orb = NULL; _poa = NULL; } BusClient::~BusClient() { + if (_poa != NULL) { + //_poa->destroy(true, true); + } if (_orb != NULL) { _orb->destroy(); _orb = NULL; } - cout << "destroyed" << endl; + log_debug("destroyed\n"); } int BusClient::init(const char *server_name) { int argc; char **argv; CORBA::Object_var server_obj; + int ret_val; argc = 0; argv = NULL; - cout << "init() started" << endl; + ret_val = PLP_ERR; + log_info("CORBA client init() started\n"); _orb = CORBA::ORB_init(argc, argv); - if (_orb != NULL) { - cout << "ORB_init() done, finding server: " << server_name << endl; + if (CORBA::is_nil(_orb) == false) { + log_debug("ORB_init() done, finding server: %s\n", server_name); server_obj = find_server_object_by_name(_orb, CONST_CONTEXT_NAME__PLPBUS, CONST_CONTEXT_KIND__PLPBUS, @@ -86,22 +98,27 @@ int BusClient::init(const char *server_name) { CONST_CONTEXT_NAME__PLPBUS); if (CORBA::is_nil(server_obj) == false) { _server = plpbus_orb::OrbServer::_narrow(server_obj); - cout << "Server object found: " << server_name << endl; + if (CORBA::is_nil(_server) == false) { + log_info("CORBA service found: %s\n", server_name); + ret_val = PLP_OK; + } } else { - cerr << "Could not find server object: " << server_name << endl; + log_error("Could not find CORBA service: %s\n", server_name); } } - return 0; + else { + log_error("Could not init CORBA client\n"); + } + return ret_val; } int BusClient::add_client_listener(IClientListener *listener_param) { - cout << "add_client_listener() started" << endl; + log_debug("started\n"); if (_poa == NULL) { OrbClientImpl *client_cb; PortableServer::ObjectId_var oid; - cout << "register_callback() 1" << endl; _poa = create_poa(_orb); client_cb = new OrbClientImpl(listener_param); oid = _poa->activate_object(client_cb); @@ -109,7 +126,7 @@ int BusClient::add_client_listener(IClientListener *listener_param) { client_cb->_remove_ref(); _server->add_event_listener(_client, "event_message", CONST_DEFAULT_EVENT_INTERVAL); } - cout << "add_client_listener() done" << endl; + log_debug("done\n"); return 0; } @@ -120,21 +137,32 @@ int BusClient::send_message_and_request_response(const char *msg_req_param) { int BusClient::send_message_and_wait_response(const char *msg_req_param, char **msg_rsp_param) { CORBA::Long ret_val; + char *rsp; - *msg_rsp_param = _server->send_message_and_wait_response(msg_req_param, ret_val); + rsp = _server->send_message_and_wait_response(msg_req_param, ret_val); + *msg_rsp_param = strdup(rsp); + CORBA::string_free(rsp); return ret_val; } -int BusClient::send_message_and_request_response(BusMessage *msg_req_param) { - _server->send_dataitem_message_and_request_response(_client, msg_req_param->_dataItemSeq); +int BusClient::send_message_and_request_response(const BusMessage *msg_req_param) { + DataItemSequence *seq; + + seq = (DataItemSequence *)msg_req_param->_dataItemSeq; + _server->send_dataitem_message_and_request_response(_client, *seq); return 0; } -int BusClient::send_message_and_wait_response(BusMessage *msg_req_param, BusMessage **msg_rsp_param) { - plpbus_orb::DataItemSequence *seq_rsp; +int BusClient::send_message_and_wait_response(const BusMessage *msg_req_param, BusMessage **msg_rsp_param) { + DataItemSequence *seq_rsp; + DataItemSequence *seq; seq_rsp = NULL; - _server->send_dataitem_message_and_wait_response(msg_req_param->_dataItemSeq, seq_rsp); + seq = (DataItemSequence *)msg_req_param->_dataItemSeq; + _server->send_dataitem_message_and_wait_response(*seq, seq_rsp); + *msg_rsp_param = new BusMessageInternal(*seq_rsp); + delete(seq_rsp); + return 0; } void BusClient::request_shutdown() { @@ -170,18 +198,19 @@ PortableServer::POA_var BusClient::create_poa(CORBA::ORB_var orb) { } } else { - cerr << "Failed to create RootPOA." << endl; + log_error("Failed to create RootPOA\n"); } return ret_val; } -CosNaming::NamingContext_var BusClient::get_name_service_context(CORBA::ORB_var orb_param) { +CosNaming::NamingContext_var BusClient::get_name_service_context(CORBA::ORB_var orb_param, + const char *nameservice_name_param) { CORBA::Object_var ns_obj; CosNaming::NamingContext_var ret_val; ret_val = NULL; try { - ns_obj = orb_param->resolve_initial_references(CONST_NAME_SERVICE_NAME); + ns_obj = orb_param->resolve_initial_references(nameservice_name_param); if (CORBA::is_nil(ns_obj) == false) { // narrow the object reference ret_val = CosNaming::NamingContext::_narrow(ns_obj); @@ -189,16 +218,16 @@ CosNaming::NamingContext_var BusClient::get_name_service_context(CORBA::ORB_var } catch (CORBA::ORB::InvalidName&) { // This should not happen! - cerr << "Could not find name service." << endl; + log_error("Could not find name service.\n"); } catch(CORBA::TRANSIENT& ex) { - cerr << "Could not find name service, verify that name service is running. " << endl; + log_error("Could not find name service, verify that name service is running.\n"); } catch (CORBA::NO_RESOURCES&) { - cerr << "Could not find name service, verify that name service is running. " << endl; + log_error("Could not find name service, verify that name service is running.\n"); } catch(CORBA::SystemException& ex) { - cerr << "Could not find name service, unknown reason. " << endl; + log_error("Could not find name service, unknown reason.\n"); } return ret_val; } @@ -212,9 +241,12 @@ CORBA::Object_var BusClient::find_server_object_by_name(CORBA::ORB_var orb_param CORBA::Object_var ret_val; CosNaming::NamingContext_var ns_root_context; CosNaming::Name service_data; + char *n; - ret_val = CORBA::Object::_nil(); - ns_root_context = get_name_service_context(orb_param); + ret_val = CORBA::Object::_nil(); + n = strdup(CONST_NAME_SERVICE_NAME); + ns_root_context = get_name_service_context(orb_param, n); + free(n); if (CORBA::is_nil(ns_root_context) == false) { // define search criteria service_data.length(2); @@ -226,17 +258,17 @@ CORBA::Object_var BusClient::find_server_object_by_name(CORBA::ORB_var orb_param ret_val = ns_root_context->resolve(service_data); } catch(CosNaming::NamingContext::NotFound& ex) { - cerr << "Could not find service from the name server. " << endl; + log_error("Could not find service from the name server.\n"); } catch(CORBA::TRANSIENT& ex) { - cerr << "Could not find service from the name server. " << endl; + log_error("Could not find service from the name server.\n"); } catch(CORBA::SystemException& ex) { - cerr << "Could not find service from the name server, unknown error." << endl; + log_error("Could not find service from the name server, unknown error.\n"); } } else { - cerr << "Could not find naming service. " << endl; + log_error("Could not find naming service.\n"); } return ret_val; }