Class: Doraemon::UserCenter

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/doraemon/user.rb

Overview

用户中心,对当前所有用户进行管理

Instance Method Summary collapse

Constructor Details

#initializeUserCenter

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