EvEmu  0.8.4
11 September 2021
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
APICharacterManager Class Reference

??? More...

#include "APICharacterManager.h"

Inheritance diagram for APICharacterManager:
Collaboration diagram for APICharacterManager:

Public Member Functions

 APICharacterManager (const PyServiceMgr &services)
 
std::tr1::shared_ptr< std::string > ProcessCall (const APICommandCall *pAPICommandCall)
 
- Public Member Functions inherited from APIServiceManager
 APIServiceManager (const PyServiceMgr &services)
 
PyServiceMgrservices ()
 
std::tr1::shared_ptr< std::string > BuildErrorXMLResponse (std::string errorCode, std::string errorMessage)
 

Protected Member Functions

std::tr1::shared_ptr< std::string > _CharacterSheet (const APICommandCall *pAPICommandCall)
 
std::tr1::shared_ptr< std::string > _SkillQueue (const APICommandCall *pAPICommandCall)
 
std::tr1::shared_ptr< std::string > _SkillInTraining (const APICommandCall *pAPICommandCall)
 
- Protected Member Functions inherited from APIServiceManager
bool _AuthenticateUserNamePassword (std::string userName, std::string password)
 
bool _AuthenticateFullAPIQuery (std::string userID, std::string apiKey)
 
bool _AuthenticateLimitedAPIQuery (std::string userID, std::string apiKey)
 
void _BuildXMLHeader ()
 
void _CloseXMLHeader (uint32 cacheStyle)
 
void _BuildXMLRowSet (std::string name, std::string key, const std::vector< std::string > *columns)
 
void _CloseXMLRowSet ()
 
void _BuildXMLRow (const std::vector< std::string > *columns)
 
void _BuildXMLTag (std::string name)
 
void _BuildXMLTag (std::string name, const std::vector< std::pair< std::string, std::string > > *params)
 
void _BuildXMLTag (std::string name, const std::vector< std::pair< std::string, std::string > > *params, std::string value)
 
void _CloseXMLTag ()
 
void _BuildSingleXMLTag (std::string name, std::string param)
 
void _BuildErrorXMLTag (std::string code, std::string param)
 
std::tr1::shared_ptr< std::string > _GetXMLDocumentString ()
 

Protected Attributes

APICharacterDB m_charDB
 
- Protected Attributes inherited from APIServiceManager
APIServiceDB m_db
 
PyServiceMgr m_services
 
TiXmlDocument _XmlDoc
 
TiXmlElement * _pXmlDocOuterTag
 
std::string _CurrentRowSetColumnString
 
std::stack< TiXmlElement * > * _pXmlElementStack
 

Detailed Description

???

??? ??? ???

Author
Aknor Jaden
Date
July 2011

Definition at line 44 of file APICharacterManager.h.

Constructor & Destructor Documentation

APICharacterManager::APICharacterManager ( const PyServiceMgr services)

Definition at line 31 of file APICharacterManager.cpp.

32 : APIServiceManager(services)
33 {
34 }
APIServiceManager(const PyServiceMgr &services)

Member Function Documentation

std::tr1::shared_ptr< std::string > APICharacterManager::_CharacterSheet ( const APICommandCall pAPICommandCall)
protected

Definition at line 65 of file APICharacterManager.cpp.

References APIServiceManager::_BuildSingleXMLTag(), APIServiceManager::_BuildXMLHeader(), APIServiceManager::_BuildXMLRow(), APIServiceManager::_BuildXMLRowSet(), APIServiceManager::_BuildXMLTag(), APIServiceManager::_CloseXMLHeader(), APIServiceManager::_CloseXMLRowSet(), APIServiceManager::_CloseXMLTag(), APIServiceManager::_GetXMLDocumentString(), AttrCharisma, AttrIntelligence, AttrMemory, AttrPerception, AttrWillpower, APIServiceManager::BuildErrorXMLResponse(), APICharacterDB::GetCharacterAttributes(), APICharacterDB::GetCharacterInfo(), APICharacterDB::GetCharacterSkillsTrained(), itoa(), EVEAPI::CacheStyles::Long, m_charDB, sLog, strtoull, and Win32TimeToString().

Referenced by ProcessCall().

66 {
67  size_t i;
68 
69  sLog.Error( "APICharacterManager::_CharacterSheet()", "TODO: Insert code to validate userID and apiKey" );
70 
71  sLog.Debug("APICharacterManager::_CharacterSheet()", "EVEmu API - Character Service Manager - CALL: CharacterSheet.xml.aspx");
72 
73  if( pAPICommandCall->find( "userid" ) == pAPICommandCall->end() )
74  {
75  sLog.Error( "APICharacterManager::_CharacterSheet()", "ERROR: No 'userID' parameter found in call argument list - exiting with error and sending back NOTHING" );
76  return BuildErrorXMLResponse( "106", "Must provide userID parameter for authentication." );
77  }
78 
79  if( pAPICommandCall->find( "apikey" ) == pAPICommandCall->end() )
80  {
81  sLog.Error( "APICharacterManager::_CharacterSheet()", "ERROR: No 'apiKey' parameter found in call argument list - exiting with error and sending back NOTHING" );
82  return BuildErrorXMLResponse( "203", "Authentication failure." );
83  }
84 
85  if( pAPICommandCall->find( "characterid" ) == pAPICommandCall->end() )
86  {
87  sLog.Error( "APICharacterManager::_CharacterSheet()", "ERROR: No 'characterID' parameter found in call argument list - exiting with error and sending back NOTHING" );
88  return BuildErrorXMLResponse( "105", "Invalid characterID." );
89  }
90 
91  // Make calls to the APICharacterDB class to grab all data for this call and populate the xml structure with that data
92  uint32 characterID = atoi( pAPICommandCall->find( "characterid" )->second.c_str() );
93  std::vector<std::string> skillTypeIDList;
94  std::vector<std::string> skillPointsList;
95  std::vector<std::string> skillLevelList;
96  std::vector<std::string> skillPublishedList;
97  m_charDB.GetCharacterSkillsTrained( characterID, skillTypeIDList, skillPointsList, skillLevelList, skillPublishedList );
98 
99  std::vector<std::string> charInfoList;
100  m_charDB.GetCharacterInfo( characterID, charInfoList );
101 
102  std::map<std::string, std::string> charAttributes;
103  m_charDB.GetCharacterAttributes( characterID, charAttributes );
104 
105  sLog.Error( "APICharacterManager::_CharacterSheet()", "INFO: Sections Currently hard-coded: attributeEnhancers, certificates, corporation roles" );
106 
107  std::vector<std::string> rowset;
108  _BuildXMLHeader();
109  {
110  _BuildXMLTag( "result" );
111  {
112  _BuildSingleXMLTag( "characterID", std::string(itoa(characterID)) );
113  _BuildSingleXMLTag( "name", charInfoList.at(12) );
114  _BuildSingleXMLTag( "DoB", Win32TimeToString(strtoull(charInfoList.at(8).c_str(), NULL, 0) ));
115  _BuildSingleXMLTag( "race", charInfoList.at(11) );
116  _BuildSingleXMLTag( "bloodLine", charInfoList.at(10) );
117  _BuildSingleXMLTag( "ancestry", charInfoList.at(9) );
118  _BuildSingleXMLTag( "gender", ( (atoi(charInfoList.at(14).c_str()) > 0) ? "Male" : "Female") );
119  _BuildSingleXMLTag( "corporationName", charInfoList.at(13) );
120  _BuildSingleXMLTag( "corporationID", charInfoList.at(2) );
121  _BuildSingleXMLTag( "allianceName", "none" );
122  _BuildSingleXMLTag( "allianceID", "0" );
123  _BuildSingleXMLTag( "cloneName", "Clone Grade Pi" );
124  _BuildSingleXMLTag( "cloneSkillPoints", "54600000" );
125  _BuildSingleXMLTag( "balance", charInfoList.at(0) );
126 
127  // TODO: code these for real, as what follows are hard coded examples to fill out the whole xml document:
128  // Attribute Enhancers (implants)
129  _BuildXMLTag( "attributeEnhancers" );
130  {
131  /*
132  _BuildXMLTag( "memoryBonus" );
133  {
134  _BuildSingleXMLTag( "augmentatorName", "Memory Augmentation - Basic" );
135  _BuildSingleXMLTag( "augmentatorValue", "3" );
136  }
137  _CloseXMLTag(); // close tag "memoryBonus"
138  _BuildXMLTag( "perceptionBonus" );
139  {
140  _BuildSingleXMLTag( "augmentatorName", "Ocular Filter - Basic" );
141  _BuildSingleXMLTag( "augmentatorValue", "3" );
142  }
143  _CloseXMLTag(); // close tag "perceptionBonus"
144  _BuildXMLTag( "willpowerBonus" );
145  {
146  _BuildSingleXMLTag( "augmentatorName", "Neural Boost - Basic" );
147  _BuildSingleXMLTag( "augmentatorValue", "3" );
148  }
149  _CloseXMLTag(); // close tag "willpowerBonus"
150  _BuildXMLTag( "intelligenceBonus" );
151  {
152  _BuildSingleXMLTag( "augmentatorName", "Snake Delta" );
153  _BuildSingleXMLTag( "augmentatorValue", "3" );
154  }
155  _CloseXMLTag(); // close tag "intelligenceBonus"
156  _BuildXMLTag( "charismaBonus" );
157  {
158  _BuildSingleXMLTag( "augmentatorName", "Limited Social Adaptation Chip" );
159  _BuildSingleXMLTag( "augmentatorValue", "3" );
160  }
161  _CloseXMLTag(); // close tag "charismaBonus"
162  */
163  }
164  _CloseXMLTag(); // close tag "attributeEnhancers"
165 
166  // TODO: code these for real, as what follows are hard coded examples to fill out the whole xml document:
167  // Attributes
168  _BuildXMLTag( "attributes" );
169  {
170  _BuildSingleXMLTag( "intelligence", charAttributes.find( std::string(itoa(AttrIntelligence)))->second );
171  _BuildSingleXMLTag( "memory", charAttributes.find( std::string(itoa(AttrMemory)))->second );
172  _BuildSingleXMLTag( "charisma", charAttributes.find( std::string(itoa(AttrCharisma)))->second );
173  _BuildSingleXMLTag( "perception", charAttributes.find( std::string(itoa(AttrPerception)))->second );
174  _BuildSingleXMLTag( "willpower", charAttributes.find( std::string(itoa(AttrWillpower)))->second );
175  }
176  _CloseXMLTag(); // close tag "attributes"
177 
178  // Skills
179  rowset.clear();
180  rowset.push_back("typeID");
181  rowset.push_back("skillpoints");
182  rowset.push_back("level");
183  rowset.push_back("published");
184  _BuildXMLRowSet( "skills", "typeID", &rowset );
185  {
186  for(i=0; i<skillTypeIDList.size(); i++)
187  {
188  rowset.clear();
189  rowset.push_back(skillTypeIDList.at(i));
190  rowset.push_back(skillPointsList.at(i));
191  rowset.push_back(skillLevelList.at(i));
192  rowset.push_back(skillPublishedList.at(i));
193  _BuildXMLRow( &rowset );
194  }
195  }
196  _CloseXMLRowSet(); // close rowset "skills"
197 
198  // TODO: code these for real, as what follows are hard coded examples to fill out the whole xml document:
199  // Certificates:
200  rowset.clear();
201  rowset.push_back("certificateID");
202  _BuildXMLRowSet( "certificates", "certificateID", &rowset );
203  {
204  // for(i=0; i<skillTypeIDList.size(); i++)
205  // {
206  rowset.clear();
207  //rowset.push_back(certificatesList.at(i));
208  rowset.push_back("1");
209  _BuildXMLRow( &rowset );
210  // }
211  }
212  _CloseXMLRowSet(); // close rowset "certificates"
213 
214  // TODO: code these for real, as what follows are hard coded examples to fill out the whole xml document:
215  // Corporation Roles:
216  //rowset.clear();
217  //rowset.push_back("");
218  //_BuildXMLRowSet( "", "", &rowset );
219  //{
220  //}
221  _CloseXMLRowSet(); // close rowset ""
222  }
223  _CloseXMLTag(); // close tag "result"
224  }
226 
227  return _GetXMLDocumentString();
228 }
std::tr1::shared_ptr< std::string > BuildErrorXMLResponse(std::string errorCode, std::string errorMessage)
std::tr1::shared_ptr< std::string > _GetXMLDocumentString()
void _BuildSingleXMLTag(std::string name, std::string param)
bool GetCharacterInfo(uint32 characterID, std::vector< std::string > &charInfoList)
?
#define sLog
Evaluates to a NewLog instance.
Definition: LogNew.h:250
bool GetCharacterAttributes(uint32 characterID, std::map< std::string, std::string > &attribList)
?
unsigned __int32 uint32
Definition: eve-compat.h:50
void _BuildXMLTag(std::string name)
#define strtoull
Definition: eve-compat.h:247
std::string Win32TimeToString(int64 win32t)
Definition: utils_time.cpp:59
bool GetCharacterSkillsTrained(uint32 characterID, std::vector< std::string > &skillTypeIDList, std::vector< std::string > &skillPointsList, std::vector< std::string > &skillLevelList, std::vector< std::string > &skillPublishedList)
?
void _BuildXMLRow(const std::vector< std::string > *columns)
void _CloseXMLHeader(uint32 cacheStyle)
void _BuildXMLRowSet(std::string name, std::string key, const std::vector< std::string > *columns)
const char * itoa(int64 num)
Convers num to string.

Here is the call graph for this function:

Here is the caller graph for this function:

std::tr1::shared_ptr< std::string > APICharacterManager::_SkillInTraining ( const APICommandCall pAPICommandCall)
protected

Definition at line 356 of file APICharacterManager.cpp.

References APIServiceManager::_BuildSingleXMLTag(), APIServiceManager::_BuildXMLHeader(), APIServiceManager::_BuildXMLTag(), APIServiceManager::_CloseXMLHeader(), APIServiceManager::_CloseXMLTag(), APIServiceManager::_GetXMLDocumentString(), AttrCharisma, AttrIntelligence, AttrMemory, AttrPerception, AttrWillpower, APIServiceManager::BuildErrorXMLResponse(), EvilNumber::get_int(), APICharacterDB::GetCharacterAttributes(), APICharacterDB::GetCharacterSkillQueue(), itoa(), m_charDB, EVEAPI::CacheStyles::Modified, sLog, and Win32TimeToString().

Referenced by ProcessCall().

357 {
358  sLog.Error( "APICharacterManager::_SkillInTraining()", "TODO: Insert code to validate userID and apiKey" );
359 
360  sLog.Debug("APICharacterManager::_SkillInTraining()", "EVEmu API - Character Service Manager - CALL: SkillInTraining.xml.aspx");
361 
362  if( pAPICommandCall->find( "userid" ) == pAPICommandCall->end() )
363  {
364  sLog.Error( "APICharacterManager::_SkillInTraining()", "ERROR: No 'userID' parameter found in call argument list - exiting with error and sending back NOTHING" );
365  return BuildErrorXMLResponse( "106", "Must provide userID parameter for authentication." );
366  }
367 
368  if( pAPICommandCall->find( "apikey" ) == pAPICommandCall->end() )
369  {
370  sLog.Error( "APICharacterManager::_SkillInTraining()", "ERROR: No 'apiKey' parameter found in call argument list - exiting with error and sending back NOTHING" );
371  return BuildErrorXMLResponse( "203", "Authentication failure." );
372  }
373 
374  if( pAPICommandCall->find( "characterid" ) == pAPICommandCall->end() )
375  {
376  sLog.Error( "APICharacterManager::_SkillInTraining()", "ERROR: No 'characterID' parameter found in call argument list - exiting with error and sending back NOTHING" );
377  return BuildErrorXMLResponse( "105", "Invalid characterID." );
378  }
379 
380  // Make calls to the APICharacterDB class to grab all data for this call and populate the xml structure with that data
381  uint32 characterID = atoi( pAPICommandCall->find( "characterid" )->second.c_str() );
382 
383  std::map<std::string, std::string> charLearningAttributesString;
384  std::map<uint32, uint32> charLearningAttributes;
385  m_charDB.GetCharacterAttributes( characterID, charLearningAttributesString );
386  charLearningAttributes.insert( std::pair<uint32, uint32>( AttrMemory, ((uint32)(atoi(charLearningAttributesString.find(std::string(itoa(AttrMemory)))->second.c_str()))) ));
387  charLearningAttributes.insert( std::pair<uint32, uint32>( AttrIntelligence, ((uint32)(atoi(charLearningAttributesString.find(std::string(itoa(AttrIntelligence)))->second.c_str()))) ));
388  charLearningAttributes.insert( std::pair<uint32, uint32>( AttrCharisma, ((uint32)(atoi(charLearningAttributesString.find(std::string(itoa(AttrCharisma)))->second.c_str()))) ));
389  charLearningAttributes.insert( std::pair<uint32, uint32>( AttrWillpower, ((uint32)(atoi(charLearningAttributesString.find(std::string(itoa(AttrWillpower)))->second.c_str()))) ));
390  charLearningAttributes.insert( std::pair<uint32, uint32>( AttrPerception, ((uint32)(atoi(charLearningAttributesString.find(std::string(itoa(AttrPerception)))->second.c_str()))) ));
391 
392  std::vector<std::string> queueOrderList;
393  std::vector<std::string> queueSkillTypeIdList;
394  std::vector<std::string> queueSkillLevelList;
395  std::vector<std::string> queueSkillRankList;
396  std::vector<std::string> queueSkillIdList;
397  std::vector<std::string> queueSkillPrimaryAttrList;
398  std::vector<std::string> queueSkillSecondaryAttrList;
399  std::vector<std::string> queueSkillPointsTrainedList;
400 
401  uint32 queueSkillPrimaryAttribute;
402  uint32 queueSkillSecondaryAttribute;
403  std::vector<uint32> queueSkillStartSP;
404  std::vector<uint32> queueSkillEndSP;
405  std::vector<uint64> queueSkillStartTime;
406  std::vector<uint64> queueSkillEndTime;
407  EvilNumber spPerMinute(0.0);
408  EvilNumber skillStartSP(0.0);
409  EvilNumber skillEndSP(0.0);
410  EvilNumber timeNow(0.0);
411  uint64 skillStartTime;
412  uint64 skillEndTime;
413 
414  bool status = m_charDB.GetCharacterSkillQueue( characterID, queueOrderList, queueSkillTypeIdList, queueSkillLevelList, queueSkillRankList,
415  queueSkillIdList, queueSkillPrimaryAttrList, queueSkillSecondaryAttrList, queueSkillPointsTrainedList );
416 
417  if( status )
418  {
419  sLog.Error( "APICharacterManager::_SkillInTraining()", "INFO: Calculation of Skill End Time based on Effective SP/min does NOT include implants/boosters at this time" );
420  timeNow = EvilTimeNow();
421 
422  queueSkillPrimaryAttribute = charLearningAttributes.find( atoi(queueSkillPrimaryAttrList.at(0).c_str()) )->second;
423  queueSkillSecondaryAttribute = charLearningAttributes.find( atoi(queueSkillSecondaryAttrList.at(0).c_str()) )->second;
424  skillStartSP = EvilNumber(atoi( queueSkillPointsTrainedList.at(0).c_str() ));
425  queueSkillStartSP.push_back( static_cast<uint32>( skillStartSP.get_int() ));
426  skillEndSP = SkillPointsAtLevel( atoi(queueSkillLevelList.at(0).c_str()), atoi(queueSkillRankList.at(0).c_str()) );
427  queueSkillEndSP.push_back( static_cast<uint32>( skillEndSP.get_int() ) );
428  spPerMinute = SkillPointsPerMinute( queueSkillPrimaryAttribute, queueSkillSecondaryAttribute );
429  skillStartTime = static_cast<uint64>(SkillStartingTime( skillStartSP, skillEndSP, spPerMinute, timeNow ).get_int());
430  skillEndTime = static_cast<uint64>(SkillEndingTime( skillStartSP, skillEndSP, spPerMinute, timeNow ).get_int());
431  queueSkillStartTime.push_back( skillStartTime );
432  queueSkillEndTime.push_back( skillEndTime );
433  }
434 
435  // EXAMPLE:
436  std::vector<std::string> rowset;
437  _BuildXMLHeader();
438  {
439  _BuildXMLTag( "result" );
440  {
441  if( status )
442  {
443  _BuildSingleXMLTag( "currentTQTime", Win32TimeToString(static_cast<uint64>(timeNow.get_int())) );
444  _BuildSingleXMLTag( "trainingEndTime", Win32TimeToString(skillEndTime) );
445  _BuildSingleXMLTag( "trainingStartTime", Win32TimeToString(skillStartTime) );
446  _BuildSingleXMLTag( "trainingTypeID", queueSkillTypeIdList.at(0) );
447  _BuildSingleXMLTag( "trainingStartSP", std::string(itoa(skillStartSP.get_int())) );
448  _BuildSingleXMLTag( "trainingDestinationSP", std::string(itoa(skillEndSP.get_int())) );
449  _BuildSingleXMLTag( "trainingToLevel", queueSkillLevelList.at(0) );
450  _BuildSingleXMLTag( "skillInTraining", "1" );
451  }
452  else
453  {
454  _BuildSingleXMLTag( "skillInTraining", "0" );
455  }
456  }
457  _CloseXMLTag(); // close tag "result"
458  }
460 
461  return _GetXMLDocumentString();
462 }
std::tr1::shared_ptr< std::string > BuildErrorXMLResponse(std::string errorCode, std::string errorMessage)
std::tr1::shared_ptr< std::string > _GetXMLDocumentString()
void _BuildSingleXMLTag(std::string name, std::string param)
this is a class that kinda mimics how python polymorph's numbers.
Definition: EvilNumber.h:59
#define sLog
Evaluates to a NewLog instance.
Definition: LogNew.h:250
bool GetCharacterSkillQueue(uint32 characterID, std::vector< std::string > &orderList, std::vector< std::string > &typeIdList, std::vector< std::string > &levelList, std::vector< std::string > &rankList, std::vector< std::string > &skillIdList, std::vector< std::string > &primaryAttrList, std::vector< std::string > &secondaryAttrList, std::vector< std::string > &skillPointsTrainedList)
?
bool GetCharacterAttributes(uint32 characterID, std::map< std::string, std::string > &attribList)
?
unsigned __int32 uint32
Definition: eve-compat.h:50
void _BuildXMLTag(std::string name)
std::string Win32TimeToString(int64 win32t)
Definition: utils_time.cpp:59
void _CloseXMLHeader(uint32 cacheStyle)
const char * itoa(int64 num)
Convers num to string.

Here is the call graph for this function:

Here is the caller graph for this function:

std::tr1::shared_ptr< std::string > APICharacterManager::_SkillQueue ( const APICommandCall pAPICommandCall)
protected

Definition at line 230 of file APICharacterManager.cpp.

References APIServiceManager::_BuildXMLHeader(), APIServiceManager::_BuildXMLRow(), APIServiceManager::_BuildXMLRowSet(), APIServiceManager::_BuildXMLTag(), APIServiceManager::_CloseXMLHeader(), APIServiceManager::_CloseXMLRowSet(), APIServiceManager::_CloseXMLTag(), APIServiceManager::_GetXMLDocumentString(), AttrCharisma, AttrIntelligence, AttrMemory, AttrPerception, AttrWillpower, APIServiceManager::BuildErrorXMLResponse(), EvilNumber::get_int(), APICharacterDB::GetCharacterAttributes(), APICharacterDB::GetCharacterSkillQueue(), itoa(), m_charDB, EVEAPI::CacheStyles::Modified, sLog, and Win32TimeToString().

Referenced by ProcessCall().

231 {
232  size_t i;
233 
234  sLog.Error( "APICharacterManager::_SkillQueue()", "TODO: Insert code to validate userID and apiKey" );
235 
236  sLog.Debug("APICharacterManager::_SkillQueue()", "EVEmu API - Character Service Manager - CALL: SkillQueue.xml.aspx");
237 
238  if( pAPICommandCall->find( "userid" ) == pAPICommandCall->end() )
239  {
240  sLog.Error( "APICharacterManager::_SkillQueue()", "ERROR: No 'userID' parameter found in call argument list - exiting with error and sending back NOTHING" );
241  return BuildErrorXMLResponse( "106", "Must provide userID parameter for authentication." );
242  }
243 
244  if( pAPICommandCall->find( "apikey" ) == pAPICommandCall->end() )
245  {
246  sLog.Error( "APICharacterManager::_SkillQueue()", "ERROR: No 'apiKey' parameter found in call argument list - exiting with error and sending back NOTHING" );
247  return BuildErrorXMLResponse( "203", "Authentication failure." );
248  }
249 
250  if( pAPICommandCall->find( "characterid" ) == pAPICommandCall->end() )
251  {
252  sLog.Error( "APICharacterManager::_SkillQueue()", "ERROR: No 'characterID' parameter found in call argument list - exiting with error and sending back NOTHING" );
253  return BuildErrorXMLResponse( "105", "Invalid characterID." );
254  }
255 
256  // Make calls to the APICharacterDB class to grab all data for this call and populate the xml structure with that data
257  uint32 characterID = atoi( pAPICommandCall->find( "characterid" )->second.c_str() );
258 
259  std::map<std::string, std::string> charLearningAttributesString;
260  std::map<uint32, uint32> charLearningAttributes;
261  m_charDB.GetCharacterAttributes( characterID, charLearningAttributesString );
262  charLearningAttributes.insert( std::pair<uint32, uint32>( AttrMemory, ((uint32)(atoi(charLearningAttributesString.find(std::string(itoa(AttrMemory)))->second.c_str()))) ));
263  charLearningAttributes.insert( std::pair<uint32, uint32>( AttrIntelligence, ((uint32)(atoi(charLearningAttributesString.find(std::string(itoa(AttrIntelligence)))->second.c_str()))) ));
264  charLearningAttributes.insert( std::pair<uint32, uint32>( AttrCharisma, ((uint32)(atoi(charLearningAttributesString.find(std::string(itoa(AttrCharisma)))->second.c_str()))) ));
265  charLearningAttributes.insert( std::pair<uint32, uint32>( AttrWillpower, ((uint32)(atoi(charLearningAttributesString.find(std::string(itoa(AttrWillpower)))->second.c_str()))) ));
266  charLearningAttributes.insert( std::pair<uint32, uint32>( AttrPerception, ((uint32)(atoi(charLearningAttributesString.find(std::string(itoa(AttrPerception)))->second.c_str()))) ));
267 
268  std::vector<std::string> queueOrderList;
269  std::vector<std::string> queueSkillTypeIdList;
270  std::vector<std::string> queueSkillLevelList;
271  std::vector<std::string> queueSkillRankList;
272  std::vector<std::string> queueSkillIdList;
273  std::vector<std::string> queueSkillPrimaryAttrList;
274  std::vector<std::string> queueSkillSecondaryAttrList;
275  std::vector<std::string> queueSkillPointsTrainedList;
276 
277  uint32 queueSkillPrimaryAttribute;
278  uint32 queueSkillSecondaryAttribute;
279  std::vector<uint32> queueSkillStartSP;
280  std::vector<uint32> queueSkillEndSP;
281  std::vector<uint64> queueSkillStartTime;
282  std::vector<uint64> queueSkillEndTime;
283  EvilNumber spPerMinute(0.0);
284  EvilNumber skillStartSP(0.0);
285  EvilNumber skillEndSP(0.0);
286  EvilNumber timeNow(0.0);
287  uint64 skillStartTime;
288  uint64 skillEndTime;
289 
290  bool status = m_charDB.GetCharacterSkillQueue( characterID, queueOrderList, queueSkillTypeIdList, queueSkillLevelList, queueSkillRankList,
291  queueSkillIdList, queueSkillPrimaryAttrList, queueSkillSecondaryAttrList, queueSkillPointsTrainedList );
292 
293  sLog.Error( "APICharacterManager::_SkillQueue()", "INFO: Calculation of Skill End Time based on Effective SP/min does NOT include implants/boosters at this time" );
294 
295  if( status )
296  {
297  timeNow = EvilTimeNow();
298  for( i=0; i<queueOrderList.size(); i++ )
299  {
300  queueSkillPrimaryAttribute = charLearningAttributes.find( atoi(queueSkillPrimaryAttrList.at(i).c_str()) )->second;
301  queueSkillSecondaryAttribute = charLearningAttributes.find( atoi(queueSkillSecondaryAttrList.at(i).c_str()) )->second;
302  skillStartSP = EvilNumber(atoi( queueSkillPointsTrainedList.at(i).c_str() ));
303  queueSkillStartSP.push_back( static_cast<uint32>( skillStartSP.get_int() ));
304  skillEndSP = SkillPointsAtLevel( atoi(queueSkillLevelList.at(i).c_str()), atoi(queueSkillRankList.at(i).c_str()) );
305  queueSkillEndSP.push_back( static_cast<uint32>( skillEndSP.get_int() ) );
306  spPerMinute = SkillPointsPerMinute( queueSkillPrimaryAttribute, queueSkillSecondaryAttribute );
307  skillStartTime = static_cast<uint64>(SkillStartingTime( skillStartSP, skillEndSP, spPerMinute, timeNow ).get_int());
308  skillEndTime = static_cast<uint64>(SkillEndingTime( skillStartSP, skillEndSP, spPerMinute, timeNow ).get_int());
309  queueSkillStartTime.push_back( skillStartTime );
310  queueSkillEndTime.push_back( skillEndTime );
311  timeNow = skillEndTime;
312  }
313  }
314 
315  // EXAMPLE:
316  std::vector<std::string> rowset;
317  _BuildXMLHeader();
318  {
319  _BuildXMLTag( "result" );
320  {
321  // Skill Queue
322  rowset.push_back("queuePosition");
323  rowset.push_back("typeID");
324  rowset.push_back("level");
325  rowset.push_back("startSP");
326  rowset.push_back("endSP");
327  rowset.push_back("startTime");
328  rowset.push_back("endTime");
329  _BuildXMLRowSet( "skillqueue", "queuePosition", &rowset );
330  {
331  if( status )
332  {
333  for(i=0; i<queueOrderList.size(); i++)
334  {
335  rowset.clear();
336  rowset.push_back( queueOrderList.at(i) );
337  rowset.push_back( queueSkillTypeIdList.at(i) );
338  rowset.push_back( queueSkillLevelList.at(i) );
339  rowset.push_back( std::string(itoa(queueSkillStartSP.at(i))) );
340  rowset.push_back( std::string(itoa(queueSkillEndSP.at(i))) );
341  rowset.push_back( Win32TimeToString(queueSkillStartTime.at(i)) );
342  rowset.push_back( Win32TimeToString(queueSkillEndTime.at(i)) );
343  _BuildXMLRow( &rowset );
344  }
345  }
346  }
347  _CloseXMLRowSet(); // close rowset "skillqueue"
348  }
349  _CloseXMLTag(); // close tag "result"
350  }
352 
353  return _GetXMLDocumentString();
354 }
std::tr1::shared_ptr< std::string > BuildErrorXMLResponse(std::string errorCode, std::string errorMessage)
std::tr1::shared_ptr< std::string > _GetXMLDocumentString()
this is a class that kinda mimics how python polymorph's numbers.
Definition: EvilNumber.h:59
#define sLog
Evaluates to a NewLog instance.
Definition: LogNew.h:250
bool GetCharacterSkillQueue(uint32 characterID, std::vector< std::string > &orderList, std::vector< std::string > &typeIdList, std::vector< std::string > &levelList, std::vector< std::string > &rankList, std::vector< std::string > &skillIdList, std::vector< std::string > &primaryAttrList, std::vector< std::string > &secondaryAttrList, std::vector< std::string > &skillPointsTrainedList)
?
bool GetCharacterAttributes(uint32 characterID, std::map< std::string, std::string > &attribList)
?
unsigned __int32 uint32
Definition: eve-compat.h:50
void _BuildXMLTag(std::string name)
std::string Win32TimeToString(int64 win32t)
Definition: utils_time.cpp:59
void _BuildXMLRow(const std::vector< std::string > *columns)
void _CloseXMLHeader(uint32 cacheStyle)
void _BuildXMLRowSet(std::string name, std::string key, const std::vector< std::string > *columns)
const char * itoa(int64 num)
Convers num to string.

Here is the call graph for this function:

Here is the caller graph for this function:

std::tr1::shared_ptr< std::string > APICharacterManager::ProcessCall ( const APICommandCall pAPICommandCall)
virtual

Reimplemented from APIServiceManager.

Definition at line 36 of file APICharacterManager.cpp.

References _CharacterSheet(), _SkillInTraining(), _SkillQueue(), APIServiceManager::BuildErrorXMLResponse(), and sLog.

37 {
38  sLog.Debug("APIAdminManager::ProcessCall()", "EVEmu API - Character Service Manager");
39 
40  if( pAPICommandCall->find( "servicehandler" ) == pAPICommandCall->end() )
41  {
42  sLog.Error( "APICharacterManager::ProcessCall()", "Cannot find 'servicehandler' specifier in pAPICommandCall packet" );
43  return std::tr1::shared_ptr<std::string>(new std::string(""));
44  }
45 
46  if( pAPICommandCall->find( "servicehandler" )->second == "CharacterSheet.xml.aspx" )
47  return _CharacterSheet(pAPICommandCall);
48  if( pAPICommandCall->find( "servicehandler" )->second == "SkillQueue.xml.aspx" )
49  return _SkillQueue(pAPICommandCall);
50  if( pAPICommandCall->find( "servicehandler" )->second == "SkillInTraining.xml.aspx" )
51  return _SkillInTraining(pAPICommandCall);
52  //else if( pAPICommandCall->find( "servicehandler" )->second == "TODO.xml.aspx" )
53  // return _TODO(pAPICommandCall);
54  else
55  {
56  sLog.Error("APIAdminManager::ProcessCall()", "EVEmu API - Admin Service Manager - ERROR: Cannot resolve '%s' as a valid service query for Admin Service Manager",
57  pAPICommandCall->find("servicehandler")->second.c_str() );
58  return std::tr1::shared_ptr<std::string>(new std::string(""));
59  }
60  sLog.Debug("APICharacterManager::ProcessCall()", "EVEmu API - Character Service Manager");
61 
62  return BuildErrorXMLResponse( "9999", "EVEmu API Server: Character Manager - Unknown call." );
63 }
std::tr1::shared_ptr< std::string > BuildErrorXMLResponse(std::string errorCode, std::string errorMessage)
std::tr1::shared_ptr< std::string > _CharacterSheet(const APICommandCall *pAPICommandCall)
std::tr1::shared_ptr< std::string > _SkillQueue(const APICommandCall *pAPICommandCall)
std::tr1::shared_ptr< std::string > _SkillInTraining(const APICommandCall *pAPICommandCall)
#define sLog
Evaluates to a NewLog instance.
Definition: LogNew.h:250

Here is the call graph for this function:

Member Data Documentation

APICharacterDB APICharacterManager::m_charDB
protected

Definition at line 55 of file APICharacterManager.h.

Referenced by _CharacterSheet(), _SkillInTraining(), and _SkillQueue().


The documentation for this class was generated from the following files: