def waitTime(): ts = Timestamp() sec = ts.minute() % 30 * 60 + ts.second() sec = 30 * 60 - sec m = sec / 60 s = sec % 60 return m, s
def gameroom(service, mail): source = mail.source() result = { 'CMD': 'ROOM_REP', } if mail['roomname']: rname = mail['roomname'] if rname not in rooms: rooms[rname] = {'users': {}, 'answer': {}, 'numbers': None} user = address2user[mail.source()] if user in userSession and 'room' in userSession[user]: oldrname = userSession[user]['room'] del rooms[oldrname]['users'][user] sys2Room(rname, u'%s 进入了聊天室' % user) ts = Timestamp().unixTime() userSession[user]['room'] = rname rooms[rname]['users'][user] = ts result['roomname'] = rname if rooms[rname]['numbers'] is None: ms = waitTime() result['question'] = u'**********距离题目揭晓还有 %d 分 %d 秒**********' % ms else: result['question'] = rooms[rname]['numbers'][4] service.send(source, errcode=0, result=result) else: result['rooms'] = rooms.keys() service.send(source, errcode=0, result=result)
def getUserInfo(service, mail): if mail['result'] is None: session = Timestamp().unixTime() service.send('cache', CMD='SET', key='user.' + user, value=session) service.send('cache', CMD='SET', key='user.' + user + '.online', value=0) service.send('cache', CMD='SET', key='user.' + user + '.password', value=password) service.response(source, mailSession, errcode=0, result=u'注册成功') else: service.response(source, mailSession, errcode=0, result=u'用户已存在')
def submitAnswer(service, mail): if not checkInRoom(mail.source()): service.send(mail.source(), errcode=0, result=u'请先进入房间(ROOM)') else: user = address2user[mail.source()] rname = userSession[user]['room'] if rooms[rname]['numbers'] is None: ms = waitTime() result = u'**********距离题目揭晓还有 %d 分 %d 秒**********' % ms else: if 'owner' in rooms[rname]: owner = rooms[rname]['owner'] # (user, answer, value, ts) result = u'%s 已经在 %s 提交了最佳答案 %s(%s), 获得了本期题目冠军' % ( owner[0], owner[3].format(), owner[1], owner[2]) elif user in rooms[rname]['answer']: answer = rooms[rname]['answer'][user][0] value = rooms[rname]['answer'][user][1] ts = rooms[rname]['answer'][user][2] result = u'您在 %s 已经提交过答案了, 之前的提交的答案是 %s(%d)' % (ts.format(), answer, value) else: quest = rooms[rname]['numbers'] answer = mail['answer'] answer = re.sub('\s', '', answer) nums = re.split('\(|\)|\+|-|\*|/', answer) nums = filter(lambda p: len(p), nums) if 4 == len(nums) and nums == map(str, quest[:4]): value = int(eval(answer)) ts = Timestamp() rooms[rname]['answer'][user] = (answer, value, ts) if value > 21: result = u'答案提交成功, 您的计算结果是 %d(>21), 您失去了本次夺冠的机会' % value else: ms = waitTime() if value == 21 and ms[0] == 29 and ms[1] >= 45: sec = 60 - ms[1] rooms[rname]['owner'] = (user, answer, value, ts) result = u'OMG, %s 在 %d 秒内神速地给出了最佳答案 %s , 快收下我的膝盖吧∑(っ °Д °;)っ' % ( user, sec, answer) sys2Room(rname, result) return else: result = u'答案提交成功, 您的计算结果是 %d, 请耐心等待揭榜' % value else: result = u'提交的答案不合法' service.send(mail.source(), errcode=0, result=result)
def checkPassword(last, service, mail): session = Timestamp().unixTime() if password == mail['result']: if user not in online: online[user] = {'session': session} service.send('cache', CMD='SET', key='user.' + user, value=session) result = { 'CMD': 'LOGIN_REP', 'user': user, 'session': session, 'last': last } service.response(source, mailSession, errcode=0, result=result) else: result = {'CMD': 'LOGIN_REP', 'error': u'密码错误'} service.response(source, mailSession, errcode=0, result=result)
def logout(service, mail): def updateOnlineTime(service, mail): onlineTime = mail['result'] onlineTime += time service.send('cache', CMD='SET', key=key, value=onlineTime) onlineTime = onlineTime / 1000000.0 service.response(source, mailSession, errcode=0, result=u'下线成功,累计在线时长 %f 秒' % onlineTime) source = mail.source() mailSession = mail.session() user = mail['user'] session = mail['session'] if user in online: time = (Timestamp().unixTime() - session) key = 'user.' + user + '.online' service.request('cache', callback=updateOnlineTime, CMD='GET', key=key) else: service.response(source, mailSession, errcode=1, result=u'请登录21.game游戏大厅')
def release(service): print Timestamp.now().format(), 'login service is releasing'
def init(service): print Timestamp.now().format(), 'login service is initializing'
def dispatch(service, mail): print '%s %s' % (Timestamp.now().format(), mail['log'])