From 0ea5fc66924303d1bf73ba283a383e2aadee02f2 Mon Sep 17 00:00:00 2001 From: neodarz Date: Sat, 11 Aug 2018 20:21:34 +0200 Subject: Initial commit --- docs/doxygen/nel/a02987.html | 1564 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1564 insertions(+) create mode 100644 docs/doxygen/nel/a02987.html (limited to 'docs/doxygen/nel/a02987.html') diff --git a/docs/doxygen/nel/a02987.html b/docs/doxygen/nel/a02987.html new file mode 100644 index 00000000..a557d799 --- /dev/null +++ b/docs/doxygen/nel/a02987.html @@ -0,0 +1,1564 @@ + + +NeL: NLNET::CNetManager class Reference + + + +
+

NLNET::CNetManager Class Reference

#include <net_manager.h> +

+


Detailed Description

+Layer 4

+In case of addGroup(), messages are *not* associate with id, so the message type is always sent with string.

+

Author:
Vianney Lecroart

+Nevrax France

+
Date:
2001
+ +

+ +

+Definition at line 99 of file net_manager.h. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Static Public Member Functions

void addCallbackArray (const std::string &serviceName, const TCallbackItem *callbackarray, NLMISC::CStringIdArray::TStringId arraysize)
 Adds a callback array to a specific service connection. You can add callback only *after* adding the server, the client or the group.

void addClient (const std::string &serviceName)
 Creates a connection to a service using the naming service and the serviceName.

void addClient (const std::string &serviceName, const std::string &addr, bool autoRetry=true)
 Creates a connection to a specific IP and associate it this a "fake" serviceName (to enable you to send data for example).

void addGroup (const std::string &groupName, const std::string &serviceName)
 Creates connections to a group of service.

void addServer (const std::string &serviceName, uint16 servicePort, NLNET::TServiceId &sid, bool external=false)
void addServer (const std::string &serviceName, uint16 servicePort=0, bool external=false)
void createConnection (CBaseStruct &Base, const CInetAddress &Addr, const std::string &name)
uint64 getBytesReceived ()
uint64 getBytesSent ()
CCallbackNetBasegetNetBase (const std::string &serviceName)
 Returns the connection if you want to do specific calls.

uint64 getReceiveQueueSize ()
uint64 getSendQueueSize ()
NLMISC::CStringIdArraygetSIDA (const std::string &serviceName)
 Use this function to get the String ID Array needed when you want to create a message.

void init (const CInetAddress *addr, CCallbackNetBase::TRecordingState rec)
void release ()
void send (const std::string &serviceName, const CMessage &buffer, TSockId hostid=InvalidSockId)
 Sends a message to a specific serviceName.

void setConnectionCallback (const std::string &serviceName, TNetManagerCallback cb, void *arg)
void setDisconnectionCallback (const std::string &serviceName, TNetManagerCallback cb, void *arg)
void setUpdateTimeout (uint32 timeout)
void update (NLMISC::TTime timeout=0)

Private Types

typedef TBaseMap::iterator ItBaseMap
typedef std::map< std::string,
+ CBaseStruct
TBaseMap

Private Member Functions

 CNetManager ()

Static Private Member Functions

ItBaseMap find (const std::string &serviceName)

Static Private Attributes

TBaseMap _BaseMap
NLMISC::TTime _NextUpdateTime = 0
CCallbackNetBase::TRecordingState _RecordingState

Friends

void RegistrationBroadcast (const std::string &name, TServiceId sid, const std::vector< CInetAddress > &addr)
+


Member Typedef Documentation

+

+ + + + +
+ + +
typedef TBaseMap::iterator NLNET::CNetManager::ItBaseMap [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 171 of file net_manager.h. +

+Referenced by addCallbackArray(), addClient(), addGroup(), addServer(), find(), getBytesReceived(), getBytesSent(), getNetBase(), getReceiveQueueSize(), getSendQueueSize(), getSIDA(), NLNET::RegistrationBroadcast(), release(), send(), setConnectionCallback(), setDisconnectionCallback(), and update().

+

+ + + + +
+ + +
typedef std::map<std::string, CBaseStruct> NLNET::CNetManager::TBaseMap [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 170 of file net_manager.h.

+


Constructor & Destructor Documentation

+

+ + + + +
+ + + + + + + + + +
NLNET::CNetManager::CNetManager  )  [inline, private]
+
+ + + + + +
+   + + +

+ +

+Definition at line 188 of file net_manager.h. +

+

00188 { }
+
+


Member Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
void NLNET::CNetManager::addCallbackArray const std::string &  serviceName,
const TCallbackItem callbackarray,
NLMISC::CStringIdArray::TStringId  arraysize
[static]
+
+ + + + + +
+   + + +

+Adds a callback array to a specific service connection. You can add callback only *after* adding the server, the client or the group. +

+ +

+Definition at line 346 of file net_manager.cpp. +

+References find(), ItBaseMap, nldebug, NLMISC::CStringIdArray::TStringId, and uint32. +

+

00347 {
+00348         nldebug ("HNETL4: addingCallabckArray() for service '%s'", serviceName.c_str ());
+00349         ItBaseMap itbm = find (serviceName);
+00350         for (uint32 i = 0; i < (*itbm).second.NetBase.size(); i++)
+00351         {
+00352 //              if ((*itbm).second.NetBase[i]->connected())
+00353                 (*itbm).second.NetBase[i]->addCallbackArray (callbackarray, arraysize);
+00354         }
+00355 }
+
+

+ + + + +
+ + + + + + + + + + +
void NLNET::CNetManager::addClient const std::string &  serviceName  )  [static]
+
+ + + + + +
+   + + +

+Creates a connection to a service using the naming service and the serviceName. +

+ +

+Definition at line 280 of file net_manager.cpp. +

+References _RecordingState, find(), NLNET::CCallbackClient::getSockId(), ItBaseMap, nlassert, nldebug, and NLNET::nmNewDisconnection(). +

+

00281 {
+00282         nlassert (CNamingClient::connected ());
+00283         nldebug ("HNETL4: Adding client '%s' in CNetManager", serviceName.c_str ());
+00284         ItBaseMap itbm = find (serviceName);
+00285         
+00286         // check if it's a new client
+00287         nlassert ((*itbm).second.NetBase.empty());
+00288 
+00289         CCallbackClient *cc = new CCallbackClient( _RecordingState, serviceName+string(".nmr") ); // ? - would not work if several clients with the same name
+00290         (*itbm).second.NetBase.push_back (cc);
+00291 
+00292         (*itbm).second.Type = CBaseStruct::Client;
+00293 
+00294         cc->CCallbackNetBase::setDisconnectionCallback (nmNewDisconnection, (void*) &((*itbm).second));
+00295 
+00296         // find the service in the naming_service and connect if exists
+00297         if (CNamingClient::lookupAndConnect (serviceName, *cc))
+00298         {
+00299                 // call the user that we are connected
+00300                 if ((*itbm).second.ConnectionCallback != NULL)
+00301                         (*itbm).second.ConnectionCallback (serviceName, cc->getSockId(), (*itbm).second.ConnectionCbArg);
+00302         }
+00303 }
+
+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
void NLNET::CNetManager::addClient const std::string &  serviceName,
const std::string &  addr,
bool  autoRetry = true
[static]
+
+ + + + + +
+   + + +

+Creates a connection to a specific IP and associate it this a "fake" serviceName (to enable you to send data for example). +

+ +

+Definition at line 256 of file net_manager.cpp. +

+References addr, createConnection(), find(), ItBaseMap, nlassert, and nldebug. +

+

00257 {
+00258         nldebug ("HNETL4: Adding client '%s' with addr '%s' in CNetManager", serviceName.c_str (), addr.c_str());
+00259         ItBaseMap itbm = find (serviceName);
+00260         
+00261         // it's a new client, add the connection
+00262         (*itbm).second.Type = CBaseStruct::ClientWithAddr;
+00263         (*itbm).second.AutoRetry = autoRetry;
+00264 
+00265         if ((*itbm).second.ServiceNames.empty())
+00266         {
+00267                 (*itbm).second.ServiceNames.push_back(addr);
+00268         }
+00269         else
+00270         {
+00271                 (*itbm).second.ServiceNames[0] = addr;
+00272         }
+00273 
+00274         nlassert ((*itbm).second.NetBase.size() < 2);
+00275 
+00276         createConnection ((*itbm).second, addr, serviceName);
+00277 }
+
+

+ + + + +
+ + + + + + + + + + + + + + + + + + + +
void NLNET::CNetManager::addGroup const std::string &  groupName,
const std::string &  serviceName
[static]
+
+ + + + + +
+   + + +

+Creates connections to a group of service. +

+ +

+Definition at line 307 of file net_manager.cpp. +

+References createConnection(), find(), ItBaseMap, nlassert, nldebug, and uint. +

+

00308 {
+00309         nlassert (CNamingClient::connected ());
+00310         nldebug ("HNETL4: Adding '%s' to group '%s' in CNetManager", serviceName.c_str (), groupName.c_str());
+00311         ItBaseMap itbm = find (groupName);
+00312 
+00313         (*itbm).second.Type = CBaseStruct::Group;
+00314 
+00315         // check if you don't already add this service in this group
+00316         vector<string>::iterator it = std::find ((*itbm).second.ServiceNames.begin(), (*itbm).second.ServiceNames.end(), serviceName);
+00317         nlassert (it == (*itbm).second.ServiceNames.end());
+00318 
+00319         (*itbm).second.ServiceNames.push_back(serviceName);
+00320 
+00321 
+00322         // find the service in the naming_service and connect if exists
+00323         vector<CInetAddress> addrs;
+00324         CNamingClient::lookupAll (serviceName, addrs);
+00325 
+00326         // connect to all these services
+00327         for (uint i = 0; i < addrs.size (); i++)
+00328         {
+00329                 createConnection ((*itbm).second, addrs[i], serviceName);
+00330         }
+00331 }
+
+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void NLNET::CNetManager::addServer const std::string &  serviceName,
uint16  servicePort,
NLNET::TServiceId sid,
bool  external = false
[static]
+
+ + + + + +
+   + + +

+ +

+Definition at line 207 of file net_manager.cpp. +

+References _RecordingState, addr, find(), NLNET::CBufServer::init(), ItBaseMap, nlassert, nldebug, nlinfo, NLNET::nmNewConnection(), NLNET::nmNewDisconnection(), NLNET::CCallbackServer::setConnectionCallback(), NLNET::TServiceId, uint, and uint16. +

+

00208 {
+00209         nldebug ("HNETL4: Adding server '%s' in CNetManager", serviceName.c_str ());
+00210         ItBaseMap itbm = find (serviceName);
+00211 
+00212         // check if it's a new server
+00213         nlassert ((*itbm).second.NetBase.empty());
+00214         
+00215         CCallbackServer *cs = new CCallbackServer( _RecordingState, serviceName+string(".nmr") );
+00216         (*itbm).second.NetBase.push_back (cs);
+00217 
+00218         (*itbm).second.Type = CBaseStruct::Server;
+00219 
+00220         // install the server
+00221         
+00222         cs->setConnectionCallback (nmNewConnection, (void*) &((*itbm).second));
+00223         cs->CCallbackNetBase::setDisconnectionCallback (nmNewDisconnection, (void*) &((*itbm).second));
+00224 
+00225         if (servicePort == 0)
+00226         {
+00227                 nlassert (CNamingClient::connected ());
+00228                 servicePort = CNamingClient::queryServicePort ();
+00229         }
+00230 
+00231         cs->init (servicePort);
+00232 
+00233         // register the server to the naming service if we are connected to Naming Service
+00234 
+00235         if (CNamingClient::connected () && !external)
+00236         {
+00237                 //CInetAddress addr = CInetAddress::localHost ();
+00238                 //addr.setPort (servicePort);
+00239                 vector<CInetAddress> addr = CInetAddress::localAddresses();
+00240                 for (uint i = 0; i < addr.size(); i++)
+00241                         addr[i].setPort(servicePort);
+00242 
+00243                 if (sid == 0)
+00244                 {
+00245                         CNamingClient::registerService (serviceName, addr, sid);
+00246                 }
+00247                 else
+00248                 {
+00249                         CNamingClient::registerServiceWithSId (serviceName, addr, sid);
+00250                 }
+00251         }
+00252         nlinfo ("HNETL4: Server '%s' added, registered and listen to port %hu", serviceName.c_str (), servicePort);
+00253 }
+
+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
void NLNET::CNetManager::addServer const std::string &  serviceName,
uint16  servicePort = 0,
bool  external = false
[static]
+
+ + + + + +
+   + + +

+Sets up a server on a specific port with a specific service name (create a listen socket, register to naming service and so on) If servicePort is 0, it will be dynamically determinated by the Naming Service. If sid id 0, the service id will be dynamically determinated by the Naming Service. +

+Definition at line 201 of file net_manager.cpp. +

+References NLNET::TServiceId, and uint16. +

+

00202 {
+00203         TServiceId sid = 0;
+00204         addServer (serviceName, servicePort, sid, external);
+00205 }
+
+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
void NLNET::CNetManager::createConnection CBaseStruct Base,
const CInetAddress Addr,
const std::string &  name
[static]
+
+ + + + + +
+   + + +

+ +

+Definition at line 97 of file net_manager.cpp. +

+References _RecordingState, NLNET::CCallbackClient::connect(), NLNET::CCallbackClient::getSockId(), NLNET::CBaseStruct::NetBase, nlinfo, NLNET::nmNewDisconnection(), and uint. +

+Referenced by addClient(), and addGroup(). +

+

00098 {
+00099         uint i;
+00100         for (i = 0; i < Base.NetBase.size (); i++)
+00101         {
+00102                 if (!Base.NetBase[i]->connected ())
+00103                 {
+00104                         break;
+00105                 }
+00106         }
+00107         if (i == Base.NetBase.size ())
+00108         {
+00109                 CCallbackClient *cc = new CCallbackClient( _RecordingState, name+string(".nmr") );
+00110                 Base.NetBase.push_back (cc);
+00111         }
+00112         
+00113         CCallbackClient *cc = dynamic_cast<CCallbackClient *>(Base.NetBase[i]);
+00114 
+00115         cc->CCallbackNetBase::setDisconnectionCallback (nmNewDisconnection, (void*) &Base);
+00116 
+00117         try
+00118         {
+00119                 cc->connect (Addr);
+00120 
+00121                 if (Base.ConnectionCallback != NULL)
+00122                         Base.ConnectionCallback (Base.Name, cc->getSockId(), Base.ConnectionCbArg);
+00123         }
+00124         catch (ESocketConnectionFailed &e)
+00125         {
+00126                 nlinfo ("HNETL4: can't connect now (%s)", e.what ());
+00127         }
+00128 }
+
+

+ + + + +
+ + + + + + + + + + +
CNetManager::ItBaseMap NLNET::CNetManager::find const std::string &  serviceName  )  [static, private]
+
+ + + + + +
+   + + +

+ +

+Definition at line 489 of file net_manager.cpp. +

+References _BaseMap, and ItBaseMap. +

+Referenced by addCallbackArray(), addClient(), addGroup(), addServer(), getNetBase(), getSIDA(), send(), setConnectionCallback(), and setDisconnectionCallback(). +

+

00490 {
+00491         // find the service or add it if not found
+00492         pair<ItBaseMap, bool> p;
+00493         p = _BaseMap.insert (make_pair (serviceName, CBaseStruct (serviceName)));
+00494         return p.first;
+00495 }
+
+

+ + + + +
+ + + + + + + + + +
uint64 NLNET::CNetManager::getBytesReceived  )  [static]
+
+ + + + + +
+   + + +

+ +

+Definition at line 510 of file net_manager.cpp. +

+References _BaseMap, ItBaseMap, uint32, and uint64. +

+

00511 {
+00512         uint64 received = 0;
+00513         for (ItBaseMap itbm = _BaseMap.begin (); itbm != _BaseMap.end (); itbm++)
+00514         {
+00515                 for (uint32 i = 0; i < (*itbm).second.NetBase.size(); i++)
+00516                 {
+00517                         received += (*itbm).second.NetBase[i]->getBytesReceived ();
+00518                 }
+00519         }
+00520         return received;
+00521 }
+
+

+ + + + +
+ + + + + + + + + +
uint64 NLNET::CNetManager::getBytesSent  )  [static]
+
+ + + + + +
+   + + +

+ +

+Definition at line 497 of file net_manager.cpp. +

+References _BaseMap, ItBaseMap, uint32, and uint64. +

+

00498 {
+00499         uint64 sent = 0;
+00500         for (ItBaseMap itbm = _BaseMap.begin (); itbm != _BaseMap.end (); itbm++)
+00501         {
+00502                 for (uint32 i = 0; i < (*itbm).second.NetBase.size(); i++)
+00503                 {
+00504                         sent += (*itbm).second.NetBase[i]->getBytesSent ();
+00505                 }
+00506         }
+00507         return sent;
+00508 }
+
+

+ + + + +
+ + + + + + + + + + +
CCallbackNetBase * NLNET::CNetManager::getNetBase const std::string &  serviceName  )  [static]
+
+ + + + + +
+   + + +

+Returns the connection if you want to do specific calls. +

+ +

+Definition at line 466 of file net_manager.cpp. +

+References find(), and ItBaseMap. +

+

00467 {
+00468         ItBaseMap itbm = find (serviceName);
+00469         return (*itbm).second.NetBase[0];
+00470 }
+
+

+ + + + +
+ + + + + + + + + +
uint64 NLNET::CNetManager::getReceiveQueueSize  )  [static]
+
+ + + + + +
+   + + +

+ +

+Definition at line 536 of file net_manager.cpp. +

+References _BaseMap, ItBaseMap, uint32, and uint64. +

+

00537 {
+00538         uint64 val = 0;
+00539         for (ItBaseMap itbm = _BaseMap.begin (); itbm != _BaseMap.end (); itbm++)
+00540         {
+00541                 for (uint32 i = 0; i < (*itbm).second.NetBase.size(); i++)
+00542                 {
+00543                         val += (*itbm).second.NetBase[i]->getReceiveQueueSize ();
+00544                 }
+00545         }
+00546         return val;
+00547 }
+
+

+ + + + +
+ + + + + + + + + +
uint64 NLNET::CNetManager::getSendQueueSize  )  [static]
+
+ + + + + +
+   + + +

+ +

+Definition at line 523 of file net_manager.cpp. +

+References _BaseMap, ItBaseMap, uint32, and uint64. +

+

00524 {
+00525         uint64 val = 0;
+00526         for (ItBaseMap itbm = _BaseMap.begin (); itbm != _BaseMap.end (); itbm++)
+00527         {
+00528                 for (uint32 i = 0; i < (*itbm).second.NetBase.size(); i++)
+00529                 {
+00530                         val += (*itbm).second.NetBase[i]->getSendQueueSize ();
+00531                 }
+00532         }
+00533         return val;
+00534 }
+
+

+ + + + +
+ + + + + + + + + + +
NLMISC::CStringIdArray & NLNET::CNetManager::getSIDA const std::string &  serviceName  )  [static]
+
+ + + + + +
+   + + +

+Use this function to get the String ID Array needed when you want to create a message. +

+ +

+Definition at line 335 of file net_manager.cpp. +

+References find(), ItBaseMap, nlassert, and nldebug. +

+

00336 {
+00337         nldebug ("HNETL4: getSIDA() for service '%s'", serviceName.c_str ());
+00338         ItBaseMap itbm = find (serviceName);
+00339 
+00340         // in case of group, we can return association only if there s only one service on it
+00341         nlassert ((*itbm).second.NetBase.size() == 1);
+00342 
+00343         return (*itbm).second.NetBase[0]->getSIDA ();
+00344 }
+
+

+ + + + +
+ + + + + + + + + + + + + + + + + + + +
void NLNET::CNetManager::init const CInetAddress addr,
CCallbackNetBase::TRecordingState  rec
[static]
+
+ + + + + +
+   + + +

+Creates the connection to the Naming Service. If the connection failed, ESocketConnectionFailed exception is generated. +

+Definition at line 169 of file net_manager.cpp. +

+References _RecordingState, addr, NLNET::RegistrationBroadcast(), and NLNET::UnregistrationBroadcast(). +

+

00170 {
+00171         if (addr == NULL) return;
+00172 
+00173         _RecordingState = rec;
+00174 
+00175         // connect to the naming service (may generate a ESocketConnectionFailed exception)
+00176 
+00177         vector<CInetAddress> laddr = CInetAddress::localAddresses();
+00178         CNamingClient::connect( *addr, _RecordingState, laddr );
+00179 
+00180         // connect the callback to know when a new service comes in or goes down
+00181         CNamingClient::setRegistrationBroadcastCallback (RegistrationBroadcast);
+00182         CNamingClient::setUnregistrationBroadcastCallback (UnregistrationBroadcast);
+00183 }
+
+

+ + + + +
+ + + + + + + + + +
void NLNET::CNetManager::release  )  [static]
+
+ + + + + +
+   + + +

+ +

+Definition at line 185 of file net_manager.cpp. +

+References _BaseMap, ItBaseMap, and uint32. +

+

00186 {
+00187         if (CNamingClient::connected ())
+00188                 CNamingClient::disconnect ();
+00189 
+00190         for (ItBaseMap itbm = _BaseMap.begin (); itbm != _BaseMap.end (); itbm++)
+00191         {
+00192                 for (uint32 i = 0; i < (*itbm).second.NetBase.size(); i++)
+00193                 {
+00194                         (*itbm).second.NetBase[i]->disconnect ();
+00195                         delete (*itbm).second.NetBase[i];
+00196                 }
+00197         }
+00198         _BaseMap.clear ();
+00199 }
+
+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
void NLNET::CNetManager::send const std::string &  serviceName,
const CMessage buffer,
TSockId  hostid = InvalidSockId
[static]
+
+ + + + + +
+   + + +

+Sends a message to a specific serviceName. +

+ +

+Definition at line 455 of file net_manager.cpp. +

+References NLNET::CBufSock::asString(), buffer, find(), ItBaseMap, nldebug, NLNET::TSockId, and uint32. +

+

00456 {
+00457         nldebug ("HNETL4: send for service '%s' message %s to %s", serviceName.c_str(), buffer.toString().c_str(), hostid->asString().c_str());
+00458         ItBaseMap itbm = find (serviceName);
+00459         for (uint32 i = 0; i < (*itbm).second.NetBase.size(); i++)
+00460         {
+00461                 if ((*itbm).second.NetBase[i]->connected())
+00462                         (*itbm).second.NetBase[i]->send (buffer, hostid);
+00463         }
+00464 }
+
+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
void NLNET::CNetManager::setConnectionCallback const std::string &  serviceName,
TNetManagerCallback  cb,
void *  arg
[static]
+
+ + + + + +
+   + + +

+Sets callback for incoming connections (or NULL to disable callback) On a client, the callback will be call when the connection to the server is established (the first connection or after the server shutdown and started) On a server, the callback is called each time a new client is connected to him +

+Definition at line 472 of file net_manager.cpp. +

+References find(), ItBaseMap, nldebug, and NLNET::TNetManagerCallback. +

+

00473 {
+00474         nldebug ("HNETL4: setConnectionCallback() for service '%s'", serviceName.c_str ());
+00475         ItBaseMap itbm = find (serviceName);
+00476         (*itbm).second.ConnectionCallback = cb;
+00477         (*itbm).second.ConnectionCbArg = arg;
+00478 }
+
+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
void NLNET::CNetManager::setDisconnectionCallback const std::string &  serviceName,
TNetManagerCallback  cb,
void *  arg
[static]
+
+ + + + + +
+   + + +

+Sets callback for disconnections (or NULL to disable callback) On a client, the callback will be call each time the connection to the server is lost On a server, the callback is called each time a client is disconnected +

+Definition at line 480 of file net_manager.cpp. +

+References find(), ItBaseMap, nldebug, and NLNET::TNetManagerCallback. +

+

00481 {
+00482         nldebug ("HNETL4: setDisconnectionCallback() for service '%s'", serviceName.c_str ());
+00483         ItBaseMap itbm = find (serviceName);
+00484         (*itbm).second.DisconnectionCallback = cb;
+00485         (*itbm).second.DisconnectionCbArg = arg;
+00486 }
+
+

+ + + + +
+ + + + + + + + + + +
void NLNET::CNetManager::setUpdateTimeout uint32  timeout  )  [static]
+
+ + + + + +
+   + + +

+

+

+ + + + +
+ + + + + + + + + + +
void NLNET::CNetManager::update NLMISC::TTime  timeout = 0  )  [static]
+
+ + + + + +
+   + + +

+Call it evenly. the parameter select the timeout value in milliseconds for each update. You are absolutely certain that this function will not be returns before this amount of time you set. If you set the update timeout value higher than 0, all messages in queues will be process until the time is greater than the timeout user update(). If you set the update timeout value to 0, all messages in queues will be process one time before calling the user update(). In this case, we don't nlSleep(1). +

+

Todo:
ace: update() only when connected () but cado must fix the problem before because if we don't update when we are not connected, we don't receive the disconnection
+ +

+Definition at line 357 of file net_manager.cpp. +

+References _BaseMap, _NextUpdateTime, NLNET::CCallbackClient::connect(), NLNET::CCallbackClient::getSockId(), ItBaseMap, nlassert, nlinfo, NLMISC::nlSleep(), NLMISC::TTime, and uint32. +

+

00358 {
+00359 //      nldebug ("HNETL4: update()");
+00360 
+00361 //      sint64 p1 = CTime::getPerformanceTime ();
+00362 
+00363         TTime t0 = CTime::getLocalTime ();
+00364 
+00365         if (timeout > 0)
+00366         {
+00367                 if (_NextUpdateTime == 0)
+00368                 {
+00369                         _NextUpdateTime = t0 + timeout;
+00370                 }
+00371                 else
+00372                 {
+00373                         TTime err = t0 - _NextUpdateTime;
+00374                         _NextUpdateTime += timeout;
+00375 
+00376                         // if we are too late, resync to the next value
+00377                         while (err > timeout)
+00378                         {
+00379                                 err -= timeout;
+00380                                 _NextUpdateTime += timeout;
+00381                         }
+00382                         
+00383                         timeout -= err;
+00384                         if (timeout < 0) timeout = 0;
+00385                 }
+00386         }
+00387         
+00388 //      sint64 p2 = CTime::getPerformanceTime ();
+00389 
+00390         while (true)
+00391         {
+00392                 for (ItBaseMap itbm = _BaseMap.begin (); itbm != _BaseMap.end (); itbm++)
+00393                 {
+00394                         for (uint32 i = 0; i < (*itbm).second.NetBase.size(); i++)
+00395                         {
+00397                                 // we get and treat all messages in this connection
+00398                                 (*itbm).second.NetBase[i]->update (0);
+00399                                 if ((*itbm).second.NetBase[i]->connected())
+00400                                 {
+00401                                         // if connected, update
+00402 //                                      (*itbm).second.NetBase[i]->update ();
+00403                                 }
+00404                                 else
+00405                                 {
+00406                                         static TTime lastTime = CTime::getLocalTime();
+00407                                         if (CTime::getLocalTime() - lastTime > 5000)
+00408                                         {
+00409                                                 lastTime = CTime::getLocalTime();
+00410 
+00411                                                 // if not connected, try to connect ClientWithAddr
+00412                                                 if ((*itbm).second.Type == CBaseStruct::ClientWithAddr && (*itbm).second.AutoRetry)
+00413                                                 {
+00414                                                         CCallbackClient *cc = dynamic_cast<CCallbackClient *>((*itbm).second.NetBase[i]);
+00415                                                         try
+00416                                                         {
+00417                                                                 nlassert ((*itbm).second.ServiceNames.size()==1);
+00418                                                                 cc->connect (CInetAddress((*itbm).second.ServiceNames[0]));
+00419 
+00420                                                                 if ((*itbm).second.ConnectionCallback != NULL)
+00421                                                                         (*itbm).second.ConnectionCallback ((*itbm).second.Name, cc->getSockId(), (*itbm).second.ConnectionCbArg);
+00422                                                         }
+00423                                                         catch (ESocketConnectionFailed &e)
+00424                                                         {
+00425                                                                 // can't connect now, try later
+00426                                                                 nlinfo("HNETL4: can't connect now to %s (reason: %s)", (*itbm).second.ServiceNames[0].c_str(), e.what());
+00427                                                         }
+00428                                                 }
+00429                                         }
+00430                                 }       
+00431                         }
+00432                 }
+00433 
+00434                 // If it's the end, don't nlSleep()
+00435                 if (CTime::getLocalTime() - t0 > timeout)
+00436                         break;
+00437                 
+00438                 // Enable windows multithreading before rescanning all connections
+00439                 // slow down the layer H_BEFORE (CNetManager_update_nlSleep);
+00440                 nlSleep (1);
+00441                 // slow down the layer H_AFTER (CNetManager_update_nlSleep);
+00442         }
+00443 
+00444 //      sint64 p3 = CTime::getPerformanceTime ();
+00445 
+00446         if (CNamingClient::connected ())
+00447                 CNamingClient::update ();
+00448 
+00449 //      sint64 p4 = CTime::getPerformanceTime ();
+00450 
+00451 //      nlinfo("time : %f %f %f %d", CTime::ticksToSecond(p2-p1), CTime::ticksToSecond(p3-p2), CTime::ticksToSecond(p4-p3), timeout);
+00452 }
+
+


Friends And Related Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
void RegistrationBroadcast const std::string &  name,
TServiceId  sid,
const std::vector< CInetAddress > &  addr
[friend]
+
+ + + + + +
+   + + +

+

+


Field Documentation

+

+ + + + +
+ + +
CNetManager::TBaseMap NLNET::CNetManager::_BaseMap [static, private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 56 of file net_manager.cpp. +

+Referenced by find(), getBytesReceived(), getBytesSent(), getReceiveQueueSize(), getSendQueueSize(), release(), and update().

+

+ + + + +
+ + +
TTime NLNET::CNetManager::_NextUpdateTime = 0 [static, private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 60 of file net_manager.cpp. +

+Referenced by update().

+

+ + + + +
+ + +
CCallbackNetBase::TRecordingState NLNET::CNetManager::_RecordingState [static, private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 58 of file net_manager.cpp. +

+Referenced by addClient(), addServer(), createConnection(), and init().

+


The documentation for this class was generated from the following files: +
Generated on Tue Mar 16 14:01:48 2004 for NeL by + +doxygen +1.3.6
+ + -- cgit v1.2.1