]> jfr.im git - irc/gameservirc.git/commitdiff
Added a FileWeaponDAO which is basically the same as the FileArmorDAO
authorkainazzzo <redacted>
Tue, 15 Sep 2009 16:45:11 +0000 (16:45 +0000)
committerkainazzzo <redacted>
Tue, 15 Sep 2009 16:45:11 +0000 (16:45 +0000)
git-svn-id: https://svn.code.sf.net/p/gameservirc/code/trunk@519 bc333340-6410-0410-a689-9d09f3c113fa

gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/File/FileDAOFactory.h
gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/File/FileWeaponDAO.h [new file with mode: 0644]
gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/IDAOFactory.h
gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/IWeaponDAO.h [new file with mode: 0644]
gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/WeaponGO.h
gameserv-2.0/libgameservgldl/libgameservgldl.vcproj
gameserv-2.0/libgameservgldl/src/DataLayer/File/FileDAOFactory.cpp
gameserv-2.0/libgameservgldl/src/DataLayer/File/FilePlayerDAO.cpp
gameserv-2.0/libgameservgldl/src/DataLayer/File/FileWeaponDAO.cpp [new file with mode: 0644]
gameserv-2.0/libgameservgldl/src/DataLayer/IWeaponDAO.cpp [new file with mode: 0644]

index 25e6b199126277322c40903660767fcb6c478c25..7e33acaefa512e5ccacb2ce2f6bbcef10ea8f72a 100644 (file)
@@ -9,6 +9,8 @@ using GameServ::DataLayer::IDAOFactory;
 using GameServ::DataLayer::DataAccessObjects::IPlayerDAO;\r
 #include <GameServ/DataLayer/IArmorDAO.h>\r
 using GameServ::DataLayer::DataAccessObjects::IArmorDAO;\r
+#include <GameServ/DataLayer/IWeaponDAO.h>\r
+using GameServ::DataLayer::DataAccessObjects::IWeaponDAO;\r
 \r
 #include <boost/smart_ptr/shared_ptr.hpp>\r
 using boost::shared_ptr;\r
@@ -29,6 +31,8 @@ namespace GameServ { namespace DataLayer { namespace File
                \r
                virtual shared_ptr<IPlayerDAO> GetPlayerDAO(void) const;\r
                virtual shared_ptr<IArmorDAO> GetArmorDAO(void) const;\r
+               virtual shared_ptr<IWeaponDAO> GetWeaponDAO(void) const;\r
+\r
        private:\r
 \r
 \r
diff --git a/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/File/FileWeaponDAO.h b/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/File/FileWeaponDAO.h
new file mode 100644 (file)
index 0000000..a385b0a
--- /dev/null
@@ -0,0 +1,62 @@
+#ifndef __GS__FILEWEAPONDAO_H__\r
+#define __GS__FILEWEAPONDAO_H__\r
+\r
+#include <GameServ/GameLayer/GameObjects/WeaponGO.h>\r
+#include <GameServ/DataLayer/IWeaponDAO.h>\r
+using GameServ::GameLayer::GameObjects::WeaponGO;\r
+using GameServ::DataLayer::DataAccessObjects::IWeaponDAO;\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 IWeaponDAO interface\r
+       /*!\r
+               If you're using an File datasource, you will be using this\r
+               DAO to access Weapons.\r
+       */\r
+       class FileWeaponDAO : public IWeaponDAO\r
+       {\r
+       public:\r
+               // Ctors, Dtors ///////////////////////////////////////////////////////\r
+               FileWeaponDAO(void);\r
+               FileWeaponDAO(const string &filename);\r
+               virtual ~FileWeaponDAO();\r
+\r
+               // Methods ////////////////////////////////////////////////////////////\r
+               virtual shared_ptr<WeaponGO> GetById(const string &Id) const;\r
+\r
+               virtual bool IdExists(const string &Id) const;\r
+\r
+               void LoadWeaponCache(void);\r
+\r
+       private:\r
+               //! Data file\r
+               string mFilename;\r
+\r
+               // Helper Methods /////////////////////////////////////////////////////\r
+\r
+               //! Creates the WeaponGO found at iterator position\r
+               shared_ptr<WeaponGO> CreateWeaponFromLine(const string &line) const;\r
+\r
+               //! Get the Weapon database file path\r
+               string GetWeaponFilePath(void) const;\r
+\r
+               void Initialize(const string &filename);\r
+\r
+\r
+               map<string, shared_ptr<WeaponGO> > spWeaponCache;\r
+       };\r
+} } } // GameServ.DataLayer.DataAccessObjects.File\r
+\r
+#endif // __GS__FileWeaponDAO_H__\r
index 28ae8c086f26057411762d11a7a8542fdc3c01d4..85f66d7ab7857e5bb4dc9692aedc480f5792f6cf 100644 (file)
@@ -5,6 +5,8 @@
 using GameServ::DataLayer::DataAccessObjects::IPlayerDAO;\r
 #include <GameServ/DataLayer/IArmorDAO.h>\r
 using GameServ::DataLayer::DataAccessObjects::IArmorDAO;\r
+#include <GameServ/DataLayer/IWeaponDAO.h>\r
+using GameServ::DataLayer::DataAccessObjects::IWeaponDAO;\r
 \r
 #include <boost/smart_ptr/shared_ptr.hpp>\r
 using boost::shared_ptr;\r
@@ -24,11 +26,15 @@ namespace GameServ { namespace DataLayer
                //! Base abstract class, we need virtual dtor\r
                virtual ~IDAOFactory(void) { }\r
 \r
-               //! Test DataAccessObject for all test related operations\r
+               //! Player DataAccessObject for all Player related operations\r
                virtual shared_ptr<IPlayerDAO> GetPlayerDAO(void) const = 0;\r
 \r
+               //! Armor DataAccessObject for all armor related operations\r
                virtual shared_ptr<IArmorDAO> GetArmorDAO(void) const = 0;\r
 \r
+               //! Weapon DataAccessObject for all weapon related operations\r
+               virtual shared_ptr<IWeaponDAO> GetWeaponDAO(void) const = 0;\r
+\r
        private:\r
 \r
        };\r
diff --git a/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/IWeaponDAO.h b/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/IWeaponDAO.h
new file mode 100644 (file)
index 0000000..cda8930
--- /dev/null
@@ -0,0 +1,50 @@
+#ifndef __GS_IWEAPONDAO_H__\r
+#define __GS_IWEAPONDAO_H__\r
+\r
+#include <GameServ/GameLayer/GameObjects/WeaponGO.h>\r
+using GameServ::GameLayer::GameObjects::WeaponGO;\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 Weapon Data Access Objects \r
+       /*! \r
+               This is the interface for all Weapon DAOs.  Each specific datasource\r
+               will need to inherit this common interface.\r
+       */\r
+       class IWeaponDAO\r
+       {\r
+       public:\r
+               // Ctors, Dtors ///////////////////////////////////////////////////////\r
+               IWeaponDAO(void);\r
+               virtual ~IWeaponDAO(void);      // Needs to be virtual \r
+\r
+               //! Get the Weapon using a unique data/object Id\r
+               /*!\r
+                       \param Id Unique identifier\r
+                       \return A boost shared pointer to a Weapon game object if found\r
+                       otherwise the list is empty.\r
+               */\r
+               virtual shared_ptr<WeaponGO> 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 f4b8fec2fa963351a5bb5800c7b80a170206e384..b44cbff29bd46727297fa73bd9b26886aa43a1fe 100644 (file)
@@ -4,6 +4,11 @@
 #include <string>\r
 using std::string;\r
 \r
+#include <GameServ/GameLayer/GameObjects/GameObject.h>\r
+using GameServ::GameLayer::GameObjects::GameObject;\r
+#include <GameServ/GameLayer/GameObjects/ItemGO.h>\r
+using GameServ::GameLayer::GameObjects::ItemGO;\r
+\r
 namespace GameServ { namespace GameLayer { namespace GameObjects {\r
 \r
        class WeaponGO : public ItemGO\r
index 29b6799ca6d8958186e63dc39fe187b0d10c14ea..a9ae0069002027dec2027aeff1400f7a72264258 100644 (file)
                                RelativePath=".\include\GameServ\DataLayer\IPlayerDAO.h"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath=".\src\DataLayer\IWeaponDAO.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\include\GameServ\DataLayer\IWeaponDAO.h"\r
+                               >\r
+                       </File>\r
                        <Filter\r
                                Name="File"\r
                                >\r
                                        RelativePath=".\include\GameServ\DataLayer\File\FilePlayerDAO.h"\r
                                        >\r
                                </File>\r
+                               <File\r
+                                       RelativePath=".\src\DataLayer\File\FileWeaponDAO.cpp"\r
+                                       >\r
+                               </File>\r
+                               <File\r
+                                       RelativePath=".\include\GameServ\DataLayer\File\FileWeaponDAO.h"\r
+                                       >\r
+                               </File>\r
                        </Filter>\r
                </Filter>\r
                <Filter\r
index a825849df62ec3209629b8e22bfe04f1193788d2..37a2dcbb5a7c130b1ac2bcd6918d106d49a903d8 100644 (file)
@@ -1,10 +1,12 @@
 #include <GameServ/DataLayer/File/FileDAOFactory.h>\r
 #include <GameServ/DataLayer/File/FilePlayerDAO.h>\r
 #include <GameServ/DataLayer/File/FileArmorDAO.h>\r
+#include <GameServ/DataLayer/File/FileWeaponDAO.h>\r
 \r
 using GameServ::DataLayer::File::FileDAOFactory;\r
 using GameServ::DataLayer::File::FilePlayerDAO;\r
 using GameServ::DataLayer::File::FileArmorDAO;\r
+using GameServ::DataLayer::File::FileWeaponDAO;\r
 \r
 #include <boost/smart_ptr/shared_ptr.hpp>\r
 using boost::shared_ptr;\r
@@ -17,7 +19,6 @@ FileDAOFactory::~FileDAOFactory(void)
 {\r
 }\r
 \r
-\r
 shared_ptr<IPlayerDAO> FileDAOFactory::GetPlayerDAO(void) const\r
 {\r
        return shared_ptr<IPlayerDAO>(new FilePlayerDAO());\r
@@ -28,4 +29,7 @@ shared_ptr<IArmorDAO> FileDAOFactory::GetArmorDAO(void) const
        return shared_ptr<IArmorDAO>(new FileArmorDAO());\r
 }\r
 \r
-\r
+shared_ptr<IWeaponDAO> FileDAOFactory::GetWeaponDAO(void) const\r
+{\r
+       return shared_ptr<IWeaponDAO>(new FileWeaponDAO());\r
+}\r
index 6a8af4e3d3fc3f7a7f384cc4fdc6eaf3ab1a9d17..7d64342fa3b9b69731a3cfaaee64d3c5efcfda24 100644 (file)
@@ -2,6 +2,8 @@
 using GameServ::DataLayer::File::FilePlayerDAO;\r
 #include <GameServ/DataLayer/File/FileArmorDAO.h>\r
 using GameServ::DataLayer::File::FileArmorDAO;\r
+#include <GameServ/DataLayer/File/FileWeaponDAO.h>\r
+using GameServ::DataLayer::File::FileWeaponDAO;\r
 \r
 #include <GameServ/GameLayer/GameObjects/PlayerGO.h>\r
 using GameServ::GameLayer::GameObjects::PlayerGO;\r
@@ -23,12 +25,13 @@ using boost::str;
 using boost::algorithm::to_upper;\r
 using boost::algorithm::to_lower;\r
 using boost::lexical_cast;\r
+using boost::bad_lexical_cast;\r
 #include <boost/tokenizer.hpp>\r
 typedef boost::tokenizer<boost::char_separator<char> > \r
     tokenizer;\r
 \r
 #include <boost/date_time/posix_time/posix_time.hpp>\r
-using boost::posix_time::ptime;\r
+using namespace boost::posix_time;\r
 \r
 #include <time.h>\r
 \r
@@ -176,21 +179,36 @@ shared_ptr<PlayerGO> FilePlayerDAO::CreatePlayerFromLine(const string &line) con
 \r
        \r
        tok_iter++;\r
-       unsigned long int intlast = lexical_cast<unsigned long int>((*tok_iter));\r
-       time_t t = (time_t)intlast;\r
-       struct tm *tmlastlogin = localtime(&t);\r
-       spPlayer->LastLogin(boost::posix_time::ptime_from_tm(*tmlastlogin));\r
+       try\r
+       {\r
+               unsigned long int intlast = lexical_cast<unsigned long int>((*tok_iter));\r
+               time_t t = (time_t)intlast;\r
+               spPlayer->LastLogin(from_time_t(t));\r
+       }\r
+       catch (bad_lexical_cast)\r
+       {\r
+               spPlayer->LastLogin(from_iso_string((*tok_iter)));\r
+       }\r
 \r
        \r
        // Weapon\r
        tok_iter++;\r
+       FileWeaponDAO wdao;\r
+       string weaponid = FileId::CreateItemId(ItemTypes::Weapon, (*tok_iter));\r
+       spPlayer->Weapon(wdao.GetById(weaponid));\r
 \r
        // Armor\r
        tok_iter++;\r
        FileArmorDAO adao;\r
        string armorid = FileId::CreateItemId(ItemTypes::Armor, (*tok_iter));\r
-       \r
+       spPlayer->Armor(adao.GetById(armorid));\r
 \r
+       tok_iter++;\r
+       while (tok_iter != tokens.end())\r
+       {\r
+               // Load all the items into the player's inventory\r
+               tok_iter++;\r
+       }\r
        \r
        return spPlayer;\r
 }\r
@@ -199,11 +217,11 @@ string FilePlayerDAO::CreateLineFromPlayer(shared_ptr<PlayerGO> spPlayer) const
 {\r
        string line;\r
        // TODO: Add weapons, armor, and items\r
-       line = str(format("%1% %2% %3% %4% %5% %6% %7% %8% %9% %10% %11% %12% %13%") % \r
+       line = str(format("%1% %2% %3% %4% %5% %6% %7% %8% %9% %10% %11% %12% %13% %14%") % \r
                spPlayer->Name() % spPlayer->Level() % spPlayer->Experience() % spPlayer->Gold() %\r
                spPlayer->Bank() % spPlayer->Health() % spPlayer->MaxHealth() % spPlayer->Strength() %\r
                spPlayer->Defense() % spPlayer->ForestFights() % spPlayer->PlayerFights() %\r
-               GetFlags(spPlayer) % spPlayer->Password());\r
+               GetFlags(spPlayer) % spPlayer->Password() % (to_iso_string(spPlayer->LastLogin())));\r
        return line;\r
 }\r
 \r
diff --git a/gameserv-2.0/libgameservgldl/src/DataLayer/File/FileWeaponDAO.cpp b/gameserv-2.0/libgameservgldl/src/DataLayer/File/FileWeaponDAO.cpp
new file mode 100644 (file)
index 0000000..f7ca38b
--- /dev/null
@@ -0,0 +1,165 @@
+#include <GameServ/DataLayer/File/FileWeaponDAO.h>\r
+using GameServ::DataLayer::File::FileWeaponDAO;\r
+#include <GameServ/GameLayer/GameObjects/WeaponGO.h>\r
+using GameServ::GameLayer::GameObjects::WeaponGO;\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 <GameServ/Types.h>\r
+using GameServ::Types::ItemTypes;\r
+using GameServ::Types::Modifiers;\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
+FileWeaponDAO::FileWeaponDAO() : mFilename("data/items/masteritems.dat")\r
+{\r
+       Initialize(GetWeaponFilePath());\r
+}\r
+\r
+FileWeaponDAO::FileWeaponDAO(const string &filename)\r
+{\r
+       Initialize(filename);\r
+}\r
+\r
+FileWeaponDAO::~FileWeaponDAO()\r
+{\r
+}\r
+\r
+void FileWeaponDAO::Initialize(const string &filename)\r
+{\r
+       mFilename = filename;\r
+       LoadWeaponCache();\r
+}\r
+\r
+string FileWeaponDAO::GetWeaponFilePath() const\r
+{\r
+       return mFilename;\r
+}\r
+\r
+shared_ptr<WeaponGO> FileWeaponDAO::GetById(const string &Id) const\r
+{\r
+       string line;\r
+       ifstream infile;\r
+       infile.open(GetWeaponFilePath().c_str());\r
+\r
+       if (infile.fail())\r
+       {\r
+               throw ResourceException(str(format("Unable to open file %1%") % GetWeaponFilePath()), __FILE__, __LINE__);\r
+       }\r
+\r
+\r
+       while (getline(infile, line))\r
+       {\r
+               shared_ptr<WeaponGO> spWeapon = CreateWeaponFromLine(line);\r
+               if (spWeapon->Id() == Id)\r
+               {\r
+                       return spWeapon;\r
+               }\r
+       }\r
+       return shared_ptr<WeaponGO>();\r
+}\r
+\r
+shared_ptr<WeaponGO> FileWeaponDAO::CreateWeaponFromLine(const string &line) const\r
+{\r
+       assert(!line.empty());\r
+       shared_ptr<WeaponGO> spWeapon;\r
+       map<Modifiers::Modifier, int> modifiers;\r
+       spWeapon = shared_ptr<WeaponGO>(new WeaponGO());\r
+       boost::char_separator<char> sep("~", 0, boost::keep_empty_tokens);\r
+       tokenizer tokens(line, sep);\r
+       tokenizer::iterator tok_iter = tokens.begin();\r
+       if ((*tok_iter) != "1")\r
+               return shared_ptr<WeaponGO>();\r
+       tok_iter++;\r
+       spWeapon->Id(FileId::CreateItemId(ItemTypes::Weapon, (*tok_iter)));\r
+\r
+       tok_iter++;\r
+       spWeapon->Name((*tok_iter));\r
+       tok_iter++;\r
+       spWeapon->Price(lexical_cast<unsigned long int>((*tok_iter)));\r
+       tok_iter++;\r
+       spWeapon->Uses(lexical_cast<int>((*tok_iter)));\r
+       tok_iter++;\r
+       modifiers[Modifiers::strength] = lexical_cast<int>((*tok_iter));\r
+       tok_iter++;\r
+       modifiers[Modifiers::defense] = lexical_cast<int>((*tok_iter));\r
+       tok_iter++;\r
+       modifiers[Modifiers::maxhp] = lexical_cast<int>((*tok_iter));\r
+       tok_iter++;\r
+       modifiers[Modifiers::hp] = lexical_cast<int>((*tok_iter));\r
+       tok_iter++;\r
+       modifiers[Modifiers::forestfights] = lexical_cast<int>((*tok_iter));\r
+       tok_iter++;\r
+       modifiers[Modifiers::playerfights] = lexical_cast<int>((*tok_iter));\r
+       tok_iter++;\r
+       modifiers[Modifiers::gold] = lexical_cast<int>((*tok_iter));\r
+       tok_iter++;\r
+       modifiers[Modifiers::bank] = lexical_cast<int>((*tok_iter));\r
+       spWeapon->Modifiers(modifiers);\r
+\r
+       return spWeapon;\r
+}\r
+bool FileWeaponDAO::IdExists(const string &Id) const\r
+{\r
+       map<string, shared_ptr<WeaponGO> >::const_iterator iter;\r
+       iter = spWeaponCache.find(Id);\r
+       return (iter != spWeaponCache.end());\r
+}\r
+\r
+void FileWeaponDAO::LoadWeaponCache(void)\r
+{\r
+       ifstream infile;\r
+       infile.open(mFilename.c_str());\r
+\r
+       if (infile.fail())\r
+       {\r
+               throw DataLayerException(str(format("Unable to open %1% for reading") % mFilename), __FILE__, __LINE__);\r
+       }\r
+       string line;\r
+       while (getline(infile, line))\r
+       {\r
+               if (line.length() == 0)\r
+               {\r
+                       continue;\r
+               }\r
+               if (line[0] == '#')\r
+               {\r
+                       continue;\r
+               }\r
+               shared_ptr<WeaponGO> spWeapon = CreateWeaponFromLine(line);\r
+               if (spWeapon != 0)\r
+               {\r
+                       spWeaponCache[spWeapon->Id()] = spWeapon;\r
+               }\r
+       }\r
+       infile.close();\r
+}\r
diff --git a/gameserv-2.0/libgameservgldl/src/DataLayer/IWeaponDAO.cpp b/gameserv-2.0/libgameservgldl/src/DataLayer/IWeaponDAO.cpp
new file mode 100644 (file)
index 0000000..fadab71
--- /dev/null
@@ -0,0 +1,10 @@
+#include <GameServ/DataLayer/IWeaponDAO.h>\r
+using GameServ::DataLayer::DataAccessObjects::IWeaponDAO;\r
+\r
+IWeaponDAO::IWeaponDAO()\r
+{\r
+}\r
+\r
+IWeaponDAO::~IWeaponDAO()\r
+{\r
+}
\ No newline at end of file