diff options
Diffstat (limited to 'trunk/TAO/orbsvcs/tests/AVStreams/Component_Switching/distributer.h')
-rw-r--r-- | trunk/TAO/orbsvcs/tests/AVStreams/Component_Switching/distributer.h | 233 |
1 files changed, 233 insertions, 0 deletions
diff --git a/trunk/TAO/orbsvcs/tests/AVStreams/Component_Switching/distributer.h b/trunk/TAO/orbsvcs/tests/AVStreams/Component_Switching/distributer.h new file mode 100644 index 00000000000..ab6f4753a14 --- /dev/null +++ b/trunk/TAO/orbsvcs/tests/AVStreams/Component_Switching/distributer.h @@ -0,0 +1,233 @@ +/* -*- C++ -*- */ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// TAO/orbsvcs/tests/AVStreams/Component_Switching +// +// = FILENAME +// distributer.h +// +// = DESCRIPTION +// Process to receive data from the sender and send it to the +// receiver. +// +// = AUTHOR +// Yamuna Krishnamurthy <yamuna@cs.wustl.edu> +// +// ============================================================================ + +#include "Connection_Manager.h" +#include "orbsvcs/AV/AVStreams_i.h" +#include "orbsvcs/AV/Endpoint_Strategy.h" +#include "orbsvcs/AV/Policy.h" + +class Signal_Handler : public ACE_Event_Handler +{ + // TITLE + // This class Handles the SIGINT signal through the Reactor. + // Useful to gracefully release the process + +public: + + Signal_Handler (void); + + int handle_signal(int signum, siginfo_t*,ucontext_t*); + // Override this method to implement graceful shutdown. + +}; + + +class Distributer_Receiver_Callback : public TAO_AV_Callback +{ + // = TITLE + // Application defined callback object. + // + // = DESCRIPTION + // AVStreams calls this class when data shows up from a sender. +public: + + Distributer_Receiver_Callback (void); + /// Constructor. + + /// Method that is called when there is data to be received from a + /// sender. + int receive_frame (ACE_Message_Block *frame, + TAO_AV_frame_info *frame_info, + const ACE_Addr &peer_address); + + /// Called when the sender is done sending data and wants to close + /// down the connection. + int handle_destroy (void); + + /// Accessor methods for the flowname of the callback. + ACE_CString &flowname (void); + void flowname (const ACE_CString &flowname); + +private: + int frame_count_; + /// Count of the frames passing through us. + + ACE_CString flowname_; + /// Flowname of the flow. +}; + +class Distributer_Sender_Callback : public TAO_AV_Callback +{ + /// = TITLE + // Defines a class for the distributer application callback + // for receiving data. + // + // = DESCRIPTION + // This class overides the methods of the TAO_AV_Callback so the + // AVStreams can make upcalls to the application. + +public: + + int handle_destroy (void); + /// Called when the sender has finished reading the file and wants + /// to close down the connection. + + /// Accessor methods for the flowname of the callback. + ACE_CString &flowname (void); + void flowname (const ACE_CString &flowname); + +private: + + ACE_CString flowname_; + +}; + +class Distributer_Receiver_StreamEndPoint : public TAO_Server_StreamEndPoint +{ + // = TITLE + // Application defined stream endpoint object. + // + // = DESCRIPTION + // AVStreams calls this class during connection setup. +public: + /// Create a receiver application callback. + int get_callback (const char *flowname, + TAO_AV_Callback *&callback); + + int set_protocol_object (const char *, + TAO_AV_Protocol_Object *object); + /// Store the reference to the protocol object corresponding + /// to the transport + + virtual CORBA::Boolean handle_connection_requested (AVStreams::flowSpec &the_spec + ACE_ENV_ARG_DECL_NOT_USED); + /// Called when a sender makes a connection request. + +private: + Distributer_Receiver_Callback callback_; + /// Receiver application callback. +}; + +class Distributer_Sender_StreamEndPoint : public TAO_Client_StreamEndPoint +{ + /// = TITLE + /// Defines a sender stream endpoint. +public: + int get_callback (const char *flowname, + TAO_AV_Callback *&callback); + /// Create the application callback and return its handle to + /// AVStreams for further application callbacks. + + int set_protocol_object (const char *flowname, + TAO_AV_Protocol_Object *object); + /// Set protocol object corresponding to the transport protocol + /// chosen. + +protected: + Distributer_Sender_Callback callback_; + /// Application callback. +}; + +typedef TAO_AV_Endpoint_Reactive_Strategy_A + <Distributer_Sender_StreamEndPoint, + TAO_VDev, + AV_Null_MediaCtrl> + SENDER_ENDPOINT_STRATEGY; + +typedef TAO_AV_Endpoint_Reactive_Strategy_B + <Distributer_Receiver_StreamEndPoint, + TAO_VDev, + AV_Null_MediaCtrl> + RECEIVER_ENDPOINT_STRATEGY; + +class Distributer +{ + // = TITLE + // Distributer Application. + // + // = DESCRIPTION + // The distributer is the intermediate receiver that receives + // data from the sender and forwards to a receiver. +public: + Distributer (void); + /// Constructor + + ~Distributer (void); + /// Destructor. + + int init (int argc, + char **argv + ACE_ENV_ARG_DECL_NOT_USED); + /// Initialize data components. + + int parse_args (int argc, + char **argv); + /// Parse args. + + /// Flag to know when we are done. + int done (void) const; + void done (int); + + Connection_Manager &connection_manager (void); + /// Accessor to connection manager. + + void stream_created (void); + /// Called when stream created + + void stream_destroyed (void); + /// Called when stream destroyed + + void shut_down (ACE_ENV_SINGLE_ARG_DECL_NOT_USED); + ///Unbind the sender and receiver from the Naming Service + +protected: + Connection_Manager connection_manager_; + /// Connection manager. + + SENDER_ENDPOINT_STRATEGY sender_endpoint_strategy_; + /// The sender endpoint strategy. + + RECEIVER_ENDPOINT_STRATEGY receiver_endpoint_strategy_; + /// The receiver endpoint strategy. + + TAO_MMDevice* distributer_receiver_mmdevice_; + /// The distributer receiver multimedia device + + TAO_MMDevice* distributer_sender_mmdevice_; + /// The distributer receiver multimedia device + + ACE_CString sender_name_; + /// The name of the sender to connect to. + + ACE_CString distributer_name_; + /// Our name. + + int done_; + /// Flag to know when we are done. + + int stream_count_; + /// Number of active streams. When a stream is disconnected this + /// count is decremented. + + Signal_Handler signal_handler_; + /// Reference to the signal handler. + +}; + |