OSDN Git Service

チャンネル機能を仮実装
[mmo/main.git] / server / Account.hpp
index 4c41324..06be3fc 100644 (file)
-//
-// Account.hpp
-//
-
-#pragma once
-
-#include <string>
-#include <map>
-#include <list>
-#include <unordered_map>
-#include <stdint.h>
-#include "../common/database/AccountProperty.hpp"
-#include "../common/network/Utils.hpp"
-#include "../common/Logger.hpp"
-
-typedef unsigned int UserID;
-
-class Account {
-    public:
-        Account(const std::string&);
-        ~Account();
-
-        void LoadInitializeData(UserID user_id, std::string data);
-
-        unsigned int GetCurrentRevision();
-        std::string GetUserRevisionPatch(UserID user_id, unsigned int revision);
-
-        UserID GetUserIdFromFingerPrint(const std::string&);
-        std::string GetPublicKey(UserID);
-        UserID RegisterPublicKey(const std::string&);
-
-        void LogIn(UserID);
-        void LogOut(UserID);
-        void LogOutAll();
-
-        std::string GetUserName(UserID) const;
-        void SetUserName(UserID, const std::string&);
-        std::string GetUserTrip(UserID) const;
-        void SetUserTrip(UserID, const std::string&);
-        std::string GetUserModelName(UserID) const;
-        void SetUserModelName(UserID, const std::string&);
-
-        std::string GetUserIPAddress(UserID) const;
-        void SetUserIPAddress(UserID, const std::string&);
-        uint16_t GetUserUDPPort(UserID) const;
-        void SetUserUDPPort(UserID, uint16_t);
-        uint32_t GetUserRevision(UserID) const;
-
-        void SetUserPosition(UserID, const PlayerPosition&);
-        PlayerPosition GetUserPosition(UserID) const;
-
-        std::vector<UserID> GetIDList() const;
-
-    private:
-        template <class T>
-        void Set(UserID user_id, AccountProperty property, T value, bool revision = true)
-        {
-                       if (user_id == 0) {
-                               return;
-                       }
-
-            T old_value;
-            if (!Get(user_id, property, &old_value) || old_value != value) {
-                               boost::unique_lock<boost::recursive_mutex> lock(mutex_);
-
-                if (user_map_.find(user_id) == user_map_.end()) {
-                    user_map_[user_id] = PropertyMap();
-                }
-
-                user_map_[user_id][property].value = network::Utils::Serialize(value);
-
-                if (revision) {
-                    uint32_t new_revision = GetUserRevision(user_id) + 1;
-                    Logger::Debug("Userdata Update %d %d Revision: %d",
-                              user_id, property, new_revision);
-
-                    user_map_[user_id][property].revision = new_revision;
-                    Set(user_id, REVISION, new_revision, false);
-                }
-            }
-        }
-
-        template <class T>
-        bool Get(UserID user_id, AccountProperty property, T* value) const
-        {
-            UserMap::const_iterator usermap_it;
-            if ((usermap_it = user_map_.find(user_id)) != user_map_.end()) {
-                PropertyMap::const_iterator property_it;
-                if ((property_it = usermap_it->second.find(property)) != usermap_it->second.end()) {
-                    network::Utils::Deserialize(property_it->second.value, value);
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        struct PropertyValue {
-            PropertyValue() : revision(0) {}
-            uint32_t revision;
-            std::string value;
-        };
-
-        typedef std::map<AccountProperty, PropertyValue> PropertyMap;
-        typedef std::map<UserID, PropertyMap> UserMap;
-        UserMap user_map_;
-
-        typedef std::unordered_map<std::string, UserID> FingerprintMap;
-        FingerprintMap fingerprint_map_;
-
-        typedef std::map<UserID, PlayerPosition> PositionMap;
-        PositionMap position_map_;
-
-        unsigned int revision_;
-        UserID max_user_id_;
-
-               boost::recursive_mutex mutex_;
-};
+//\r
+// Account.hpp\r
+//\r
+\r
+#pragma once\r
+\r
+#include <string>\r
+#include <map>\r
+#include <list>\r
+#include <unordered_map>\r
+#include <stdint.h>\r
+#include "../common/database/AccountProperty.hpp"\r
+#include "../common/network/Utils.hpp"\r
+#include "../common/Logger.hpp"\r
+#include <boost/thread.hpp>\r
+\r
+typedef uint32_t UserID;\r
+\r
+class Account {\r
+    public:\r
+        Account(const std::string&);\r
+        ~Account();\r
+\r
+        void LoadInitializeData(UserID user_id, std::string data);\r
+\r
+        uint32_t GetCurrentRevision();\r
+        std::string GetUserRevisionPatch(UserID user_id, uint32_t revision);\r
+\r
+        UserID GetUserIdFromFingerPrint(const std::string&);\r
+        std::string GetPublicKey(UserID);\r
+        UserID RegisterPublicKey(const std::string&);\r
+\r
+        void LogIn(UserID);\r
+        void LogOut(UserID);\r
+        void LogOutAll();\r
+\r
+               void Remove(UserID);\r
+\r
+        std::string GetUserName(UserID) const;\r
+        void SetUserName(UserID, const std::string&);\r
+        std::string GetUserTrip(UserID) const;\r
+        void SetUserTrip(UserID, const std::string&);\r
+        std::string GetUserModelName(UserID) const;\r
+        void SetUserModelName(UserID, const std::string&);\r
+\r
+        std::string GetUserIPAddress(UserID) const;\r
+        void SetUserIPAddress(UserID, const std::string&);\r
+        uint16_t GetUserUDPPort(UserID) const;\r
+        void SetUserUDPPort(UserID, uint16_t);\r
+        uint32_t GetUserRevision(UserID) const;\r
+               \r
+        void SetUserChannel(UserID, unsigned char);\r
+        unsigned char GetUserChannel(UserID) const;\r
+\r
+        void SetUserPosition(UserID, const PlayerPosition&);\r
+        PlayerPosition GetUserPosition(UserID) const;\r
+\r
+        std::vector<UserID> GetIDList() const;\r
+\r
+    private:\r
+        template <class T>\r
+        void Set(UserID user_id, AccountProperty property, T value, bool revision = true)\r
+        {\r
+                       if (user_id == 0) {\r
+                               Logger::Error(_T("Invalid session id"));\r
+                               return;\r
+                       }\r
+\r
+            T old_value;\r
+            if (!Get(user_id, property, &old_value) || old_value != value) {\r
+                               boost::unique_lock<boost::recursive_mutex> lock(mutex_);\r
+\r
+                if (user_map_.find(user_id) == user_map_.end()) {\r
+                    user_map_[user_id] = PropertyMap();\r
+                }\r
+\r
+                user_map_[user_id][property].value = network::Utils::Serialize(value);\r
+\r
+                if (revision) {\r
+                    uint32_t new_revision = GetUserRevision(user_id) + 1;\r
+                    Logger::Debug("Userdata Update %d %d Revision: %d",\r
+                              user_id, property, new_revision);\r
+\r
+                    user_map_[user_id][property].revision = new_revision;\r
+                    Set(user_id, REVISION, new_revision, false);\r
+                }\r
+            }\r
+        }\r
+\r
+        template <class T>\r
+        bool Get(UserID user_id, AccountProperty property, T* value) const\r
+        {\r
+            UserMap::const_iterator usermap_it;\r
+            if ((usermap_it = user_map_.find(user_id)) != user_map_.end()) {\r
+                PropertyMap::const_iterator property_it;\r
+                if ((property_it = usermap_it->second.find(property)) != usermap_it->second.end()) {\r
+                    network::Utils::Deserialize(property_it->second.value, value);\r
+                    return true;\r
+                }\r
+            }\r
+            return false;\r
+        }\r
+\r
+        struct PropertyValue {\r
+            PropertyValue() : revision(0) {}\r
+            uint32_t revision;\r
+            std::string value;\r
+        };\r
+\r
+        typedef std::map<AccountProperty, PropertyValue> PropertyMap;\r
+        typedef std::map<UserID, PropertyMap> UserMap;\r
+        UserMap user_map_;\r
+\r
+        typedef std::unordered_map<std::string, UserID> FingerprintMap;\r
+        FingerprintMap fingerprint_map_;\r
+\r
+        typedef std::map<UserID, PlayerPosition> PositionMap;\r
+        PositionMap position_map_;\r
+\r
+        uint32_t revision_;\r
+        UserID max_user_id_;\r
+\r
+               boost::recursive_mutex mutex_;\r
+};\r