1#ifndef VRPN_SHARED_OBJECT
2#define VRPN_SHARED_OBJECT
6#include "vrpn_Configure.h"
9#include "vrpn_Shared.h"
10#include "vrpn_Types.h"
33typedef int(VRPN_CALLBACK *vrpnDeferredUpdateCallback)(
void *userdata);
35typedef int(VRPN_CALLBACK *vrpnSharedIntCallback)(
void *userdata,
38typedef int(VRPN_CALLBACK *vrpnSharedFloatCallback)(
void *userdata,
39 vrpn_float64 newValue,
41typedef int(VRPN_CALLBACK *vrpnSharedStringCallback)(
void *userdata,
45typedef int(VRPN_CALLBACK *vrpnTimedSharedIntCallback)(
void *userdata,
49typedef int(VRPN_CALLBACK *vrpnTimedSharedFloatCallback)(
void *userdata,
50 vrpn_float64 newValue,
53typedef int(VRPN_CALLBACK *vrpnTimedSharedStringCallback)(
void *userdata,
62typedef int(VRPN_CALLBACK *vrpnSharedIntSerializerPolicy)(
63 void *userdata, vrpn_int32 newValue, timeval when,
65typedef int(VRPN_CALLBACK *vrpnSharedFloatSerializerPolicy)(
66 void *userdata, vrpn_float64 newValue, timeval when,
68typedef int(VRPN_CALLBACK *vrpnSharedStringSerializerPolicy)(
69 void *userdata,
const char *newValue, timeval when,
75#define VRPN_SO_DEFAULT 0x00
76#define VRPN_SO_IGNORE_IDEMPOTENT 0x01
77#define VRPN_SO_DEFER_UPDATES 0x10
78#define VRPN_SO_IGNORE_OLD 0x100
109enum vrpn_SerializerPolicy {
123class VRPN_API vrpn_SharedObject {
126 vrpn_SharedObject(
const char *name,
const char *tname, vrpn_int32 mode);
127 virtual ~vrpn_SharedObject(
void);
131 const char *name(
void)
const;
132 vrpn_bool isSerializer(
void)
const;
168 timeval d_lastUpdate;
171 vrpn_Connection *d_connection;
175 vrpn_int32 d_serverId;
176 vrpn_int32 d_remoteId;
179 vrpn_int32 d_update_type;
191 vrpn_int32 d_lamportUpdate_type;
199 virtual vrpn_bool shouldSendUpdate(vrpn_bool isLocalSet,
200 vrpn_bool acceptedUpdate);
205 static int VRPN_CALLBACK
215 vrpn_LamportClock *d_lClock;
216 vrpn_LamportTimestamp *d_lastLamportUpdate;
219 vrpnDeferredUpdateCallback handler;
228 void serverPostBindCleanup(
void);
229 void remotePostBindCleanup(
void);
244 void postBindCleanup(
void);
247class VRPN_API vrpn_Shared_int32 :
public vrpn_SharedObject {
250 vrpn_Shared_int32(
const char *name, vrpn_int32 defaultValue = 0,
251 vrpn_int32 mode = VRPN_SO_DEFAULT);
252 virtual ~vrpn_Shared_int32(
void);
256 vrpn_int32 value(
void)
const;
257 operator vrpn_int32()
const;
261 vrpn_Shared_int32 &operator=(vrpn_int32 newValue);
264 vrpn_Shared_int32 &set(vrpn_int32 newValue, timeval when);
267 vrpn_bool register_handler(vrpnSharedIntCallback,
void *);
268 void unregister_handler(vrpnSharedIntCallback,
void *);
269 vrpn_bool register_handler(vrpnTimedSharedIntCallback,
void *);
270 void unregister_handler(vrpnTimedSharedIntCallback,
void *);
275 void setSerializerPolicy(vrpn_SerializerPolicy policy = vrpn_ACCEPT,
276 vrpnSharedIntSerializerPolicy f = NULL,
277 void *userdata = NULL);
288 vrpnSharedIntCallback handler;
294 vrpnTimedSharedIntCallback handler;
300 vrpn_Shared_int32 &set(vrpn_int32, timeval, vrpn_bool isLocalSet,
301 vrpn_LamportTimestamp * = NULL);
303 virtual vrpn_bool shouldAcceptUpdate(vrpn_int32 newValue, timeval when,
304 vrpn_bool isLocalSet,
305 vrpn_LamportTimestamp *);
308 void sendUpdate(vrpn_int32 newValue, timeval when);
310 void encode(
char **buffer, vrpn_int32 *len, vrpn_int32 newValue,
312 void encodeLamport(
char **buffer, vrpn_int32 *len, vrpn_int32 newValue,
313 timeval when, vrpn_LamportTimestamp *t)
const;
319 void decode(
const char **buffer, vrpn_int32 *len, vrpn_int32 *newValue,
320 timeval *when)
const;
321 void decodeLamport(
const char **buffer, vrpn_int32 *len,
322 vrpn_int32 *newValue, timeval *when,
323 vrpn_LamportTimestamp **t)
const;
325 int yankCallbacks(vrpn_bool isLocal);
329 vrpn_SerializerPolicy d_policy;
330 vrpnSharedIntSerializerPolicy d_policyCallback;
331 void *d_policyUserdata;
342class VRPN_API vrpn_Shared_int32_Server :
public vrpn_Shared_int32 {
345 vrpn_Shared_int32_Server(
const char *name, vrpn_int32 defaultValue = 0,
346 vrpn_int32 defaultMode = VRPN_SO_DEFAULT);
347 virtual ~vrpn_Shared_int32_Server(
void);
349 vrpn_Shared_int32_Server &operator=(vrpn_int32 newValue);
356class VRPN_API vrpn_Shared_int32_Remote :
public vrpn_Shared_int32 {
359 vrpn_Shared_int32_Remote(
const char *name, vrpn_int32 defaultValue = 0,
360 vrpn_int32 defaultMode = VRPN_SO_DEFAULT);
361 virtual ~vrpn_Shared_int32_Remote(
void);
363 vrpn_Shared_int32_Remote &operator=(vrpn_int32 newValue);
368class VRPN_API vrpn_Shared_float64 :
public vrpn_SharedObject {
371 vrpn_Shared_float64(
const char *name, vrpn_float64 defaultValue = 0.0,
372 vrpn_int32 mode = VRPN_SO_DEFAULT);
373 virtual ~vrpn_Shared_float64(
void);
377 vrpn_float64 value(
void)
const;
378 operator vrpn_float64()
const;
382 vrpn_Shared_float64 &operator=(vrpn_float64 newValue);
385 virtual vrpn_Shared_float64 &set(vrpn_float64 newValue, timeval when);
388 void register_handler(vrpnSharedFloatCallback,
void *);
389 void unregister_handler(vrpnSharedFloatCallback,
void *);
390 void register_handler(vrpnTimedSharedFloatCallback,
void *);
391 void unregister_handler(vrpnTimedSharedFloatCallback,
void *);
396 void setSerializerPolicy(vrpn_SerializerPolicy policy = vrpn_ACCEPT,
397 vrpnSharedFloatSerializerPolicy f = NULL,
398 void *userdata = NULL);
401 vrpn_float64 d_value;
409 vrpnSharedFloatCallback handler;
415 vrpnTimedSharedFloatCallback handler;
421 vrpn_SerializerPolicy d_policy;
422 vrpnSharedFloatSerializerPolicy d_policyCallback;
423 void *d_policyUserdata;
425 vrpn_Shared_float64 &set(vrpn_float64, timeval, vrpn_bool isLocalSet);
427 virtual vrpn_bool shouldAcceptUpdate(vrpn_float64 newValue, timeval when,
428 vrpn_bool isLocalSet);
431 void sendUpdate(vrpn_float64 newValue, timeval when);
432 void encode(
char **buffer, vrpn_int32 *len, vrpn_float64 newValue,
434 void decode(
const char **buffer, vrpn_int32 *len, vrpn_float64 *newValue,
435 timeval *when)
const;
437 int yankCallbacks(vrpn_bool isLocal);
444class VRPN_API vrpn_Shared_float64_Server :
public vrpn_Shared_float64 {
447 vrpn_Shared_float64_Server(
const char *name, vrpn_float64 defaultValue = 0,
448 vrpn_int32 defaultMode = VRPN_SO_DEFAULT);
449 virtual ~vrpn_Shared_float64_Server(
void);
451 vrpn_Shared_float64_Server &operator=(vrpn_float64 newValue);
458class VRPN_API vrpn_Shared_float64_Remote :
public vrpn_Shared_float64 {
461 vrpn_Shared_float64_Remote(
const char *name, vrpn_float64 defaultValue = 0,
462 vrpn_int32 defaultMode = VRPN_SO_DEFAULT);
463 virtual ~vrpn_Shared_float64_Remote(
void);
465 vrpn_Shared_float64_Remote &operator=(vrpn_float64 newValue);
470class VRPN_API vrpn_Shared_String :
public vrpn_SharedObject {
473 vrpn_Shared_String(
const char *name,
const char *defaultValue = NULL,
474 vrpn_int32 mode = VRPN_SO_DEFAULT);
475 virtual ~vrpn_Shared_String(
void);
479 const char *value(
void)
const;
480 operator const char *()
const;
484 vrpn_Shared_String &operator=(
const char *newValue);
487 virtual vrpn_Shared_String &set(
const char *newValue, timeval when);
490 vrpn_bool register_handler(vrpnSharedStringCallback,
void *);
491 void unregister_handler(vrpnSharedStringCallback,
void *);
492 vrpn_bool register_handler(vrpnTimedSharedStringCallback,
void *);
493 void unregister_handler(vrpnTimedSharedStringCallback,
void *);
498 void setSerializerPolicy(vrpn_SerializerPolicy policy = vrpn_ACCEPT,
499 vrpnSharedStringSerializerPolicy f = NULL,
500 void *userdata = NULL);
511 vrpnSharedStringCallback handler;
517 vrpnTimedSharedStringCallback handler;
523 vrpn_SerializerPolicy d_policy;
524 vrpnSharedStringSerializerPolicy d_policyCallback;
525 void *d_policyUserdata;
527 vrpn_Shared_String &set(
const char *, timeval, vrpn_bool isLocalSet);
529 virtual vrpn_bool shouldAcceptUpdate(
const char *newValue, timeval when,
530 vrpn_bool isLocalSet);
533 void sendUpdate(
const char *newValue, timeval when);
534 void encode(
char **buffer, vrpn_int32 *len,
const char *newValue,
536 void decode(
const char **buffer, vrpn_int32 *len,
char *newValue,
537 timeval *when)
const;
539 int yankCallbacks(vrpn_bool isLocal);
546class VRPN_API vrpn_Shared_String_Server :
public vrpn_Shared_String {
549 vrpn_Shared_String_Server(
const char *name,
const char *defaultValue = NULL,
550 vrpn_int32 defaultMode = VRPN_SO_DEFAULT);
551 virtual ~vrpn_Shared_String_Server(
void);
553 vrpn_Shared_String_Server &operator=(
const char *);
560class VRPN_API vrpn_Shared_String_Remote :
public vrpn_Shared_String {
563 vrpn_Shared_String_Remote(
const char *name,
const char *defaultValue = NULL,
564 vrpn_int32 defaultMode = VRPN_SO_DEFAULT);
565 virtual ~vrpn_Shared_String_Remote(
void);
567 vrpn_Shared_String_Remote &operator=(
const char *);
Generic connection class not specific to the transport mechanism.
定义 vrpn_Connection.h:562
定义 vrpn_LamportClock.h:60
定义 vrpn_LamportClock.h:16
int yankDeferredUpdateCallbacks(void)
returns -1 on error (i.e. nonzero return by a callback)
vrpn_bool registerDeferredUpdateCallback(vrpnDeferredUpdateCallback, void *userdata)
vrpn_int32 d_assumeSerializer_type
定义 vrpn_SharedObject.h:185
static int VRPN_CALLBACK handle_update(void *, vrpn_HANDLERPARAM)
vrpn_int32 d_grantSerializer_type
Sent by the serializer to grant a request.
定义 vrpn_SharedObject.h:183
void becomeSerializer(void)
vrpn_int32 d_requestSerializer_type
Sent to the serializer to assume its duties.
定义 vrpn_SharedObject.h:181
vrpn_bool d_isSerializer
default to vrpn_TRUE for servers, FALSE for remotes
定义 vrpn_SharedObject.h:193
virtual void bindConnection(vrpn_Connection *)
int yankCallbacks(vrpn_bool isLocal)
must set d_lastUpdate BEFORE calling yankCallbacks()
void useLamportClock(vrpn_LamportClock *)
vrpn_bool d_isNegotiatingSerializer
定义 vrpn_SharedObject.h:195
static int VRPN_CALLBACK handle_gotConnection(void *, vrpn_HANDLERPARAM)
virtual void sendUpdate(void)=0
Should invoke default sendUpdate() for this derived type.
vrpn_bool d_queueSets
定义 vrpn_SharedObject.h:210
virtual void bindConnection(vrpn_Connection *)
virtual void bindConnection(vrpn_Connection *)
定义 vrpn_SharedObject.h:470
virtual void sendUpdate(void)
Should invoke default sendUpdate() for this derived type.
virtual void bindConnection(vrpn_Connection *)
virtual void bindConnection(vrpn_Connection *)
定义 vrpn_SharedObject.h:368
virtual void sendUpdate(void)
Should invoke default sendUpdate() for this derived type.
virtual void bindConnection(vrpn_Connection *)
virtual void bindConnection(vrpn_Connection *)
定义 vrpn_SharedObject.h:247
virtual void sendUpdate(void)
Should invoke default sendUpdate() for this derived type.
This structure is what is passed to a vrpn_Connection message callback.
定义 vrpn_Connection.h:41
定义 vrpn_SharedObject.h:218
定义 vrpn_SharedObject.h:510
定义 vrpn_SharedObject.h:516
定义 vrpn_SharedObject.h:408
定义 vrpn_SharedObject.h:414
定义 vrpn_SharedObject.h:287
定义 vrpn_SharedObject.h:293