summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/AVStreams/Simple_Two_Stage/sender.h
blob: 32cbf2856c9004eb557f9105bb0537ca823e8122 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/* -*- C++ -*- */
// $Id$

// ============================================================================
//
// = LIBRARY
//    TAO/orbsvcs/tests/AVStreams/Simple
//
// = FILENAME
//    sender.h
//
// = DESCRIPTION
//    This application reads data from a file and sends it to s
//    receiver.
//
// = AUTHOR
//    Yamuna Krishnamurthy <yamuna@cs.wustl.edu>
//
// ============================================================================

#include "orbsvcs/Naming/Naming_Client.h"
#include "orbsvcs/AV/AVStreams_i.h"
#include "orbsvcs/AV/Endpoint_Strategy.h"
#include "orbsvcs/AV/Protocol_Factory.h"

class 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:
  TAO_AV_Callback callback_;
  // Application callback.
};

typedef TAO_AV_Endpoint_Reactive_Strategy_A
          <Sender_StreamEndPoint,
           TAO_VDev,
           AV_Null_MediaCtrl>
        SENDER_ENDPOINT_STRATEGY;

class Sender
{
  // = TITLE
  //    Sender Application.
  //
  // = DESCRIPTION
  //    Class is responsible for streaming (and pacing) data to a
  //    receiver.
public:
  Sender (void);
  // Constructor

  int init (int argc,
            char **argv
            ACE_ENV_ARG_DECL_NOT_USED);
  // Method to initialize the various data components.

  int pace_data (ACE_ENV_SINGLE_ARG_DECL_NOT_USED);
  // Method to pace and send data from a file.

  void protocol_object (TAO_AV_Protocol_Object *protocol_object);
  // Set the protocol object corresponding to the transport protocol chosen.

private:
  int parse_args (int argc, char **argv);
  // Method to parse the command line arguments.

  int bind_to_receiver (ACE_ENV_SINGLE_ARG_DECL);
  // Method that binds the sender to the receiver.

  SENDER_ENDPOINT_STRATEGY endpoint_strategy_;
  // The endpoint strategy used by the sender.

  AVStreams::MMDevice_var receiver_mmdevice_;
  // The receiver MMDevice that the sender connects to.

  TAO_MMDevice *sender_mmdevice_;
  // The sender MMDevice.

  TAO_StreamCtrl *streamctrl_;
  // Stream controller

  int frame_count_;
  // Number of frames sent.

  ACE_CString filename_;
  // File from which data is read.

  TAO_Naming_Client naming_client_;
  // The Naming Service client.

  FILE *input_file_;
  // File handle of the file read from.

  ACE_CString protocol_;
  // Selected protocol - default is UDP

  double frame_rate_;
  // Rate at which the data will be sent.

  ACE_Message_Block mb_;
  // Message block into which data is read from a file and then sent.

  TAO_AV_Protocol_Object *protocol_object_;
  // Protocol object corresponding to the transport protocol selected.

  char* address_;
  // Destination Address.
  
  char* peer_address_;
  // Destination Address.

  char** local_sec_addrs_;
  // Local secondary addresses

  char** peer_sec_addrs_;
  // Peer secondary addresses

  int num_local_sec_addrs_;
  int num_peer_sec_addrs_;

  long max_frame_count_;

};