]> jfr.im git - irc/gameservirc.git/commitdiff
Almost done the player code
authorkainazzzo <redacted>
Sun, 13 Sep 2009 22:26:51 +0000 (22:26 +0000)
committerkainazzzo <redacted>
Sun, 13 Sep 2009 22:26:51 +0000 (22:26 +0000)
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

12 files changed:
gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/File/FileArmorDAO.h [new file with mode: 0644]
gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/File/FileDAOFactory.h
gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/File/FilePlayerDAO.h
gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/IArmorDAO.h [new file with mode: 0644]
gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/IDAOFactory.h
gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/PlayerGO.h
gameserv-2.0/libgameservgldl/libgameservgldl.vcproj
gameserv-2.0/libgameservgldl/src/DataLayer/File/FileArmorDAO.cpp [new file with mode: 0644]
gameserv-2.0/libgameservgldl/src/DataLayer/File/FileDAOFactory.cpp
gameserv-2.0/libgameservgldl/src/DataLayer/File/FilePlayerDAO.cpp
gameserv-2.0/libgameservgldl/src/DataLayer/IArmorDAO.cpp [new file with mode: 0644]
gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/PlayerGO.cpp

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 (file)
index 0000000..382db45
--- /dev/null
@@ -0,0 +1,62 @@
+#ifndef __GS__FileArmorDAO_H__\r
+#define __GS__FileArmorDAO_H__\r
+\r
+#include <GameServ/GameLayer/GameObjects/ArmorGO.h>\r
+#include <GameServ/DataLayer/IArmorDAO.h>\r
+using GameServ::GameLayer::GameObjects::ArmorGO;\r
+using GameServ::DataLayer::DataAccessObjects::IArmorDAO;\r
+\r
+#include <boost/shared_ptr.hpp>\r
+using boost::shared_ptr;\r
+\r
+#include <string>\r
+using std::string;\r
+\r
+#include <list>\r
+using std::list;\r
+\r
+#include <map>\r
+using std::map;\r
+\r
+namespace GameServ {  namespace DataLayer { namespace File\r
+{\r
+       //! File implementation of IArmorDAO interface\r
+       /*!\r
+               If you're using an File datasource, you will be using this\r
+               DAO to access Armors.\r
+       */\r
+       class FileArmorDAO : public IArmorDAO\r
+       {\r
+       public:\r
+               // Ctors, Dtors ///////////////////////////////////////////////////////\r
+               FileArmorDAO(void);\r
+               FileArmorDAO(const string &filename);\r
+               virtual ~FileArmorDAO();\r
+\r
+               // Methods ////////////////////////////////////////////////////////////\r
+               virtual shared_ptr<ArmorGO> GetById(const string &Id) const;\r
+\r
+               virtual bool IdExists(const string &Id) const;\r
+\r
+               void LoadArmorCache(void);\r
+\r
+       private:\r
+               //! Data file\r
+               string mFilename;\r
+\r
+               // Helper Methods /////////////////////////////////////////////////////\r
+\r
+               //! Creates the ArmorGO found at iterator position\r
+               shared_ptr<ArmorGO> CreateArmorFromLine(const string &line) const;\r
+\r
+               //! Get the Armor database file path\r
+               string GetArmorFilePath(void) const;\r
+\r
+               void Initialize(const string &filename);\r
+\r
+\r
+               map<string, shared_ptr<ArmorGO> > spArmorCache;\r
+       };\r
+} } } // GameServ.DataLayer.DataAccessObjects.File\r
+\r
+#endif // __GS__FileArmorDAO_H__\r
index 29671e3f808d76ddf59c8eb11ef316f4604835e3..535678a7ab8e4b69147c932af1629ba8f7f1e9a0 100644 (file)
@@ -6,10 +6,9 @@
 using GameServ::DataLayer::IDAOFactory;\r
 \r
 #include <GameServ/DataLayer/IPlayerDAO.h>\r
-\r
-\r
 using GameServ::DataLayer::DataAccessObjects::IPlayerDAO;\r
-\r
+#include <GameServ/DataLayer/IArmorDAO.h>\r
+using GameServ::DataLayer::DataAccessObjects::IArmorDAO;\r
 \r
 #include <boost/shared_ptr.hpp>\r
 using boost::shared_ptr;\r
@@ -29,6 +28,7 @@ namespace GameServ { namespace DataLayer { namespace File
                // Overrides //////////////////////////////////////////////////////////\r
                \r
                virtual shared_ptr<IPlayerDAO> GetPlayerDAO(void) const;\r
+               virtual shared_ptr<IArmorDAO> GetArmorDAO(void) const;\r
        private:\r
 \r
 \r
index e79fd9aadaf30c13f4723c22e5c2872415503d85..f81d771c86217dd8fcbdae740aff1047af48e040 100644 (file)
@@ -46,13 +46,14 @@ namespace GameServ {  namespace DataLayer { namespace File
                virtual void SetFlags(shared_ptr<PlayerGO> spPlayer, const int &flags) const;\r
                virtual int GetFlags(shared_ptr<PlayerGO> spPlayer) const;\r
 \r
+               void LoadPlayerCache(void);\r
+               void WritePlayerCache(void) const;\r
+\r
        private:\r
                //! Data file\r
                string mFilename;\r
 \r
                // Helper Methods /////////////////////////////////////////////////////\r
-               //! Get control sector information\r
-               void GetControlInfo(void);\r
 \r
                //! Creates the PlayerGO found at iterator position\r
                shared_ptr<PlayerGO> CreatePlayerFromLine(const string &line) const;\r
@@ -62,12 +63,8 @@ namespace GameServ {  namespace DataLayer { namespace File
                string GetPlayerFilePath(void) const;\r
 \r
                void Initialize(const string &filename);\r
-               void LoadPlayerCache();\r
-               void WritePlayerCache();\r
 \r
-               //! string is the id and the shared_ptr<PlayerGO> is the player object\r
                map<string, shared_ptr<PlayerGO> > spPlayerCache;\r
-\r
        };\r
 } } } // GameServ.DataLayer.DataAccessObjects.File\r
 \r
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 (file)
index 0000000..fa73cfa
--- /dev/null
@@ -0,0 +1,50 @@
+#ifndef __GS_IARMORDAO_H__\r
+#define __GS_IARMORDAO_H__\r
+\r
+#include <GameServ/GameLayer/GameObjects/ArmorGO.h>\r
+using GameServ::GameLayer::GameObjects::ArmorGO;\r
+\r
+#include <boost/shared_ptr.hpp>\r
+using boost::shared_ptr;\r
+\r
+#include <list>\r
+using std::list;\r
+#include <string>\r
+using std::string;\r
+\r
+namespace GameServ { namespace DataLayer { namespace DataAccessObjects\r
+{\r
+       //! Interface for Armor Data Access Objects \r
+       /*! \r
+               This is the interface for all Armor DAOs.  Each specific datasource\r
+               will need to inherit this common interface.\r
+       */\r
+       class IArmorDAO\r
+       {\r
+       public:\r
+               // Ctors, Dtors ///////////////////////////////////////////////////////\r
+               IArmorDAO(void);\r
+               virtual ~IArmorDAO(void);       // Needs to be virtual \r
+\r
+               //! Get the Armor using a unique data/object Id\r
+               /*!\r
+                       \param Id Unique identifier\r
+                       \return A boost shared pointer to a Armor game object if found\r
+                       otherwise the list is empty.\r
+               */\r
+               virtual shared_ptr<ArmorGO> GetById(const string &Id) const = 0;\r
+\r
+               //! Function to quickly search to see if an Id exists or not\r
+               /*!\r
+               \param Id The Id of the game object to search for\r
+               \return true if the Id is valid and exists in the data, false otherwise\r
+               */\r
+               virtual bool IdExists(const string &Id) const = 0;\r
+\r
+       private:\r
+               \r
+               \r
+       };\r
+} } }\r
+\r
+#endif
\ No newline at end of file
index 2f948ae17183d698b81c0381d5e3ea9233eb8974..a7c1427f91a6be7d9dbc073fa3f467cca05a74f9 100644 (file)
@@ -2,8 +2,9 @@
 #define __GS__IDAOFACTORY_H__\r
 \r
 #include <GameServ/DataLayer/IPlayerDAO.h>\r
-\r
 using GameServ::DataLayer::DataAccessObjects::IPlayerDAO;\r
+#include <GameServ/DataLayer/IArmorDAO.h>\r
+using GameServ::DataLayer::DataAccessObjects::IArmorDAO;\r
 \r
 #include <boost/shared_ptr.hpp>\r
 using boost::shared_ptr;\r
@@ -26,6 +27,8 @@ namespace GameServ { namespace DataLayer
                //! Test DataAccessObject for all test related operations\r
                virtual shared_ptr<IPlayerDAO> GetPlayerDAO(void) const = 0;\r
 \r
+               virtual shared_ptr<IArmorDAO> GetArmorDAO(void) const = 0;\r
+\r
        private:\r
 \r
        };\r
index 2862c6b60cf2b506ee675631183700b7bf08785d..2022f712169dac316f65d68c2f8a1767b5144aca 100644 (file)
@@ -113,7 +113,17 @@ namespace GameServ { namespace GameLayer { namespace GameObjects
                //! Property get - LastLogin\r
                ptime LastLogin(void) const;\r
 \r
-               // TODO: Add boolean flags\r
+               //! Property get - FoughtMaster\r
+               bool FoughtMaster(void) const;\r
+\r
+               //! Property set - Fought master\r
+               void FoughtMaster(const bool &value);\r
+\r
+               //! Property get - Alive\r
+               bool Alive(void) const;\r
+\r
+               //! Property set - Alive\r
+               void Alive(const bool &value);\r
 \r
                bool operator==(const PlayerGO &right) const;\r
                bool operator!=(const PlayerGO &right) const;\r
@@ -138,7 +148,8 @@ namespace GameServ { namespace GameLayer { namespace GameObjects
                vector< shared_ptr<ItemGO> > mInventory;\r
                ptime mLastLogin;\r
 \r
-               // TODO: Add flag long int\r
+               bool mFoughtMaster;\r
+               bool mAlive;\r
        };\r
 }}} // GameServ::GameLayer::GameObjects\r
 #endif
\ No newline at end of file
index ca6abda14b68b2969250faa05ad9f2a371492e2d..2643caecb8fadb750aa5f51a604a8adf16c28bfd 100644 (file)
                                RelativePath=".\include\GameServ\DataLayer\DataLayerExceptions.h"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath=".\src\DataLayer\IArmorDAO.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\include\GameServ\DataLayer\IArmorDAO.h"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath=".\include\GameServ\DataLayer\IDAOFactory.h"\r
                                >\r
                        <Filter\r
                                Name="File"\r
                                >\r
+                               <File\r
+                                       RelativePath=".\src\DataLayer\File\FileArmorDAO.cpp"\r
+                                       >\r
+                               </File>\r
+                               <File\r
+                                       RelativePath=".\include\GameServ\DataLayer\File\FileArmorDAO.h"\r
+                                       >\r
+                               </File>\r
                                <File\r
                                        RelativePath=".\src\DataLayer\File\FileDAOFactory.cpp"\r
                                        >\r
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 (file)
index 0000000..d148fbb
--- /dev/null
@@ -0,0 +1,109 @@
+#include <GameServ/DataLayer/File/FileArmorDAO.h>\r
+using GameServ::DataLayer::File::FileArmorDAO;\r
+#include <GameServ/GameLayer/GameObjects/ArmorGO.h>\r
+using GameServ::GameLayer::GameObjects::ArmorGO;\r
+\r
+#include <GameServ/DataLayer/DataLayerExceptions.h>\r
+using GameServ::DataLayer::Exceptions::ResourceException;\r
+using GameServ::DataLayer::Exceptions::DataLayerException;\r
+\r
+#include <GameServ/DataLayer/File/FileId.h>\r
+using GameServ::DataLayer::File::FileId;\r
+\r
+#include <boost/shared_ptr.hpp>\r
+#include <boost/format.hpp>\r
+#include <boost/algorithm/string.hpp>\r
+#include <boost/lexical_cast.hpp>\r
+using boost::shared_ptr;\r
+using boost::format;\r
+using boost::str;\r
+using boost::algorithm::to_upper;\r
+using boost::lexical_cast;\r
+#include <boost/tokenizer.hpp>\r
+typedef boost::tokenizer<boost::char_separator<char> > \r
+    tokenizer;\r
+\r
+#include <string>\r
+using std::string;\r
+\r
+#include <fstream>\r
+using std::ifstream;\r
+using std::getline;\r
+using std::ofstream;\r
+using std::endl;\r
+\r
+#include <map>\r
+using std::map;\r
+\r
+// TODO: Switch filename to be loaded from a config file\r
+FileArmorDAO::FileArmorDAO() : mFilename("data/items/masteritems.dat")\r
+{\r
+       Initialize(GetArmorFilePath());\r
+}\r
+\r
+FileArmorDAO::FileArmorDAO(const string &filename)\r
+{\r
+       Initialize(filename);\r
+}\r
+\r
+FileArmorDAO::~FileArmorDAO()\r
+{\r
+}\r
+\r
+void FileArmorDAO::Initialize(const string &filename)\r
+{\r
+       mFilename = filename;\r
+       LoadArmorCache();\r
+}\r
+\r
+string FileArmorDAO::GetArmorFilePath() const\r
+{\r
+       return mFilename;\r
+}\r
+\r
+shared_ptr<ArmorGO> FileArmorDAO::GetById(const string &Id) const\r
+{\r
+       string line;\r
+       ifstream infile;\r
+       infile.open(GetArmorFilePath().c_str());\r
+\r
+       if (infile.fail())\r
+       {\r
+               throw ResourceException(str(format("Unable to open file %1%") % GetArmorFilePath()), __FILE__, __LINE__);\r
+       }\r
+\r
+\r
+       while (getline(infile, line))\r
+       {\r
+               shared_ptr<ArmorGO> spArmor = CreateArmorFromLine(line);\r
+               if (spArmor->Id() == Id)\r
+               {\r
+                       return spArmor;\r
+               }\r
+       }\r
+       return shared_ptr<ArmorGO>();\r
+}\r
+\r
+shared_ptr<ArmorGO> FileArmorDAO::CreateArmorFromLine(const string &line) const\r
+{\r
+       assert(!line.empty());\r
+       shared_ptr<ArmorGO> spArmor;\r
+       spArmor = shared_ptr<ArmorGO>(new ArmorGO());\r
+       boost::char_separator<char> sep(" ", 0, boost::keep_empty_tokens);\r
+       tokenizer tokens(line, sep);\r
+       tokenizer::iterator tok_iter = tokens.begin();\r
+\r
+\r
+\r
+       return spArmor;\r
+}\r
+bool FileArmorDAO::IdExists(const string &Id) const\r
+{\r
+       map<string, shared_ptr<ArmorGO> >::const_iterator iter;\r
+       iter = spArmorCache.find(Id);\r
+       return (iter != spArmorCache.end());\r
+}\r
+\r
+void FileArmorDAO::LoadArmorCache(void)\r
+{\r
+}
\ No newline at end of file
index 79354965cac2f37c485d4fd3f4be626e2bc1875c..ef66a60f0be1808a8088ac97b5923e6fcd7e938a 100644 (file)
@@ -1,8 +1,10 @@
 #include <GameServ/DataLayer/File/FileDAOFactory.h>\r
 #include <GameServ/DataLayer/File/FilePlayerDAO.h>\r
+#include <GameServ/DataLayer/File/FileArmorDAO.h>\r
 \r
 using GameServ::DataLayer::File::FileDAOFactory;\r
 using GameServ::DataLayer::File::FilePlayerDAO;\r
+using GameServ::DataLayer::File::FileArmorDAO;\r
 \r
 #include <boost/shared_ptr.hpp>\r
 using boost::shared_ptr;\r
@@ -21,4 +23,9 @@ shared_ptr<IPlayerDAO> FileDAOFactory::GetPlayerDAO(void) const
        return shared_ptr<IPlayerDAO>(new FilePlayerDAO());\r
 }\r
 \r
+shared_ptr<IArmorDAO> FileDAOFactory::GetArmorDAO(void) const\r
+{\r
+       return shared_ptr<IArmorDAO>(new FileArmorDAO());\r
+}\r
+\r
 \r
index 2d5d7e24ab3fcb8345da0b28e220af18950eeabd..f0a3880ea60795348764e3fba4cc3c32de52d99c 100644 (file)
@@ -18,6 +18,7 @@ using boost::shared_ptr;
 using boost::format;\r
 using boost::str;\r
 using boost::algorithm::to_upper;\r
+using boost::algorithm::to_lower;\r
 using boost::lexical_cast;\r
 #include <boost/tokenizer.hpp>\r
 typedef boost::tokenizer<boost::char_separator<char> > \r
@@ -55,7 +56,7 @@ void FilePlayerDAO::Initialize(const string &filename)
        LoadPlayerCache();\r
 }\r
 \r
-void FilePlayerDAO::LoadPlayerCache()\r
+void FilePlayerDAO::LoadPlayerCache(void)\r
 {\r
        assert(!mFilename.empty());\r
        spPlayerCache.clear();\r
@@ -72,12 +73,14 @@ void FilePlayerDAO::LoadPlayerCache()
                shared_ptr<PlayerGO> spPlayer;\r
                getline(infile, line);\r
                spPlayer = CreatePlayerFromLine(line);\r
-               spPlayerCache[spPlayer->Id()] = spPlayer;\r
+               string id = spPlayer->Id();\r
+               to_lower(id);\r
+               spPlayerCache[id] = spPlayer;\r
        }\r
        infile.close();\r
 }\r
 \r
-void FilePlayerDAO::WritePlayerCache()\r
+void FilePlayerDAO::WritePlayerCache(void) const\r
 {\r
        ofstream outfile;\r
        outfile.open(mFilename.c_str());\r
@@ -111,11 +114,14 @@ shared_ptr<PlayerGO> FilePlayerDAO::GetById(const string &Id) const
                throw ResourceException(str(format("Unable to open file %1%") % GetPlayerFilePath()), __FILE__, __LINE__);\r
        }\r
 \r
-\r
+       string id = Id;\r
+       to_lower(id);\r
        while (getline(infile, line))\r
        {\r
                shared_ptr<PlayerGO> spPlayer = CreatePlayerFromLine(line);\r
-               if (spPlayer->Id() == Id)\r
+               \r
+               // No need to convert the playerId to lowercase here, because it should already be lowercase\r
+               if (spPlayer->Id() == id)\r
                {\r
                        return spPlayer;\r
                }\r
@@ -179,12 +185,37 @@ string FilePlayerDAO::CreateLineFromPlayer(shared_ptr<PlayerGO> spPlayer) const
 \r
 void FilePlayerDAO::SetFlags(shared_ptr<PlayerGO> spPlayer, const int &flags) const\r
 {\r
-       // TODO: Add flags of course\r
+       if ((flags & 0x00000001) == 0x00000001)\r
+       {\r
+               spPlayer->FoughtMaster(true);\r
+       }\r
+       else\r
+       {\r
+               spPlayer->FoughtMaster(false);\r
+       }\r
+\r
+       if ((flags & 0x00000002) == 0x00000002)\r
+       {\r
+               spPlayer->Alive(true);\r
+       }\r
+       else\r
+       {\r
+               spPlayer->Alive(false);\r
+       }\r
 }\r
 \r
 int FilePlayerDAO::GetFlags(shared_ptr<PlayerGO> spPlayer) const\r
 {\r
-       // TODO: Return real flags\r
+       int flags = 0;\r
+\r
+       if (spPlayer->FoughtMaster())\r
+       {\r
+               flags |= 0x00000001;\r
+       }\r
+       if (spPlayer->Alive())\r
+       {\r
+               flags |= 0x00000002;\r
+       }\r
        return 0;\r
 }\r
 \r
@@ -197,7 +228,9 @@ void FilePlayerDAO::Update(shared_ptr<PlayerGO> spPlayer)
        // TODO: Lock the file\r
        if (IdExists(spPlayer->Id()))\r
        {\r
-               spPlayerCache[spPlayer->Id()] = spPlayer;\r
+               string id = spPlayer->Id();\r
+               to_lower(id);\r
+               spPlayerCache[id] = spPlayer;\r
                WritePlayerCache();\r
        }\r
        else\r
@@ -215,7 +248,9 @@ void FilePlayerDAO::Insert(shared_ptr<PlayerGO> spPlayer)
        if (!IdExists(FileId::CreatePlayerId(spPlayer->Name())))\r
        {\r
                spPlayer->Id(FileId::CreatePlayerId(spPlayer->Name()));\r
-               spPlayerCache[spPlayer->Id()] = spPlayer;\r
+               string id = spPlayer->Id();\r
+               to_lower(id);\r
+               spPlayerCache[id] = spPlayer;\r
                ofstream outfile;\r
                outfile.open(mFilename.c_str(), std::ios::app);\r
                if (outfile.fail())\r
@@ -235,7 +270,9 @@ void FilePlayerDAO::Insert(shared_ptr<PlayerGO> spPlayer)
 bool FilePlayerDAO::IdExists(const string &Id) const\r
 {\r
        map<string, shared_ptr<PlayerGO> >::const_iterator iter;\r
-       iter = spPlayerCache.find(Id);\r
+       string id = Id;\r
+       to_lower(id);\r
+       iter = spPlayerCache.find(id);\r
        return (iter != spPlayerCache.end());\r
 }\r
 \r
diff --git a/gameserv-2.0/libgameservgldl/src/DataLayer/IArmorDAO.cpp b/gameserv-2.0/libgameservgldl/src/DataLayer/IArmorDAO.cpp
new file mode 100644 (file)
index 0000000..798e010
--- /dev/null
@@ -0,0 +1,10 @@
+#include <GameServ/DataLayer/IArmorDAO.h>\r
+using GameServ::DataLayer::DataAccessObjects::IArmorDAO;\r
+\r
+IArmorDAO::IArmorDAO()\r
+{\r
+}\r
+\r
+IArmorDAO::~IArmorDAO()\r
+{\r
+}
\ No newline at end of file
index 417c1304fec4d0cf62865e43a8fdd179c6c9dbc7..7d9520f8f8fb199922d1017aa91052e7115671e5 100644 (file)
@@ -146,6 +146,26 @@ void PlayerGO::PlayerFights(const int &value)
        mPlayerFights = value;\r
 }\r
 \r
+bool PlayerGO::Alive(void) const\r
+{\r
+       return mAlive;\r
+}\r
+\r
+void PlayerGO::Alive(const bool &value)\r
+{\r
+       mAlive = value;\r
+}\r
+\r
+bool PlayerGO::FoughtMaster(void) const\r
+{\r
+       return mFoughtMaster;\r
+}\r
+\r
+void PlayerGO::FoughtMaster(const bool &value)\r
+{\r
+       mFoughtMaster = value;\r
+}\r
+\r
 shared_ptr<WeaponGO> PlayerGO::Weapon(void) const\r
 {\r
        return mWeapon;\r