vrpn  07.33
Virtual Reality Peripheral Network
vrpn_RedundantTransmission.h
Go to the documentation of this file.
1 #ifndef VRPN_REDUNDANT_TRANSMISSION_H
2 #define VRPN_REDUNDANT_TRANSMISSION_H
3 
9 
10 #include <stddef.h> // for NULL
11 
12 #include "vrpn_BaseClass.h" // for vrpn_BaseClass
13 #include "vrpn_Configure.h" // for VRPN_API, VRPN_CALLBACK
14 #include "vrpn_Connection.h" // for vrpn_Connection (ptr only), etc
15 #include "vrpn_Shared.h" // for timeval
16 #include "vrpn_Types.h" // for vrpn_uint32, vrpn_bool, etc
17 
18 struct timeval;
19 
21 
22 public:
25 
26  // ACCESSORS
27 
28  vrpn_uint32 defaultRetransmissions(void) const;
29  timeval defaultInterval(void) const;
30  vrpn_bool isEnabled(void) const;
31 
32  // MANIPULATORS
33 
34  virtual void mainloop(void);
37 
38  void enable(vrpn_bool);
39 
40  virtual void setDefaults(vrpn_uint32 numRetransmissions,
41  timeval transmissionInterval);
43 
44  virtual int pack_message(vrpn_uint32 len, timeval time, vrpn_uint32 type,
45  vrpn_uint32 sender, const char *buffer,
46  vrpn_uint32 class_of_service,
47  vrpn_int32 numRetransmissions = -1,
48  timeval *transmissionInterval = NULL);
54 
55 protected:
57 
58  struct queuedMessage {
62  timeval nextValidTime;
64  };
65 
67  vrpn_uint32 d_numMessagesQueued;
69 
70  // Default values.
71 
72  vrpn_uint32 d_numTransmissions;
74 
75  vrpn_bool d_isEnabled;
76 };
77 
79 
80  char *encode_set(int *len, vrpn_uint32 num, timeval interval);
81  void decode_set(const char **buf, vrpn_uint32 *num, timeval *interval);
82 
83  char *encode_enable(int *len, vrpn_bool);
84  void decode_enable(const char **buf, vrpn_bool *);
85 
87 
88  vrpn_int32 d_set_type;
89  vrpn_int32 d_enable_type;
90 };
91 
95 
97 
98 public:
101 
102  void mainloop(void);
103  // Do nothing; vrpn_BaseClass requires this.
104 
105 protected:
106  virtual int register_types(void);
107 
109 
110  static int VRPN_CALLBACK handle_set(void *, vrpn_HANDLERPARAM);
111  static int VRPN_CALLBACK handle_enable(void *, vrpn_HANDLERPARAM);
112 
114 };
115 
119 
121 
122 public:
124  ~vrpn_RedundantRemote(void);
125 
126  void mainloop(void);
127  // Do nothing; vrpn_BaseClass requires this.
128 
129  void set(int numRetransmissions, timeval transmissionInterval);
130  void enable(vrpn_bool);
131 
132 protected:
133  int register_types(void);
134 
136 };
137 
149 
150 // A TypeDispatcher insists on too much control of its table for
151 // us to use one here - we want to use the same indices as the
152 // vrpn_Connection we're attached to, but if we had our own TypeDispatcher
153 // we'd have an independent, inconsistent set of type & sender ids.
154 
155 #define VRPN_RR_LENGTH 8
156 
158 
159 public:
161  ~vrpn_RedundantReceiver(void);
162 
163  virtual int register_handler(vrpn_int32 type, vrpn_MESSAGEHANDLER handler,
164  void *userdata,
165  vrpn_int32 sender = vrpn_ANY_SENDER);
166  virtual int unregister_handler(vrpn_int32 type, vrpn_MESSAGEHANDLER handler,
167  void *userdata,
168  vrpn_int32 sender = vrpn_ANY_SENDER);
169 
170  void record(vrpn_bool);
173 
174  void writeMemory(const char *filename);
179 
180  void clearMemory(void);
182 
183 protected:
185 
187  RRRecord(void);
188 
189  timeval timestampSeen[VRPN_RR_LENGTH];
190  int numSeen[VRPN_RR_LENGTH];
192 
195  };
196 
199 
200  struct RRMemory {
201  timeval timestamp;
202  int numSeen;
204  };
205 
208  vrpn_bool d_record;
209 
210  static int VRPN_CALLBACK
211  handle_possiblyRedundantMessage(void *, vrpn_HANDLERPARAM);
212 };
213 
214 #endif // VRPN_REDUNDANT_TRANSMISSION_H
vrpn_RedundantController_Protocol d_protocol
Description of a callback entry for a user type.
Sends messages to a vrpn_RedundantController so that a vrpn_RedundantTransmission on a server can be ...
Generic connection class not specific to the transport mechanism.
virtual int register_types(void)=0
Register the types of messages this device sends/receives. Return 0 on success, -1 on fail.
#define VRPN_CALLBACK
int(VRPN_CALLBACK * vrpn_MESSAGEHANDLER)(void *userdata, vrpn_HANDLERPARAM p)
Type of a message handler for vrpn_Connection messages.
Accepts commands over a connection to control a local vrpn_RedundantTransmission's default parameters...
#define VRPN_API
void decode_enable(const char **buf, vrpn_bool *)
Helper class that eliminates duplicates; only the first instance of a message is delivered....
All types of client/server/peer objects in VRPN should be derived from the vrpn_BaseClass type descri...
virtual void mainloop()=0
Called once through each main loop iteration to handle updates. Remote object mainloop() should call ...
This structure is what is passed to a vrpn_Connection message callback.
vrpn_RedundantController_Protocol d_protocol
const int vrpn_CONNECTION_MAX_TYPES
#define VRPN_RR_LENGTH
void decode_set(const char **buf, vrpn_uint32 *num, timeval *interval)
Class from which all user-level (and other) classes that communicate with vrpn_Connections should der...
vrpn_RedundantTransmission * d_object
class VRPN_API vrpn_RedundantTransmission
Definition: vrpn_Tracker.h:32
char * encode_set(int *len, vrpn_uint32 num, timeval interval)
Helper class for vrpn_Connection that automates redundant transmission for unreliable (low-latency) m...
vrpn_uint32 d_numMessagesQueued
For debugging, mostly.
const int vrpn_ANY_SENDER
vrpn_ANY_SENDER can be used to register callbacks on a given message type from any sender.