* Author: lamikr
*/
+#include <malloc.h>
+#include <plp/log.h>
+#include <plp/retval.h>
+
#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:
}
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,
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);
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;
}
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() {
}
}
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);
}
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;
}
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);
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;
}