#include <eid_translator.h>
Public Member Functions | |
void | checkEntity (const CEntityId &eid, const ucstring &entityName, uint32 uid, const std::string &userName) |
bool | entityNameExists (const ucstring &entityName, bool acceptBlanks=false) |
void | getByEntity (const ucstring &entityName, std::vector< NLMISC::CEntityId > &res, bool exact) |
CEntityId | getByEntity (const ucstring &entityName) |
ucstring | getByEntity (const NLMISC::CEntityId &eid) |
void | getByUser (const std::string &userName, std::vector< NLMISC::CEntityId > &res, bool exact=true) |
void | getByUser (uint32 uid, std::vector< NLMISC::CEntityId > &res) |
void | getEntityIdInfo (const CEntityId &eid, ucstring &entityName, sint8 &entitySlot, uint32 &uid, std::string &userName, bool &online) |
uint32 | getEntityNameStringId (const CEntityId &eid) |
const std::map< NLMISC::CEntityId, CEntity > & | getRegisteredEntities () |
uint32 | getUId (const std::string &userName) |
std::string | getUserName (uint32 uid) |
bool | isEntityOnline (const CEntityId &eid) |
bool | isValidEntityName (const ucstring &entityName, NLMISC::CLog *log=NLMISC::InfoLog, bool acceptBlanks=false) |
void | load (const std::string &fileName, const std::string &invalidEntityNamesFilename) |
void | registerEntity (const CEntityId &eid, const ucstring &entityName, sint8 entitySlot, uint32 uid, const std::string &userName) |
bool | setEntityNameStringId (const ucstring &entityName, uint32 stringId) |
void | setEntityOnline (const CEntityId &eid, bool online) |
void | unregisterEntity (const CEntityId &eid) |
Static Public Member Functions | |
CEntityIdTranslator * | getInstance () |
Data Fields | |
uint | FileVersion |
Static Public Attributes | |
const uint | Version = 1 |
Private Types | |
typedef std::map< NLMISC::CEntityId, CEntity >::iterator | reit |
Private Member Functions | |
CEntityIdTranslator () | |
std::string | getRegisterableString (const ucstring &entityName, bool removeBlanks=false) |
void | save () |
Private Attributes | |
std::string | FileName |
std::vector< std::string > | InvalidEntityNames |
std::map< NLMISC::CEntityId, CEntity > | RegisteredEntities |
Static Private Attributes | |
CEntityIdTranslator * | Instance = NULL |
Friends | |
void | cbInvalidEntityNamesFilename (const std::string &filename) |
struct | entityNameValidClass |
|
Definition at line 120 of file eid_translator.h. Referenced by entityNameExists(), getByEntity(), getByUser(), getEntityIdInfo(), getEntityNameStringId(), getUId(), getUserName(), isEntityOnline(), setEntityNameStringId(), setEntityOnline(), and unregisterEntity(). |
|
Definition at line 125 of file eid_translator.h.
00125 { } |
|
Definition at line 313 of file eid_translator.cpp. References entityNameExists(), getByEntity(), nlinfo, nlwarning, RegisteredEntities, save(), NLMISC::CEntityId::setCreatorId(), NLMISC::CEntityId::setDynamicId(), NLMISC::toString(), ucstring::toString(), NLMISC::CEntityId::toString(), and uint32.
00314 { 00315 // we have to remove the crea and dyna because it can changed dynamically and will not be found in the storage array 00316 CEntityId reid(eid); 00317 reid.setCreatorId(0); 00318 reid.setDynamicId(0); 00319 00320 map<CEntityId, CEntityIdTranslator::CEntity>::iterator it = RegisteredEntities.find (reid); 00321 bool needSave = false; 00322 00323 nlinfo ("EIT: Checking EId %s EntityName '%s' UId %d UserName '%s'", reid.toString().c_str(), entityName.toString().c_str(), uid, userName.c_str()); 00324 00325 if (it == RegisteredEntities.end ()) 00326 { 00327 nlwarning ("EIT: Check failed because EId is not in the CEntityIdTranslator map for EId %s EntityName '%s' UId %d UserName '%s'", reid.toString().c_str(), entityName.toString().c_str(), uid, userName.c_str()); 00328 00329 if (entityNameExists(entityName)) 00330 { 00331 nlwarning ("EIT: Check failed because entity name already exist (%s) for EId %s EntityName '%s' UId %d UserName '%s'", getByEntity(entityName).toString().c_str(), reid.toString().c_str(), entityName.toString().c_str(), uid, userName.c_str()); 00332 } 00333 } 00334 else 00335 { 00336 if ((*it).second.EntityName != entityName) 00337 { 00338 nlwarning ("EIT: Check failed because entity name not identical (%s) in the CEntityIdTranslator map for EId %s EntityName '%s' UId %d UserName '%s'", (*it).second.EntityName.toString().c_str(), reid.toString().c_str(), entityName.toString().c_str(), uid, userName.c_str()); 00339 if(!entityName.empty()) 00340 { 00341 (*it).second.EntityName = entityName; 00342 needSave = true; 00343 } 00344 } 00345 if ((*it).second.UId != uid) 00346 { 00347 nlwarning ("EIT: Check failed because uid not identical (%d) in the CEntityIdTranslator map for EId %s EntityName '%s' UId %d UserName '%s'", (*it).second.UId, reid.toString().c_str(), entityName.toString().c_str(), uid, userName.c_str()); 00348 if (uid != 0) 00349 { 00350 (*it).second.UId = uid; 00351 needSave = true; 00352 } 00353 } 00354 if ((*it).second.UserName != userName) 00355 { 00356 nlwarning ("EIT: Check failed because user name not identical (%s) in the CEntityIdTranslator map for EId %s EntityName '%s' UId %d UserName '%s'", (*it).second.UserName.c_str(), reid.toString().c_str(), entityName.toString().c_str(), uid, userName.c_str()); 00357 if(!userName.empty()) 00358 { 00359 (*it).second.UserName = userName; 00360 needSave = true; 00361 } 00362 } 00363 } 00364 00365 if (needSave) 00366 save (); 00367 } |
|
Definition at line 249 of file eid_translator.cpp. References getRegisterableString(), isValidEntityName(), RegisteredEntities, and reit. Referenced by checkEntity(), NLMISC::NLMISC_COMMAND(), and registerEntity().
00250 { 00251 // if bad name, don't accept it 00252 if (!isValidEntityName (entityName,NLMISC::InfoLog,acceptBlanks)) return true; 00253 00254 // Names are stored in case dependant, so we have to test them without case. 00255 string registerable = getRegisterableString (entityName); 00256 00257 for (reit it = RegisteredEntities.begin(); it != RegisteredEntities.end(); it++) 00258 { 00259 if (getRegisterableString ((*it).second.EntityName) == registerable) 00260 { 00261 return true; 00262 } 00263 } 00264 return false; 00265 } |
|
Definition at line 154 of file eid_translator.cpp. References RegisteredEntities, reit, res, NLMISC::strlwr(), and ucstring::toString().
00155 { 00156 string lowerName = strlwr (entityName.toString()); 00157 00158 for (reit it = RegisteredEntities.begin(); it != RegisteredEntities.end(); ++it) 00159 { 00160 if (exact) 00161 { 00162 if (strlwr((*it).second.EntityName.toString()) == lowerName) 00163 { 00164 res.push_back((*it).first); 00165 } 00166 } 00167 else 00168 { 00169 if (strlwr((*it).second.EntityName.toString()).find(lowerName) != string::npos) 00170 { 00171 res.push_back((*it).first); 00172 } 00173 } 00174 } 00175 } |
|
Definition at line 144 of file eid_translator.cpp. References getByEntity(), and res.
00145 { 00146 vector<CEntityId> res; 00147 getByEntity (entityName, res, true); 00148 if (res.empty()) 00149 return CEntityId::Unknown; 00150 else 00151 return res[0]; 00152 } |
|
Definition at line 126 of file eid_translator.cpp. References RegisteredEntities, reit, NLMISC::CEntityId::setCreatorId(), and NLMISC::CEntityId::setDynamicId(). Referenced by checkEntity(), getByEntity(), and NLMISC::NLMISC_COMMAND().
00127 { 00128 // we have to remove the crea and dyna because it can changed dynamically and will not be found in the storage array 00129 CEntityId reid(eid); 00130 reid.setCreatorId(0); 00131 reid.setDynamicId(0); 00132 00133 reit it = RegisteredEntities.find (reid); 00134 if (it == RegisteredEntities.end ()) 00135 { 00136 return ucstring(""); 00137 } 00138 else 00139 { 00140 return (*it).second.EntityName; 00141 } 00142 } |
|
Definition at line 103 of file eid_translator.cpp. References RegisteredEntities, reit, res, and NLMISC::strlwr().
00104 { 00105 string lowerName = strlwr (userName); 00106 00107 for (reit it = RegisteredEntities.begin(); it != RegisteredEntities.end(); it++) 00108 { 00109 if (exact) 00110 { 00111 if (strlwr((*it).second.UserName) == lowerName) 00112 { 00113 res.push_back((*it).first); 00114 } 00115 } 00116 else 00117 { 00118 if (strlwr((*it).second.UserName).find(lowerName) != string::npos) 00119 { 00120 res.push_back((*it).first); 00121 } 00122 } 00123 } 00124 } |
|
Definition at line 92 of file eid_translator.cpp. References RegisteredEntities, reit, res, and uint32. Referenced by NLMISC::NLMISC_COMMAND().
00093 { 00094 for (reit it = RegisteredEntities.begin(); it != RegisteredEntities.end(); it++) 00095 { 00096 if ((*it).second.UId == uid) 00097 { 00098 res.push_back((*it).first); 00099 } 00100 } 00101 } |
|
Definition at line 493 of file eid_translator.cpp. References nlwarning, RegisteredEntities, reit, NLMISC::CEntityId::setCreatorId(), NLMISC::CEntityId::setDynamicId(), sint8, NLMISC::CEntityId::toString(), and uint32. Referenced by NLMISC::NLMISC_COMMAND().
00494 { 00495 // we have to remove the crea and dyna because it can changed dynamically and will not be found in the storage array 00496 CEntityId reid(eid); 00497 reid.setCreatorId(0); 00498 reid.setDynamicId(0); 00499 00500 reit it = RegisteredEntities.find (reid); 00501 if (it == RegisteredEntities.end ()) 00502 { 00503 nlwarning ("EIT: %s is not registered in CEntityIdTranslator", reid.toString().c_str()); 00504 entityName = ""; 00505 entitySlot = -1; 00506 uid = ~0; 00507 userName = ""; 00508 online = false; 00509 } 00510 else 00511 { 00512 entityName = (*it).second.EntityName; 00513 entitySlot = (*it).second.EntitySlot; 00514 uid = (*it).second.UId; 00515 userName = (*it).second.UserName; 00516 online = (*it).second.Online; 00517 } 00518 } |
|
Definition at line 535 of file eid_translator.cpp. References RegisteredEntities, reit, NLMISC::CEntityId::setCreatorId(), NLMISC::CEntityId::setDynamicId(), and uint32.
00536 { 00537 // we have to remove the crea and dyna because it can changed dynamically and will not be found in the storage array 00538 CEntityId reid(eid); 00539 reid.setCreatorId(0); 00540 reid.setDynamicId(0); 00541 00542 const reit it = RegisteredEntities.find (reid); 00543 if (it == RegisteredEntities.end ()) 00544 { 00545 return 0; 00546 } 00547 else 00548 { 00549 return (*it).second.EntityNameStringId; 00550 } 00551 } |
|
Definition at line 83 of file eid_translator.cpp.
00084 { 00085 if(Instance == NULL) 00086 { 00087 Instance = new CEntityIdTranslator; 00088 } 00089 return Instance; 00090 } |
|
Definition at line 590 of file eid_translator.cpp. References NLMISC::strlwr(), ucstring::toString(), and uint. Referenced by entityNameExists(), and isValidEntityName().
|
|
Definition at line 112 of file eid_translator.h. References RegisteredEntities. Referenced by NLMISC::NLMISC_COMMAND().
00112 { return RegisteredEntities; } |
|
Definition at line 467 of file eid_translator.cpp. References RegisteredEntities, reit, and uint32. Referenced by NLMISC::NLMISC_COMMAND().
00468 { 00469 const reit itEnd = RegisteredEntities.end(); 00470 for (reit it = RegisteredEntities.begin(); it != itEnd ; ++it) 00471 { 00472 if ((*it).second.UserName == userName) 00473 { 00474 return (*it).second.UId; 00475 } 00476 } 00477 return 0; 00478 } |
|
Definition at line 480 of file eid_translator.cpp. References RegisteredEntities, reit, and uint32. Referenced by NLMISC::NLMISC_COMMAND().
00481 { 00482 const reit itEnd = RegisteredEntities.end(); 00483 for (reit it = RegisteredEntities.begin(); it != itEnd ; ++it) 00484 { 00485 if ((*it).second.UId == uid) 00486 { 00487 return (*it).second.UserName; 00488 } 00489 } 00490 return 0; 00491 } |
|
Definition at line 571 of file eid_translator.cpp. References nlwarning, RegisteredEntities, reit, NLMISC::CEntityId::setCreatorId(), NLMISC::CEntityId::setDynamicId(), and NLMISC::CEntityId::toString().
00572 { 00573 // we have to remove the crea and dyna because it can changed dynamically and will not be found in the storage array 00574 CEntityId reid(eid); 00575 reid.setCreatorId(0); 00576 reid.setDynamicId(0); 00577 00578 reit it = RegisteredEntities.find (reid); 00579 if (it == RegisteredEntities.end ()) 00580 { 00581 nlwarning ("EIT: %s is not registered in CEntityIdTranslator", reid.toString().c_str()); 00582 return false; 00583 } 00584 else 00585 { 00586 return (*it).second.Online; 00587 } 00588 } |
|
Definition at line 177 of file eid_translator.cpp. References NLMISC::CLog::displayNL(), getRegisterableString(), InvalidEntityNames, NLMISC::testWildCard(), ucstring::toString(), uint, and uint16. Referenced by entityNameExists(), and NLMISC::NLMISC_COMMAND().
00178 { 00179 // 3 char at least 00180 if (entityName.size() < 3) 00181 { 00182 log->displayNL("Bad entity name '%s' (less than 3 char)", entityName.toString().c_str()); 00183 return false; 00184 } 00185 00186 if ( acceptBlanks ) 00187 { 00188 // no blanks at the beginning or at the end 00189 if ( entityName[0] ==(uint16)0x20 ) 00190 { 00191 log->displayNL("Bad entity name '%s' : start with a blank", entityName.toString().c_str()); 00192 return false; 00193 } 00194 if ( entityName[entityName.size() - 1] ==(uint16)0x20 ) 00195 { 00196 log->displayNL("Bad entity name '%s' : end with a blank", entityName.toString().c_str()); 00197 return false; 00198 } 00199 bool previousBlank = false; 00200 for (uint i = 0; i < entityName.size(); i++) 00201 { 00202 if( entityName[i] == (uint16)0x20 ) 00203 { 00204 // don't accept consecutive blanks 00205 if ( previousBlank ) 00206 { 00207 log->displayNL("Bad entity name '%s' consecutive blanks are not allowed", entityName.toString().c_str()); 00208 return false; 00209 } 00210 previousBlank = true; 00211 } 00212 else 00213 { 00214 // accept name with alphabetic and numeric value [a-zA-Z0-9] 00215 if (!isalnum (entityName[i])) 00216 { 00217 log->displayNL("Bad entity name '%s' (only char and num)", entityName.toString().c_str()); 00218 return false; 00219 } 00220 previousBlank = false; 00221 } 00222 } 00223 } 00224 else for (uint i = 0; i < entityName.size(); i++) 00225 { 00226 // only accept name with alphabetic and numeric value [a-zA-Z0-9] 00227 if (!isalnum (entityName[i])) 00228 { 00229 log->displayNL("Bad entity name '%s' (only char and num)", entityName.toString().c_str()); 00230 return false; 00231 } 00232 } 00233 00234 // now check with the invalid name list 00235 string en = getRegisterableString( entityName, acceptBlanks); 00236 00237 for (uint i = 0; i < InvalidEntityNames.size(); i++) 00238 { 00239 if(testWildCard(en, InvalidEntityNames[i])) 00240 { 00241 log->displayNL("Bad entity name '%s' (match the invalid entity name pattern '%s')", entityName.toString().c_str(), InvalidEntityNames[i].c_str()); 00242 return false; 00243 } 00244 } 00245 00246 return true; 00247 } |
|
Definition at line 405 of file eid_translator.cpp. References NLMISC::CFile::addFileChangeCallback(), NLMISC::cbInvalidEntityNamesFilename(), cbInvalidEntityNamesFilename, NLMISC::CIFile::close(), FileVersion, nlinfo, nlwarning, NLMISC::CIFile::open(), RegisteredEntities, NLMISC::IStream::serialCont(), and NLMISC::IStream::serialVersion().
00406 { 00407 if (fileName.empty()) 00408 { 00409 nlwarning ("EIT: Can't load empty filename for EntityIdTranslator"); 00410 return; 00411 } 00412 00413 if (!FileName.empty()) 00414 { 00415 nlwarning ("EIT: Can't load file '%s' for EntityIdTranslator because we already load the file '%s'", fileName.c_str(), FileName.c_str()); 00416 return; 00417 } 00418 00419 nlinfo ("EIT: CEntityIdTranslator: load '%s'", fileName.c_str()); 00420 00421 FileName = fileName; 00422 00423 CIFile ifile; 00424 if( ifile.open(FileName) ) 00425 { 00426 FileVersion = Version; 00427 ifile.serialVersion (FileVersion); 00428 ifile.serialCont (RegisteredEntities); 00429 00430 ifile.close (); 00431 } 00432 else 00433 { 00434 nlwarning ("EIT: Can't load filename '%s' for EntityIdTranslator", FileName.c_str()); 00435 } 00436 00437 cbInvalidEntityNamesFilename (invalidEntityNamesFilename); 00438 00439 NLMISC::CFile::addFileChangeCallback (invalidEntityNamesFilename, cbInvalidEntityNamesFilename); 00440 } |
|
Definition at line 267 of file eid_translator.cpp. References entityNameExists(), nlinfo, nlwarning, RegisteredEntities, save(), NLMISC::CEntityId::setCreatorId(), NLMISC::CEntityId::setDynamicId(), sint8, ucstring::toString(), NLMISC::CEntityId::toString(), and uint32.
00268 { 00269 // we have to remove the crea and dyna because it can changed dynamically and will not be found in the storage array 00270 CEntityId reid(eid); 00271 reid.setCreatorId(0); 00272 reid.setDynamicId(0); 00273 00274 if (RegisteredEntities.find (reid) != RegisteredEntities.end ()) 00275 { 00276 nlwarning ("EIT: Can't register EId %s EntityName %s UId %d UserName %s because EId is already in the map", reid.toString().c_str(), entityName.toString().c_str(), uid, userName.c_str()); 00277 return; 00278 } 00279 00280 if (entityNameExists(entityName)) 00281 { 00282 nlwarning ("EIT: Can't register EId %s EntityName %s UId %d UserName %s because EntityName is already in the map", reid.toString().c_str(), entityName.toString().c_str(), uid, userName.c_str()); 00283 return; 00284 } 00285 00286 nlinfo ("EIT: Register EId %s EntityName %s UId %d UserName %s", reid.toString().c_str(), entityName.toString().c_str(), uid, userName.c_str()); 00287 RegisteredEntities.insert (make_pair(reid, CEntityIdTranslator::CEntity(entityName, uid, userName, entitySlot))); 00288 00289 save (); 00290 } |
|
Definition at line 442 of file eid_translator.cpp. References NLMISC::COFile::close(), FileVersion, nlinfo, nlwarning, NLMISC::COFile::open(), RegisteredEntities, NLMISC::IStream::serialCont(), and NLMISC::IStream::serialVersion(). Referenced by checkEntity(), registerEntity(), and unregisterEntity().
00443 { 00444 if (FileName.empty()) 00445 { 00446 nlwarning ("EIT: Can't save empty filename for EntityIdTranslator (you forgot to load() it before?)"); 00447 return; 00448 } 00449 00450 nlinfo ("EIT: CEntityIdTranslator: save"); 00451 00452 COFile ofile; 00453 if( ofile.open(FileName) ) 00454 { 00455 ofile.serialVersion (Version); 00456 FileVersion = Version; 00457 ofile.serialCont (RegisteredEntities); 00458 00459 ofile.close (); 00460 } 00461 else 00462 { 00463 nlwarning ("EIT: Can't save filename '%s' for EntityIdTranslator", FileName.c_str()); 00464 } 00465 } |
|
Definition at line 520 of file eid_translator.cpp. References RegisteredEntities, reit, and uint32.
00521 { 00522 const reit itEnd = RegisteredEntities.end(); 00523 for (reit it = RegisteredEntities.begin(); it != itEnd ; ++it) 00524 { 00525 if ((*it).second.EntityName == entityName) 00526 { 00527 (*it).second.EntityNameStringId = stringId; 00528 return true; 00529 } 00530 } 00531 00532 return false; 00533 } |
|
Definition at line 553 of file eid_translator.cpp. References nlwarning, RegisteredEntities, reit, NLMISC::CEntityId::setCreatorId(), NLMISC::CEntityId::setDynamicId(), and NLMISC::CEntityId::toString().
00554 { 00555 // we have to remove the crea and dyna because it can changed dynamically and will not be found in the storage array 00556 CEntityId reid(eid); 00557 reid.setCreatorId(0); 00558 reid.setDynamicId(0); 00559 00560 reit it = RegisteredEntities.find (reid); 00561 if (it == RegisteredEntities.end ()) 00562 { 00563 nlwarning ("EIT: %s is not registered in CEntityIdTranslator", reid.toString().c_str()); 00564 } 00565 else 00566 { 00567 (*it).second.Online = online; 00568 } 00569 } |
|
Definition at line 292 of file eid_translator.cpp. References nlinfo, nlwarning, RegisteredEntities, reit, save(), NLMISC::CEntityId::setCreatorId(), NLMISC::CEntityId::setDynamicId(), and NLMISC::CEntityId::toString().
00293 { 00294 // we have to remove the crea and dyna because it can changed dynamically and will not be found in the storage array 00295 CEntityId reid(eid); 00296 reid.setCreatorId(0); 00297 reid.setDynamicId(0); 00298 00299 reit it = RegisteredEntities.find (reid); 00300 00301 if (it == RegisteredEntities.end ()) 00302 { 00303 nlwarning ("EIT: Can't unregister EId %s because EId is not in the map", reid.toString().c_str()); 00304 return; 00305 } 00306 00307 nlinfo ("EIT: Unregister EId %s EntityName %s UId %d UserName %s", reid.toString().c_str(), (*it).second.EntityName.toString().c_str(), (*it).second.UId, (*it).second.UserName.c_str()); 00308 RegisteredEntities.erase (reid); 00309 00310 save (); 00311 } |
|
Definition at line 370 of file eid_translator.cpp. Referenced by load().
00371 { 00372 CEntityIdTranslator::getInstance()->InvalidEntityNames.clear (); 00373 00374 string fn = CPath::lookup(invalidEntityNamesFilename, false); 00375 00376 if (fn.empty()) 00377 { 00378 nlwarning ("EIT: Can't load filename '%s' for invalid entity names filename (not found)", invalidEntityNamesFilename.c_str()); 00379 return; 00380 } 00381 00382 FILE *fp = fopen (fn.c_str(), "r"); 00383 if (fp == NULL) 00384 { 00385 nlwarning ("EIT: Can't load filename '%s' for invalid entity names filename", fn.c_str()); 00386 return; 00387 } 00388 00389 while (true) 00390 { 00391 char str[512]; 00392 fgets(str, 511, fp); 00393 if(feof(fp)) 00394 break; 00395 if (strlen(str) > 0) 00396 { 00397 str[strlen(str)-1] = '\0'; 00398 CEntityIdTranslator::getInstance()->InvalidEntityNames.push_back(str); 00399 } 00400 } 00401 00402 fclose (fp); 00403 } |
|
Definition at line 141 of file eid_translator.h. |
|
Definition at line 136 of file eid_translator.h. |
|
Definition at line 116 of file eid_translator.h. |
|
Definition at line 52 of file eid_translator.cpp. |
|
Definition at line 138 of file eid_translator.h. Referenced by NLMISC::cbInvalidEntityNamesFilename(), and isValidEntityName(). |
|
Definition at line 122 of file eid_translator.h. Referenced by checkEntity(), entityNameExists(), getByEntity(), getByUser(), getEntityIdInfo(), getEntityNameStringId(), getRegisteredEntities(), getUId(), getUserName(), isEntityOnline(), load(), registerEntity(), save(), setEntityNameStringId(), setEntityOnline(), and unregisterEntity(). |
|
Definition at line 55 of file eid_translator.cpp. |