From: kainazzzo Date: Sun, 13 Sep 2009 22:26:51 +0000 (+0000) Subject: Almost done the player code X-Git-Url: https://jfr.im/git/irc/gameservirc.git/commitdiff_plain/cb255541b2148bd5f41afbaab0268f15b9fdbb53?hp=eec695cf5383af12e333e493508fa51e22932690 Almost done the player code Started on the item DAO code which is required to complete the player portion of the library git-svn-id: https://svn.code.sf.net/p/gameservirc/code/trunk@516 bc333340-6410-0410-a689-9d09f3c113fa --- diff --git a/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/File/FileArmorDAO.h b/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/File/FileArmorDAO.h new file mode 100644 index 0000000..382db45 --- /dev/null +++ b/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/File/FileArmorDAO.h @@ -0,0 +1,62 @@ +#ifndef __GS__FileArmorDAO_H__ +#define __GS__FileArmorDAO_H__ + +#include +#include +using GameServ::GameLayer::GameObjects::ArmorGO; +using GameServ::DataLayer::DataAccessObjects::IArmorDAO; + +#include +using boost::shared_ptr; + +#include +using std::string; + +#include +using std::list; + +#include +using std::map; + +namespace GameServ { namespace DataLayer { namespace File +{ + //! File implementation of IArmorDAO interface + /*! + If you're using an File datasource, you will be using this + DAO to access Armors. + */ + class FileArmorDAO : public IArmorDAO + { + public: + // Ctors, Dtors /////////////////////////////////////////////////////// + FileArmorDAO(void); + FileArmorDAO(const string &filename); + virtual ~FileArmorDAO(); + + // Methods //////////////////////////////////////////////////////////// + virtual shared_ptr GetById(const string &Id) const; + + virtual bool IdExists(const string &Id) const; + + void LoadArmorCache(void); + + private: + //! Data file + string mFilename; + + // Helper Methods ///////////////////////////////////////////////////// + + //! Creates the ArmorGO found at iterator position + shared_ptr CreateArmorFromLine(const string &line) const; + + //! Get the Armor database file path + string GetArmorFilePath(void) const; + + void Initialize(const string &filename); + + + map > spArmorCache; + }; +} } } // GameServ.DataLayer.DataAccessObjects.File + +#endif // __GS__FileArmorDAO_H__ diff --git a/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/File/FileDAOFactory.h b/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/File/FileDAOFactory.h index 29671e3..535678a 100644 --- a/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/File/FileDAOFactory.h +++ b/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/File/FileDAOFactory.h @@ -6,10 +6,9 @@ using GameServ::DataLayer::IDAOFactory; #include - - using GameServ::DataLayer::DataAccessObjects::IPlayerDAO; - +#include +using GameServ::DataLayer::DataAccessObjects::IArmorDAO; #include using boost::shared_ptr; @@ -29,6 +28,7 @@ namespace GameServ { namespace DataLayer { namespace File // Overrides ////////////////////////////////////////////////////////// virtual shared_ptr GetPlayerDAO(void) const; + virtual shared_ptr GetArmorDAO(void) const; private: diff --git a/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/File/FilePlayerDAO.h b/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/File/FilePlayerDAO.h index e79fd9a..f81d771 100644 --- a/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/File/FilePlayerDAO.h +++ b/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/File/FilePlayerDAO.h @@ -46,13 +46,14 @@ namespace GameServ { namespace DataLayer { namespace File virtual void SetFlags(shared_ptr spPlayer, const int &flags) const; virtual int GetFlags(shared_ptr spPlayer) const; + void LoadPlayerCache(void); + void WritePlayerCache(void) const; + private: //! Data file string mFilename; // Helper Methods ///////////////////////////////////////////////////// - //! Get control sector information - void GetControlInfo(void); //! Creates the PlayerGO found at iterator position shared_ptr CreatePlayerFromLine(const string &line) const; @@ -62,12 +63,8 @@ namespace GameServ { namespace DataLayer { namespace File string GetPlayerFilePath(void) const; void Initialize(const string &filename); - void LoadPlayerCache(); - void WritePlayerCache(); - //! string is the id and the shared_ptr is the player object map > spPlayerCache; - }; } } } // GameServ.DataLayer.DataAccessObjects.File diff --git a/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/IArmorDAO.h b/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/IArmorDAO.h new file mode 100644 index 0000000..fa73cfa --- /dev/null +++ b/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/IArmorDAO.h @@ -0,0 +1,50 @@ +#ifndef __GS_IARMORDAO_H__ +#define __GS_IARMORDAO_H__ + +#include +using GameServ::GameLayer::GameObjects::ArmorGO; + +#include +using boost::shared_ptr; + +#include +using std::list; +#include +using std::string; + +namespace GameServ { namespace DataLayer { namespace DataAccessObjects +{ + //! Interface for Armor Data Access Objects + /*! + This is the interface for all Armor DAOs. Each specific datasource + will need to inherit this common interface. + */ + class IArmorDAO + { + public: + // Ctors, Dtors /////////////////////////////////////////////////////// + IArmorDAO(void); + virtual ~IArmorDAO(void); // Needs to be virtual + + //! Get the Armor using a unique data/object Id + /*! + \param Id Unique identifier + \return A boost shared pointer to a Armor game object if found + otherwise the list is empty. + */ + virtual shared_ptr GetById(const string &Id) const = 0; + + //! Function to quickly search to see if an Id exists or not + /*! + \param Id The Id of the game object to search for + \return true if the Id is valid and exists in the data, false otherwise + */ + virtual bool IdExists(const string &Id) const = 0; + + private: + + + }; +} } } + +#endif \ No newline at end of file diff --git a/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/IDAOFactory.h b/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/IDAOFactory.h index 2f948ae..a7c1427 100644 --- a/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/IDAOFactory.h +++ b/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/IDAOFactory.h @@ -2,8 +2,9 @@ #define __GS__IDAOFACTORY_H__ #include - using GameServ::DataLayer::DataAccessObjects::IPlayerDAO; +#include +using GameServ::DataLayer::DataAccessObjects::IArmorDAO; #include using boost::shared_ptr; @@ -26,6 +27,8 @@ namespace GameServ { namespace DataLayer //! Test DataAccessObject for all test related operations virtual shared_ptr GetPlayerDAO(void) const = 0; + virtual shared_ptr GetArmorDAO(void) const = 0; + private: }; diff --git a/gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/PlayerGO.h b/gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/PlayerGO.h index 2862c6b..2022f71 100644 --- a/gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/PlayerGO.h +++ b/gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/PlayerGO.h @@ -113,7 +113,17 @@ namespace GameServ { namespace GameLayer { namespace GameObjects //! Property get - LastLogin ptime LastLogin(void) const; - // TODO: Add boolean flags + //! Property get - FoughtMaster + bool FoughtMaster(void) const; + + //! Property set - Fought master + void FoughtMaster(const bool &value); + + //! Property get - Alive + bool Alive(void) const; + + //! Property set - Alive + void Alive(const bool &value); bool operator==(const PlayerGO &right) const; bool operator!=(const PlayerGO &right) const; @@ -138,7 +148,8 @@ namespace GameServ { namespace GameLayer { namespace GameObjects vector< shared_ptr > mInventory; ptime mLastLogin; - // TODO: Add flag long int + bool mFoughtMaster; + bool mAlive; }; }}} // GameServ::GameLayer::GameObjects #endif \ No newline at end of file diff --git a/gameserv-2.0/libgameservgldl/libgameservgldl.vcproj b/gameserv-2.0/libgameservgldl/libgameservgldl.vcproj index ca6abda..2643cae 100644 --- a/gameserv-2.0/libgameservgldl/libgameservgldl.vcproj +++ b/gameserv-2.0/libgameservgldl/libgameservgldl.vcproj @@ -170,6 +170,14 @@ RelativePath=".\include\GameServ\DataLayer\DataLayerExceptions.h" > + + + + @@ -185,6 +193,14 @@ + + + + diff --git a/gameserv-2.0/libgameservgldl/src/DataLayer/File/FileArmorDAO.cpp b/gameserv-2.0/libgameservgldl/src/DataLayer/File/FileArmorDAO.cpp new file mode 100644 index 0000000..d148fbb --- /dev/null +++ b/gameserv-2.0/libgameservgldl/src/DataLayer/File/FileArmorDAO.cpp @@ -0,0 +1,109 @@ +#include +using GameServ::DataLayer::File::FileArmorDAO; +#include +using GameServ::GameLayer::GameObjects::ArmorGO; + +#include +using GameServ::DataLayer::Exceptions::ResourceException; +using GameServ::DataLayer::Exceptions::DataLayerException; + +#include +using GameServ::DataLayer::File::FileId; + +#include +#include +#include +#include +using boost::shared_ptr; +using boost::format; +using boost::str; +using boost::algorithm::to_upper; +using boost::lexical_cast; +#include +typedef boost::tokenizer > + tokenizer; + +#include +using std::string; + +#include +using std::ifstream; +using std::getline; +using std::ofstream; +using std::endl; + +#include +using std::map; + +// TODO: Switch filename to be loaded from a config file +FileArmorDAO::FileArmorDAO() : mFilename("data/items/masteritems.dat") +{ + Initialize(GetArmorFilePath()); +} + +FileArmorDAO::FileArmorDAO(const string &filename) +{ + Initialize(filename); +} + +FileArmorDAO::~FileArmorDAO() +{ +} + +void FileArmorDAO::Initialize(const string &filename) +{ + mFilename = filename; + LoadArmorCache(); +} + +string FileArmorDAO::GetArmorFilePath() const +{ + return mFilename; +} + +shared_ptr FileArmorDAO::GetById(const string &Id) const +{ + string line; + ifstream infile; + infile.open(GetArmorFilePath().c_str()); + + if (infile.fail()) + { + throw ResourceException(str(format("Unable to open file %1%") % GetArmorFilePath()), __FILE__, __LINE__); + } + + + while (getline(infile, line)) + { + shared_ptr spArmor = CreateArmorFromLine(line); + if (spArmor->Id() == Id) + { + return spArmor; + } + } + return shared_ptr(); +} + +shared_ptr FileArmorDAO::CreateArmorFromLine(const string &line) const +{ + assert(!line.empty()); + shared_ptr spArmor; + spArmor = shared_ptr(new ArmorGO()); + boost::char_separator sep(" ", 0, boost::keep_empty_tokens); + tokenizer tokens(line, sep); + tokenizer::iterator tok_iter = tokens.begin(); + + + + return spArmor; +} +bool FileArmorDAO::IdExists(const string &Id) const +{ + map >::const_iterator iter; + iter = spArmorCache.find(Id); + return (iter != spArmorCache.end()); +} + +void FileArmorDAO::LoadArmorCache(void) +{ +} \ No newline at end of file diff --git a/gameserv-2.0/libgameservgldl/src/DataLayer/File/FileDAOFactory.cpp b/gameserv-2.0/libgameservgldl/src/DataLayer/File/FileDAOFactory.cpp index 7935496..ef66a60 100644 --- a/gameserv-2.0/libgameservgldl/src/DataLayer/File/FileDAOFactory.cpp +++ b/gameserv-2.0/libgameservgldl/src/DataLayer/File/FileDAOFactory.cpp @@ -1,8 +1,10 @@ #include #include +#include using GameServ::DataLayer::File::FileDAOFactory; using GameServ::DataLayer::File::FilePlayerDAO; +using GameServ::DataLayer::File::FileArmorDAO; #include using boost::shared_ptr; @@ -21,4 +23,9 @@ shared_ptr FileDAOFactory::GetPlayerDAO(void) const return shared_ptr(new FilePlayerDAO()); } +shared_ptr FileDAOFactory::GetArmorDAO(void) const +{ + return shared_ptr(new FileArmorDAO()); +} + diff --git a/gameserv-2.0/libgameservgldl/src/DataLayer/File/FilePlayerDAO.cpp b/gameserv-2.0/libgameservgldl/src/DataLayer/File/FilePlayerDAO.cpp index 2d5d7e2..f0a3880 100644 --- a/gameserv-2.0/libgameservgldl/src/DataLayer/File/FilePlayerDAO.cpp +++ b/gameserv-2.0/libgameservgldl/src/DataLayer/File/FilePlayerDAO.cpp @@ -18,6 +18,7 @@ using boost::shared_ptr; using boost::format; using boost::str; using boost::algorithm::to_upper; +using boost::algorithm::to_lower; using boost::lexical_cast; #include typedef boost::tokenizer > @@ -55,7 +56,7 @@ void FilePlayerDAO::Initialize(const string &filename) LoadPlayerCache(); } -void FilePlayerDAO::LoadPlayerCache() +void FilePlayerDAO::LoadPlayerCache(void) { assert(!mFilename.empty()); spPlayerCache.clear(); @@ -72,12 +73,14 @@ void FilePlayerDAO::LoadPlayerCache() shared_ptr spPlayer; getline(infile, line); spPlayer = CreatePlayerFromLine(line); - spPlayerCache[spPlayer->Id()] = spPlayer; + string id = spPlayer->Id(); + to_lower(id); + spPlayerCache[id] = spPlayer; } infile.close(); } -void FilePlayerDAO::WritePlayerCache() +void FilePlayerDAO::WritePlayerCache(void) const { ofstream outfile; outfile.open(mFilename.c_str()); @@ -111,11 +114,14 @@ shared_ptr FilePlayerDAO::GetById(const string &Id) const throw ResourceException(str(format("Unable to open file %1%") % GetPlayerFilePath()), __FILE__, __LINE__); } - + string id = Id; + to_lower(id); while (getline(infile, line)) { shared_ptr spPlayer = CreatePlayerFromLine(line); - if (spPlayer->Id() == Id) + + // No need to convert the playerId to lowercase here, because it should already be lowercase + if (spPlayer->Id() == id) { return spPlayer; } @@ -179,12 +185,37 @@ string FilePlayerDAO::CreateLineFromPlayer(shared_ptr spPlayer) const void FilePlayerDAO::SetFlags(shared_ptr spPlayer, const int &flags) const { - // TODO: Add flags of course + if ((flags & 0x00000001) == 0x00000001) + { + spPlayer->FoughtMaster(true); + } + else + { + spPlayer->FoughtMaster(false); + } + + if ((flags & 0x00000002) == 0x00000002) + { + spPlayer->Alive(true); + } + else + { + spPlayer->Alive(false); + } } int FilePlayerDAO::GetFlags(shared_ptr spPlayer) const { - // TODO: Return real flags + int flags = 0; + + if (spPlayer->FoughtMaster()) + { + flags |= 0x00000001; + } + if (spPlayer->Alive()) + { + flags |= 0x00000002; + } return 0; } @@ -197,7 +228,9 @@ void FilePlayerDAO::Update(shared_ptr spPlayer) // TODO: Lock the file if (IdExists(spPlayer->Id())) { - spPlayerCache[spPlayer->Id()] = spPlayer; + string id = spPlayer->Id(); + to_lower(id); + spPlayerCache[id] = spPlayer; WritePlayerCache(); } else @@ -215,7 +248,9 @@ void FilePlayerDAO::Insert(shared_ptr spPlayer) if (!IdExists(FileId::CreatePlayerId(spPlayer->Name()))) { spPlayer->Id(FileId::CreatePlayerId(spPlayer->Name())); - spPlayerCache[spPlayer->Id()] = spPlayer; + string id = spPlayer->Id(); + to_lower(id); + spPlayerCache[id] = spPlayer; ofstream outfile; outfile.open(mFilename.c_str(), std::ios::app); if (outfile.fail()) @@ -235,7 +270,9 @@ void FilePlayerDAO::Insert(shared_ptr spPlayer) bool FilePlayerDAO::IdExists(const string &Id) const { map >::const_iterator iter; - iter = spPlayerCache.find(Id); + string id = Id; + to_lower(id); + iter = spPlayerCache.find(id); return (iter != spPlayerCache.end()); } diff --git a/gameserv-2.0/libgameservgldl/src/DataLayer/IArmorDAO.cpp b/gameserv-2.0/libgameservgldl/src/DataLayer/IArmorDAO.cpp new file mode 100644 index 0000000..798e010 --- /dev/null +++ b/gameserv-2.0/libgameservgldl/src/DataLayer/IArmorDAO.cpp @@ -0,0 +1,10 @@ +#include +using GameServ::DataLayer::DataAccessObjects::IArmorDAO; + +IArmorDAO::IArmorDAO() +{ +} + +IArmorDAO::~IArmorDAO() +{ +} \ No newline at end of file diff --git a/gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/PlayerGO.cpp b/gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/PlayerGO.cpp index 417c130..7d9520f 100644 --- a/gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/PlayerGO.cpp +++ b/gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/PlayerGO.cpp @@ -146,6 +146,26 @@ void PlayerGO::PlayerFights(const int &value) mPlayerFights = value; } +bool PlayerGO::Alive(void) const +{ + return mAlive; +} + +void PlayerGO::Alive(const bool &value) +{ + mAlive = value; +} + +bool PlayerGO::FoughtMaster(void) const +{ + return mFoughtMaster; +} + +void PlayerGO::FoughtMaster(const bool &value) +{ + mFoughtMaster = value; +} + shared_ptr PlayerGO::Weapon(void) const { return mWeapon;