void Connection_Manager::unbind_sender (const ACE_CString &sender_name, AVStreams::MMDevice_ptr sender_mmdevice_obj) { if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG, "Connection_Manager::unbind_sender\n")); CosNaming::Name name (1); name.length (1); // Try binding the sender context in the NS name [0].id = CORBA::string_dup (sender_name.c_str ()); try { CORBA::Object_var object = this->naming_client_->resolve (name); CosNaming::NamingContext_var sender_context = CosNaming::NamingContext::_narrow (object.in ()); if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG, "Sender Context Found\n")); try { object = sender_context->resolve (name); AVStreams::MMDevice_var mmdevice = AVStreams::MMDevice::_narrow (object.in ()); if (mmdevice->_is_equivalent (sender_mmdevice_obj)) { sender_context->unbind (name); if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG, "Sender Unbound\n")); } } catch (const CosNaming::NamingContext::NotFound&) { ACE_DEBUG ((LM_DEBUG, "Sender object not found\n")); // Do not have to unbind. } } catch (const CosNaming::NamingContext::NotFound&) { ACE_DEBUG ((LM_DEBUG, "Sender Context Not Found\n")); // Do not have to unbind. } }
int Server::init (int argc, ACE_TCHAR *argv[]) { try { PortableServer::POAManager_var mgr = TAO_AV_CORE::instance ()->poa ()->the_POAManager (); mgr->activate (); int result = this->parse_args (argc, argv); if (result == -1) ACE_ERROR_RETURN ((LM_ERROR,"parse args failed\n"),-1); // Initialize the naming services if (my_naming_client_.init (TAO_AV_CORE::instance ()->orb ()) != 0) ACE_ERROR_RETURN ((LM_ERROR, " (%P|%t) Unable to initialize " "the TAO_Naming_Client.\n"), -1); // Register the video mmdevice object with the ORB ACE_NEW_RETURN (this->mmdevice_, TAO_MMDevice (&this->reactive_strategy_), -1); ACE_NEW_RETURN (this->fdev_, FTP_Server_FDev, -1); this->fdev_->flowname ("Data"); AVStreams::MMDevice_var mmdevice = this->mmdevice_->_this (); AVStreams::FDev_var fdev = this->fdev_->_this (); mmdevice->add_fdev (fdev.in ()); // Register the mmdevice with the naming service. CosNaming::Name server_mmdevice_name (1); server_mmdevice_name.length (1); server_mmdevice_name [0].id = CORBA::string_dup ("Server_MMDevice1"); try { // Register the video control object with the naming server. this->my_naming_client_->bind (server_mmdevice_name, mmdevice.in ()); } catch (const CosNaming::NamingContext::AlreadyBound&) { server_mmdevice_name [0].id = CORBA::string_dup ("Server_MMDevice2"); this->my_naming_client_->bind (server_mmdevice_name, mmdevice.in ()); } } catch (const CORBA::Exception& ex) { ex._tao_print_exception ("server::init"); return -1; } return 0; }
void Sender::shut_down (void) { try { AVStreams::MMDevice_var mmdevice = this->sender_mmdevice_->_this (); SENDER::instance ()->connection_manager ().unbind_sender (this->sender_name_, mmdevice.in ()); } catch (const CORBA::Exception& ex) { ex._tao_print_exception ("Sender::shut_down Failed\n"); } }
int Receiver::init (int, ACE_TCHAR *[]) { // Initialize the endpoint strategy with the orb and poa. int result = this->reactive_strategy_.init (TAO_AV_CORE::instance ()->orb (), TAO_AV_CORE::instance ()->poa ()); if (result != 0) return result; // Initialize the connection manager. result = this->connection_manager_.init (TAO_AV_CORE::instance ()->orb ()); if (result != 0) return result; this->connection_manager_.load_ep_addr (ACE_TEXT_ALWAYS_CHAR (this->addr_file_.c_str ())); // Register the receiver mmdevice object with the ORB ACE_NEW_RETURN (this->mmdevice_, TAO_MMDevice (&this->reactive_strategy_), -1); // Servant Reference Counting to manage lifetime PortableServer::ServantBase_var safe_mmdevice = this->mmdevice_; AVStreams::MMDevice_var mmdevice = this->mmdevice_->_this (); // Bind to sender. this->connection_manager_.bind_to_sender (this->sender_name_, this->receiver_name_, mmdevice.in ()); // Connect to the sender. this->connection_manager_.connect_to_sender (); return 0; }
int Sender::init (int argc, ACE_TCHAR *argv[]) { // Initialize the endpoint strategy with the orb and poa. int result = this->endpoint_strategy_.init (TAO_AV_CORE::instance ()->orb (), TAO_AV_CORE::instance ()->poa ()); if (result != 0) return result; // Initialize the naming services result = this->naming_client_.init (TAO_AV_CORE::instance ()->orb ()); if (result != 0) return result; // Parse the command line arguments result = this->parse_args (argc, argv); if (result != 0) return result; // Open file to read. this->input_file_ = ACE_OS::fopen (this->filename_.c_str (), "r"); if (this->input_file_ == 0) ACE_ERROR_RETURN ((LM_DEBUG, "Cannot open input file %C\n", this->filename_.c_str ()), -1); else ACE_DEBUG ((LM_DEBUG, "File opened successfully\n")); // Resolve the object reference of the receiver from the Naming Service. result = this->bind_to_receiver (); if (result != 0) ACE_ERROR_RETURN ((LM_ERROR, "(%P|%t) Error binding to the naming service\n"), -1); // Initialize the QoS AVStreams::streamQoS_var the_qos (new AVStreams::streamQoS); // Create the forward flow specification to describe the flow. TAO_Forward_FlowSpec_Entry entry ("Data_Receiver", "IN", "USER_DEFINED", "", this->protocol_.c_str (), 0); AVStreams::flowSpec flow_spec (1); flow_spec.length (2); flow_spec [0] = CORBA::string_dup (entry.entry_to_string ()); // Create the forward flow specification to describe the flow. TAO_Forward_FlowSpec_Entry entry1 ("Data_Receiver1", "OUT", "USER_DEFINED", "", this->protocol_.c_str (), 0); flow_spec [1] = CORBA::string_dup (entry1.entry_to_string ()); // Register the sender mmdevice object with the ORB ACE_NEW_RETURN (this->sender_mmdevice_, TAO_MMDevice (&this->endpoint_strategy_), -1); // Servant Reference Counting to manage lifetime PortableServer::ServantBase_var safe_mmdevice = this->sender_mmdevice_; AVStreams::MMDevice_var mmdevice = this->sender_mmdevice_->_this (); ACE_NEW_RETURN (this->streamctrl_, TAO_StreamCtrl, -1); PortableServer::ServantBase_var safe_streamctrl = this->streamctrl_; // Bind/Connect the sender and receiver MMDevices. CORBA::Boolean bind_result = this->streamctrl_->bind_devs (mmdevice.in (), this->receiver_mmdevice_.in (), the_qos.inout (), flow_spec); if (bind_result == 0) ACE_ERROR_RETURN ((LM_ERROR, "streamctrl::bind_devs failed\n"), -1); return 0; }
int Sender::init (int argc, ACE_TCHAR *argv[]) { // Initialize the endpoint strategy with the orb and poa. int result = this->endpoint_strategy_.init (TAO_AV_CORE::instance ()->orb (), TAO_AV_CORE::instance ()->poa ()); if (result != 0) return result; // Initialize the naming services result = this->naming_client_.init (TAO_AV_CORE::instance ()->orb ()); if (result != 0) return result; // Parse the command line arguments result = this->parse_args (argc, argv); if (result != 0) return result; // Open file to read. this->input_file_ = ACE_OS::fopen (this->filename_.c_str (), "r"); if (this->input_file_ == 0) ACE_ERROR_RETURN ((LM_ERROR, "Cannot open input file %C\n", this->filename_.c_str ()), -1); else ACE_DEBUG ((LM_DEBUG, "File opened successfully\n")); // Register the sender mmdevice object with the ORB ACE_NEW_RETURN (this->sender_mmdevice_, TAO_MMDevice (&this->endpoint_strategy_), -1); // Servant Reference Counting to manage lifetime PortableServer::ServantBase_var safe_mmdevice = this->sender_mmdevice_; AVStreams::MMDevice_var mmdevice = this->sender_mmdevice_->_this (); CosNaming::Name name (1); name.length (1); name [0].id = CORBA::string_dup ("Sender"); // Register the sender object with the naming server. this->naming_client_->rebind (name, mmdevice.in ()); return 0; }
int Sender::init (int argc, ACE_TCHAR *argv[]) { /// Initialize the endpoint strategy with the orb and poa. int result = this->endpoint_strategy_.init (TAO_AV_CORE::instance ()->orb (), TAO_AV_CORE::instance ()->poa ()); if (result != 0) return result; /// Initialize the connection manager. result = this->connection_manager_.init (TAO_AV_CORE::instance ()->orb ()); if (result != 0) return result; /// Parse the command line arguments result = this->parse_args (argc, argv); if (result != 0) return result; /* ACE_Reactor *reactor = TAO_AV_CORE::instance ()->reactor (); if (reactor->register_handler (SIGINT, &this->signal_handler_) == -1) ACE_ERROR_RETURN ((LM_ERROR, "Error in handler register\n"), -1); /// Register the signal handler for clean termination of the process. */ /// Open file to read. this->input_file_ = ACE_OS::fopen (this->filename_.c_str (), "r"); if (this->input_file_ == 0) ACE_ERROR_RETURN ((LM_DEBUG, "Cannot open input file %C\n", this->filename_.c_str ()), -1); else ACE_DEBUG ((LM_DEBUG, "File opened successfully\n")); /// Register the sender mmdevice object with the ORB ACE_NEW_RETURN (this->sender_mmdevice_, TAO_MMDevice (&this->endpoint_strategy_), -1); /// Servant Reference Counting to manage lifetime PortableServer::ServantBase_var safe_mmdevice = this->sender_mmdevice_; AVStreams::MMDevice_var mmdevice = this->sender_mmdevice_->_this (); /// Register the object reference with the Naming Service and bind to /// the receivers this->connection_manager_.bind_to_receivers (this->sender_name_, mmdevice.in ()); /// Connect to the receivers this->connection_manager_.connect_to_receivers (); return 0; }