00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef _ZOIDCONTROL_H_
00010 #define _ZOIDCONTROL_H_
00011
00012 #include "zoidcom.h"
00013
00017
00018
00019
00020
00021 class ZCom_Control_Private;
00022 class ZCom_ConnGroupManager;
00023 class ZCom_BitStream;
00024 class ZCom_Address;
00025 class ZCom_Node;
00026
00027
00028
00029
00030
00062 #define ZCOM_CLASSFLAG_ANNOUNCEDATA (1L << 0)
00063
00065
00066
00067
00074 class ZCOM_API ZCom_Control
00075 {
00076 protected:
00077
00078 ZCom_Control_Private *m_priv;
00079
00080
00081
00082 public:
00083 ZCom_Control( void );
00084
00092 virtual ~ZCom_Control( void );
00093
00106 void Shutdown( void );
00107
00114 void
00115 ZCom_setDebugName( const char *_name );
00116
00134 bool
00135 ZCom_initSockets( bool _useudp, zU16 _udpport, zU16 _localport, zU8 _control_id_size = 0);
00136
00157 bool
00158 ZCom_setDiscoverListener( eZCom_DiscoverOpt _opt, zU16 _discoverport );
00159
00174 void
00175 ZCom_setControlID( zU8 _id );
00176
00186 void
00187 ZCom_setUpstreamLimit( zU32 _total_bps, zU32 _perconn_bps );
00188
00198 ZCom_ClassID
00199 ZCom_registerClass( const char *_name , zU32 _class_flags = 0);
00200
00207 ZCom_ClassID
00208 ZCom_getClassID( const char *_name ) const;
00209
00216 void
00217 ZCom_processInput( eZCom_BlockMode _block = eZCom_NoBlock );
00218
00219
00246 void
00247 ZCom_processReplicators( zU32 _simulation_time_passed );
00248
00253 void
00254 ZCom_processOutput();
00255
00263 static ZCom_BitStream*
00264 ZCom_createBitStream();
00265
00272 static void
00273 ZCom_deleteBitStream(ZCom_BitStream* _bs);
00274
00275
00276
00277
00278
00279
00280
00281
00282
00286
00298 ZCom_ConnID
00299 ZCom_Connect( const ZCom_Address &_target, ZCom_BitStream *_request );
00300
00309 void
00310 ZCom_requestDownstreamLimit( ZCom_ConnID _id, zU16 _pps, zU16 _bpp );
00311
00327 bool
00328 ZCom_Discover( const ZCom_Address &_address , ZCom_BitStream *_request);
00329
00339 bool
00340 ZCom_Disconnect( const ZCom_ConnID _id, ZCom_BitStream *_reason );
00341
00349 void
00350 ZCom_disconnectAll( ZCom_BitStream *_reason );
00351
00354 ZCom_ConnGroupManager&
00355 ZCom_getGroupManager();
00356
00376 bool
00377 ZCom_sendData( const ZCom_ConnID _id, ZCom_BitStream *_stream, eZCom_SendMode _mode = eZCom_ReliableOrdered );
00378
00388 bool
00389 ZCom_sendDataToGroup( const ZCom_GroupID _gid, ZCom_BitStream *_stream, eZCom_SendMode _mode );
00390
00405 bool
00406 ZCom_sendDataRaw( ZCom_Address& _dest, void* _data, zU32 _size);
00407
00428 bool
00429 ZCom_requestZoidMode( const ZCom_ConnID _id, zU8 _level );
00430
00432
00433
00434
00439 ZCom_Node*
00440 ZCom_getNode( ZCom_NodeID _nid ) const;
00441
00448 const ZCom_Address*
00449 ZCom_getPeer( ZCom_ConnID _id ) const;
00450
00456 const ZCom_ConnStats&
00457 ZCom_getConnectionStats( ZCom_ConnID _id ) const;
00458
00465 void
00466 ZCom_setUserData( ZCom_ConnID _id, void *_data );
00467
00473 void*
00474 ZCom_getUserData( ZCom_ConnID _id ) const;
00475
00482 static zU32
00483 ZCom_getCurrentTime();
00484
00489
00497 void
00498 ZCom_simulateLag( ZCom_ConnID _id, zU32 _lagmsec );
00499
00507 void
00508 ZCom_simulateLoss( ZCom_ConnID _id, zFloat _amount );
00509
00511
00512
00513
00514
00515
00530
00538 virtual void ZCom_cbConnectResult( ZCom_ConnID _id, eZCom_ConnectResult _result, ZCom_BitStream &_reply ) = 0;
00539
00546 virtual bool ZCom_cbConnectionRequest( ZCom_ConnID _id, ZCom_BitStream &_request, ZCom_BitStream &_reply ) = 0;
00547
00551 virtual void ZCom_cbConnectionSpawned( ZCom_ConnID _id ) = 0;
00552
00558 virtual void ZCom_cbConnectionClosed( ZCom_ConnID _id, eZCom_CloseReason _reason, ZCom_BitStream &_reasondata ) = 0;
00559
00571 virtual bool ZCom_cbZoidRequest( ZCom_ConnID _id, zU8 _requested_level, ZCom_BitStream &_reason ) = 0;
00572
00584 virtual void ZCom_cbZoidResult( ZCom_ConnID _id, eZCom_ZoidResult _result, zU8 _new_level, ZCom_BitStream &_reason ) = 0;
00585
00604 virtual void ZCom_cbNodeRequest_Dynamic( ZCom_ConnID _id, ZCom_ClassID _requested_class, ZCom_BitStream *_announcedata,
00605 eZCom_NodeRole _role, ZCom_NodeID _net_id ) = 0;
00606
00620 virtual void ZCom_cbNodeRequest_Tag( ZCom_ConnID _id, ZCom_ClassID _requested_class, ZCom_BitStream *_announcedata,
00621 eZCom_NodeRole _role, zU32 _tag ) = 0;
00622
00629 virtual void ZCom_cbDataReceived( ZCom_ConnID _id, ZCom_BitStream &_data ) = 0;
00630
00640 virtual bool ZCom_cbDiscoverRequest( const ZCom_Address &_addr, ZCom_BitStream &_request, ZCom_BitStream &_reply) = 0;
00641
00648 virtual void ZCom_cbDiscovered( const ZCom_Address & _addr, ZCom_BitStream &_reply ) = 0;
00650
00651
00652
00653
00654
00655
00656
00657
00658
00659
00660
00661
00662
00663
00664
00665 };
00666
00667
00668 #endif