Class: Doraemon::UserCenter
- Inherits:
-
Object
- Object
- Doraemon::UserCenter
- Includes:
- Singleton
- Defined in:
- lib/doraemon/user.rb
Overview
用户中心,对当前所有用户进行管理
Instance Method Summary collapse
-
#add_user(user) ⇒ Object
添加用户.
-
#add_user_with_uid(uid) ⇒ Object
通过uid添加用户.
-
#initialize ⇒ UserCenter
constructor
A new instance of UserCenter.
-
#uid_with_username(username) ⇒ Object
通过 username 查询 uid 并缓存.
-
#update_scene_id(uid, scene_id) ⇒ Object
更新指定用户的激活场景.
- #user_with_uid(uid) ⇒ Object
Constructor Details
#initialize ⇒ UserCenter
Returns a new instance of UserCenter.
45 46 47 48 49 |
# File 'lib/doraemon/user.rb', line 45 def initialize @users = [] @mutex = Mutex.new @uname_uid_map = {} # username => uid 的映射缓存 end |
Instance Method Details
#add_user(user) ⇒ Object
添加用户
60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/doraemon/user.rb', line 60 def add_user(user) uid = user[:uid] userObj = user_with_uid(uid) if userObj.nil? port = user[:port] @mutex.lock DB.query_actived_scene(uid) do |scene_id| userObj = User.new(uid, port, scene_id) userObj.start_proxy @users << userObj @mutex.unlock end end end |
#add_user_with_uid(uid) ⇒ Object
通过uid添加用户
76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/doraemon/user.rb', line 76 def add_user_with_uid(uid) user = nil @mutex.synchronize do user = @users.find { |x| x.uid == uid } end return unless user.nil? DB.query_user_with_uid(uid) do |user| unless user.nil? add_user(user) end end end |
#uid_with_username(username) ⇒ Object
通过 username 查询 uid 并缓存
98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/doraemon/user.rb', line 98 def uid_with_username(username) uid = @uname_uid_map[username] if uid.nil? DB.query_user(username) do |user| uid = 0 uid = user[:uid] || 0 unless user.nil? @uname_uid_map[username] = uid yield(uid) if block_given? end else yield(uid) if block_given? end end |
#update_scene_id(uid, scene_id) ⇒ Object
更新指定用户的激活场景
90 91 92 93 94 95 |
# File 'lib/doraemon/user.rb', line 90 def update_scene_id(uid, scene_id) user = user_with_uid(uid) if !user.nil? user.scene_id = scene_id.to_i end end |
#user_with_uid(uid) ⇒ Object
51 52 53 54 55 56 57 |
# File 'lib/doraemon/user.rb', line 51 def user_with_uid(uid) user = nil @mutex.synchronize do user = @users.find { |x| x.uid == uid } end user end |