def _getOnlineLocList(userId): ''' 取得当前用户的所有在线位置信息list 返回loc的数组列表, 每一项为一个3项值, 分别为: roomId, tableId, seatId 示例 : return [ [roomId1, tableId1, seatId1], [roomId2, tableId2, seatId2], ] ''' loclist = [] val = daobase.executeUserCmd(userId, 'HGETALL', UserLocationSchema.mkey(userId)) if val: vlen = len(val) i = 0 while i < vlen: k = val[i] v = val[i + 1] i += 2 datas = k.split('.', 2) rid = int(datas[1]) tid = int(datas[2]) loclist.append([rid, tid, int(v)]) return loclist
def _getOnlineLocSeatId(userId, roomId, tableId): ''' 取得用户再桌子上的ID 若不在桌子上返回0 同_addOnlineLoc为配对方法 ''' value = daobase.executeUserCmd(userId, 'HGET', UserLocationSchema.mkey(userId), 'R.' + str(roomId) + '.' + str(tableId)) return UserLocationSchema.checkData(UserLocationSchema.SEATID, value)
def _removeOnlineLoc(userId, roomId, tableId): ''' 移除一个用户的在线位置 通常此方法在用户真实离开某一个桌位后调用 ''' # 游戏时长计算, 1天后自动过期 subkey = 'R.' + str(roomId) + '.' + str(tableId) if ftlog.is_debug(): ftlog.debug('dbuser._removeOnlineLoc userId=', userId, 'roomId=', roomId, 'tableId=', tableId) daobase.sendUserCmd(userId, 'HDEL', UserLocationSchema.mkey(userId), subkey) dbplaytime._setPlayTimeStop(userId, roomId, tableId)
def _addOnlineLoc(userId, roomId, tableId, seatId, checkConfict): ''' 添加一个用户的在线位置, 注意: 子键值为roomId+'.'+tableId, 因此不允许用户再同一个桌子的不同桌位坐下 通常此方法在用户真实坐在某一个桌位后调用 ''' if checkConfict: onlineSeatId = _getOnlineLocSeatId(userId, roomId, tableId) assert not onlineSeatId or onlineSeatId == seatId # 设置游戏时长记录, 1天后自动过期 dbplaytime._setPlayTimeStart(userId, roomId, tableId) if ftlog.is_debug(): ftlog.debug('dbuser._addOnlineLoc userId=', userId, 'roomId=', roomId, 'tableId=', tableId, 'seatId=', seatId, 'checkConfict=', checkConfict) return daobase.sendUserCmd(userId, 'HSET', UserLocationSchema.mkey(userId), 'R.' + str(roomId) + '.' + str(tableId), seatId)
def _cleanOnlineLoc(userId): ''' 移除一个用户的所有在线位置 ''' dbplaytime._cleanalltime(userId) daobase.sendUserCmd(userId, 'DEL', UserLocationSchema.mkey(userId))