diff options
author | yamuna <yamuna@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2001-03-06 00:50:13 +0000 |
---|---|---|
committer | yamuna <yamuna@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2001-03-06 00:50:13 +0000 |
commit | bcecd87e5af4d2883d9c73274e45549c1b8708dc (patch) | |
tree | 3c7e8024f1c016b2ca6e550ea7f745ad8e2b904b | |
parent | 30313a1d5903835cb8eb0e89a199b0c75cb24d6c (diff) | |
download | ATCD-bcecd87e5af4d2883d9c73274e45549c1b8708dc.tar.gz |
\
-rw-r--r-- | TAO/orbsvcs/tests/AVStreams/Simple/server.cpp | 232 |
1 files changed, 232 insertions, 0 deletions
diff --git a/TAO/orbsvcs/tests/AVStreams/Simple/server.cpp b/TAO/orbsvcs/tests/AVStreams/Simple/server.cpp new file mode 100644 index 00000000000..5d58b1db246 --- /dev/null +++ b/TAO/orbsvcs/tests/AVStreams/Simple/server.cpp @@ -0,0 +1,232 @@ + + +// $Id$ + +#include "server.h" +#include "ace/Get_Opt.h" + +static FILE *output_file = 0; +// File into which the received data is written. + +static const char *output_file_name = "output"; +// File handle of the file into which data is written. + +int +FTP_Server_StreamEndPoint::get_callback (const char *, + TAO_AV_Callback *&callback) +{ + // Return the server application callback to the AVStreams for further upcalls, + callback = &this->callback_; + return 0; +} + +int +FTP_Server_Callback::receive_frame (ACE_Message_Block *frame, + TAO_AV_frame_info *, + const ACE_Addr &) +{ + // Upcall from the AVStreams when there is data to be received from the + // ftp client. + + ACE_DEBUG ((LM_DEBUG, + "FTP_Server_Callback::receive_frame\n")); + + while (frame != 0) + { + // Write the received data to the file. + unsigned int result = ACE_OS::fwrite (frame->rd_ptr (), + frame->length (), + 1, + output_file); + + if (result == frame->length ()) + ACE_ERROR_RETURN ((LM_ERROR, + "FTP_Server_Flow_Handler::fwrite failed\n"), + -1); + + frame = frame->cont (); + } + return 0; +} + +int +FTP_Server_Callback::handle_destroy (void) +{ + // Called when the ftp client requests the stream to be shutdown. + ACE_DEBUG ((LM_DEBUG, + "FTP_Server_Callback::end_stream\n")); + TAO_AV_CORE::instance ()->orb ()->shutdown (); + return 0; +} + +Server::Server (void) + : mmdevice_ (0) +{ +} + +Server::~Server (void) +{ + delete this->mmdevice_; +} + +int +Server::init (int, + char **, + CORBA::Environment &ACE_TRY_ENV) +{ + int result = + this->reactive_strategy_.init (TAO_AV_CORE::instance ()->orb (), + TAO_AV_CORE::instance ()->poa ()); + if (result != 0) + return result; + + // Register the server mmdevice object with the ORB + ACE_NEW_RETURN (this->mmdevice_, + TAO_MMDevice (&this->reactive_strategy_), + -1); + + // 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_MMDevice"); + + CORBA::Object_var mmdevice = + this->mmdevice_->_this (ACE_TRY_ENV); + ACE_CHECK_RETURN(-1); + + // Initialize the naming services + if (this->my_naming_client_.init (TAO_AV_CORE::instance ()->orb ()) != 0) + ACE_ERROR_RETURN ((LM_ERROR, + "Unable to initialize " + "the TAO_Naming_Client\n"), + -1); + + // Register the server object with the naming server. + this->my_naming_client_->rebind (server_mmdevice_name, + mmdevice.in (), + ACE_TRY_ENV); + ACE_CHECK_RETURN (-1); + + return 0; +} + +int +parse_args (int argc, + char **argv) +{ + ACE_Get_Opt opts (argc, + argv, + "f:"); + + int c; + while ((c = opts ()) != -1) + { + switch (c) + { + case 'f': + output_file_name = opts.optarg; + break; + default: + ACE_ERROR_RETURN ((LM_ERROR, + "Usage: server -f filename"), + -1); + } + } + + return 0; +} + +int +main (int argc, + char **argv) +{ + ACE_DECLARE_NEW_CORBA_ENV; + ACE_TRY + { + // Initialize the ORB first. + CORBA::ORB_var orb = CORBA::ORB_init (argc, + argv, + 0, + ACE_TRY_ENV); + ACE_TRY_CHECK; + + int result = + parse_args (argc, + argv); + + if (result == -1) + return -1; + + // Make sure we have a valid <output_file> + output_file = ACE_OS::fopen (output_file_name, + "w"); + if (output_file == 0) + ACE_ERROR_RETURN ((LM_DEBUG, + "Cannot open output file %s\n", + output_file_name), + -1); + + else ACE_DEBUG ((LM_DEBUG, + "File Opened Successfull\n")); + + CORBA::Object_var obj + = orb->resolve_initial_references ("RootPOA", + ACE_TRY_ENV); + ACE_TRY_CHECK; + + // Get the POA_var object from Object_var. + PortableServer::POA_var root_poa = + PortableServer::POA::_narrow (obj.in (), + ACE_TRY_ENV); + ACE_TRY_CHECK; + + PortableServer::POAManager_var mgr + = root_poa->the_POAManager (ACE_TRY_ENV); + ACE_TRY_CHECK; + + mgr->activate (ACE_TRY_ENV); + ACE_TRY_CHECK; + + // Initialize the AVStreams components. + TAO_AV_CORE::instance ()->init (orb.in (), + root_poa.in (), + ACE_TRY_ENV); + ACE_TRY_CHECK; + + Server server; + result = + server.init (argc, + argv, + ACE_TRY_ENV); + ACE_TRY_CHECK; + + if (result != 0) + return result; + + orb->run (ACE_TRY_ENV); + ACE_TRY_CHECK; + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"server::init"); + return -1; + } + ACE_ENDTRY; + ACE_CHECK_RETURN (-1); + + ACE_OS::fclose (output_file); + + return 0; +} + +#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) +template class TAO_AV_Endpoint_Reactive_Strategy_B +<FTP_Server_StreamEndPoint,TAO_VDev,AV_Null_MediaCtrl>; +template class TAO_AV_Endpoint_Reactive_Strategy +<FTP_Server_StreamEndPoint,TAO_VDev,AV_Null_MediaCtrl>; +#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) +#pragma instantiate TAO_AV_Endpoint_Reactive_Strategy_B +<FTP_Server_StreamEndPoint,TAO_VDev,AV_Null_MediaCtrl> +#pragma instantiate TAO_AV_Endpoint_Reactive_Strategy +<FTP_Server_StreamEndPoint,TAO_VDev,AV_Null_MediaCtrl> +#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ |