21#include "vrpn_Configure.h"
22#include "vrpn_Connection.h"
23#include "vrpn_Shared.h"
24#include "vrpn_Types.h"
101 vrpn_TEXT_NORMAL = 0,
102 vrpn_TEXT_WARNING = 1,
105const unsigned vrpn_MAX_TEXT_LEN = 1024;
145 vrpn_uint32 level = 0);
173 static int VRPN_CALLBACK
198 friend class SendTextMessageBoundCall;
212 int operator()(
const char *msg)
const
214 struct timeval timestamp;
215 vrpn_gettimeofday(×tamp, NULL);
237 vrpn_MESSAGEHANDLER handler,
239 vrpn_int32 sender = vrpn_ANY_SENDER);
257 vrpn_uint32 level = 0);
281 vrpn_MESSAGEHANDLER handler;
286 int d_num_autodeletions;
288 int d_first_mainloop;
290 struct timeval d_time_first_ping;
294 int d_unanswered_ping;
301 static int VRPN_CALLBACK
303 void initiate_ping_cycle(
void);
359#pragma warning(disable : 4251)
363 typedef void(VRPN_CALLBACK *HANDLER_TYPE)(
void *userdata,
364 const CALLBACK_STRUCT info);
372 if (handler == NULL) {
374 "vrpn_Callback_List::register_handler(): NULL handler\n");
383 "vrpn_Callback_List::register_handler(): Out of memory\n");
386 new_entry->handler = handler;
387 new_entry->userdata = userdata;
391 new_entry->next = d_change_list;
392 d_change_list = new_entry;
405 snitch = &d_change_list;
407 while ((victim != NULL) && ((victim->handler != handler) ||
408 (victim->userdata != userdata))) {
409 snitch = &((*snitch)->next);
410 victim = victim->next;
414 if (victim == NULL) {
417 "vrpn_Callback_List::unregister_handler: No such handler\n");
422 *snitch = victim->next;
426 fprintf(stderr,
"vrpn_Callback_List::unregister_handler: delete failed\n");
437 while (handler != NULL) {
438 handler->handler(handler->userdata, info);
439 handler = handler->next;
445 : d_change_list(NULL){};
449 : d_change_list(NULL)
454 current = from.d_change_list;
455 while (current != NULL) {
456 register_handler(current->userdata, current->handler);
457 current = current->next;
464 CHANGELIST_ENTRY* current, * next;
465 current = d_change_list;
466 while (current != NULL) {
467 next = current->next;
473 "vrpn_Callback_List::operator =: Deletion failure\n");
481 current = from.d_change_list;
482 while (current != NULL) {
483 register_handler(current->userdata, current->handler);
484 current = current->next;
491 while (d_change_list != NULL) {
494 delete d_change_list;
496 fprintf(stderr,
"vrpn_Callback_List::~vrpn_Callback_List: delete failed\n");
499 d_change_list = next;
506 HANDLER_TYPE handler;
vrpn_int32 d_pong_message_id
Server telling that it is there
定义 vrpn_BaseClass.h:228
int send_text_message(const char *msg, struct timeval timestamp, vrpn_TEXT_SEVERITY type=vrpn_TEXT_NORMAL, vrpn_uint32 level=0)
Sends a NULL-terminated text message from the device d_sender_id
void server_mainloop(void)
vrpn_int32 d_ping_message_id
Ask the server if they are there
定义 vrpn_BaseClass.h:227
vrpn_Connection * d_connection
Connection that this object talks to
定义 vrpn_BaseClass.h:221
SendTextMessageBoundCall send_text_message(vrpn_TEXT_SEVERITY type=vrpn_TEXT_NORMAL)
定义 vrpn_BaseClass.h:264
static int encode_text_message_to_buffer(char *buf, vrpn_TEXT_SEVERITY severity, vrpn_uint32 level, const char *msg)
int register_autodeleted_handler(vrpn_int32 type, vrpn_MESSAGEHANDLER handler, void *userdata, vrpn_int32 sender=vrpn_ANY_SENDER)
char * d_servicename
定义 vrpn_BaseClass.h:222
vrpn_int32 d_text_message_id
ID for text messages
定义 vrpn_BaseClass.h:226
vrpn_int32 d_sender_id
part
定义 vrpn_BaseClass.h:225
static int decode_text_message_from_buffer(char *msg, vrpn_TEXT_SEVERITY *severity, vrpn_uint32 *level, const char *buf)
Decodes the body of the text message from a buffer from the connection
vrpn_Connection * connectionPtr()
Returns a pointer to the connection this object is using
定义 vrpn_BaseClass.h:194
void client_mainloop(void)
virtual int register_types(void)=0
virtual int register_senders(void)
virtual void mainloop()=0
vrpn_BaseClass(const char *name, vrpn_Connection *c=NULL)
vrpn_Callback_List(const vrpn_Callback_List &from)
This class requires deep copies.
定义 vrpn_BaseClass.h:448
int register_handler(void *userdata, HANDLER_TYPE handler)
Call this to add a handler to the list.
定义 vrpn_BaseClass.h:367
void call_handlers(const CALLBACK_STRUCT &info)
This will pass the referenced parameter as a const to all the callbacks.
定义 vrpn_BaseClass.h:434
vrpn_Callback_List()
The list starts out empty
定义 vrpn_BaseClass.h:444
~vrpn_Callback_List()
Clear the list upon destruction if it is not empty already
定义 vrpn_BaseClass.h:489
int unregister_handler(void *userdata, HANDLER_TYPE handler)
Call this to remove a handler from the list (if it exists)
定义 vrpn_BaseClass.h:398
Generic connection class not specific to the transport mechanism.
定义 vrpn_Connection.h:562
Structure to hold the objects that are being watched.
定义 vrpn_BaseClass.h:156
vrpn_BaseClass * obj
Object being watched
定义 vrpn_BaseClass.h:158
vrpn_TextPrinter_Watch_Entry * next
Pointer to the next one in the list
定义 vrpn_BaseClass.h:161
vrpn_TextPrinter * me
Pointer to this, because used in a static function
定义 vrpn_BaseClass.h:159
void set_min_level_to_print(vrpn_TEXT_SEVERITY severity, vrpn_uint32 level=0)
static int VRPN_CALLBACK text_message_handler(void *userdata, vrpn_HANDLERPARAM p)
vrpn_TextPrinter_Watch_Entry * d_first_watched_object
Head of list of objects being watched
定义 vrpn_BaseClass.h:164
int add_object(vrpn_BaseClass *o)
void set_ostream_to_use(FILE *o)
vrpn_Semaphore d_semaphore
Mutex to ensure thread safety;
定义 vrpn_BaseClass.h:153
FILE * d_ostream
Output stream to use
定义 vrpn_BaseClass.h:167
void remove_object(vrpn_BaseClass *o)
vrpn_uint32 d_level_to_print
Minimum level to print
定义 vrpn_BaseClass.h:169
vrpn_TEXT_SEVERITY d_severity_to_print
Minimum severity to print
定义 vrpn_BaseClass.h:168
This structure is what is passed to a vrpn_Connection message callback.
定义 vrpn_Connection.h:41
vrpn_TEXT_SEVERITY
定义 vrpn_BaseClass.h:100
const int vrpn_MAX_BCADRS
Internal value for number of BaseClass addresses
定义 vrpn_BaseClass.h:94