def list_rooms(ro, data): """ 获取大厅房间列表; :param ro: :param data: :return: """ obj = Parser(data) page = obj.read_short() pagesize = obj.read_short() print u"list_rooms:", page, pagesize jsonStr = room_list() pageId = getattr(ro.user, "pageId", None) page_remove_user(ro, pageId) page_join_user(ro, page) res = Buffer() res.write_ushort(1030) res.write_short(1) res.write_string(jsonStr) yield ro.sendData(res.getValue())
def enter_room(ro, data): """ 加入游戏房间; :param ro: :param data: :return: """ obj = Parser(data) roomid = str(obj.read_short()) tableid = obj.read_ubyte() pwd = obj.read_string() print u"enter_room:", roomid, tableid, pwd if roomid == "-1": roomid, tableid, msg = room_find_waiting() print u"room_find_waiting>>", roomid, tableid, msg if msg: res = Buffer() res.write_ushort(1032) res.write_short(-100) res.write_string(msg) ro.sendData(res.getValue()) print u"自动匹配失败" return room, pos, msg, num = room_join_usr(ro.user, roomid, tableid) if not room: res = Buffer() res.write_ushort(1032) res.write_short(-100) res.write_string(msg) ro.sendData(res.getValue()) return res = Buffer() res.write_ushort(1032) res.write_short(1) res.write_ushort(int(roomid)) res.write_byte(tableid) ro.sendData(res.getValue()) logging.getLogger("user").info(u"房间[%s]座位[%d]玩家<%s>加入ok" % (roomid, tableid, ro.user.id)) res = Buffer() res.write_ushort(1052) res.write_string(ro.user.id) res.write_string(ro.user.nick) res.write_ushort(ro.user.sex) res.write_ushort(int(ro.user.avata)) res.write_byte(tableid) res.write_short(int(roomid)) res.write_byte(num) ddat = res.getValue() # 广播新玩家加入房间的消息; yield room_cast_msg(room, ddat) pageId = getattr(ro.user, "pageId", None) ss = page_get_users(pageId) for kk in ss: print "\t->", kk yield ss[kk].sendData(ddat) page_remove_user(ro, pageId) for i in range(4): if i == tableid: continue user = room_get_user(room, i) if not user: continue res = Buffer() res.write_ushort(1052) res.write_string(user.id) res.write_string(user.nick) res.write_ushort(user.sex) res.write_ushort(int(user.avata)) res.write_byte(i) ro.sendData(res.getValue()) @registe_msg_handler(ro, "connectionLost") @defer.inlineCallbacks def User_disconnected(*args, **kwargs): if hasattr(ro.user, "room"): room = ro.user.room logging.getLogger("room").info("room_disconnected: <%s>room[%s]table[%s]" % (ro.user.id, roomid, tableid)) if hasattr(ro.user.room, "maj"): ro.user.room.maj.game_exit(ro, ro.user.tableid) res = Buffer() res.write_ushort(1099) res.write_string("exit") yield room_cast_msg(room, res.getValue()) for i in range(4): user = room_get_user(room, i) if not user: continue if hasattr(user.room, "maj"): del user.room.maj room_exit_usr(ro.user, ro.user.room.id, ro.user.tableid) res = Buffer() res.write_ushort(1053) res.write_string(ro.user.id) res.write_string(ro.user.nick) res.write_byte(tableid) res.write_short(int(roomid)) ddat = res.getValue() # yield room_cast_msg(room,res.getValue()) pageId = getattr(ro.user, "pageId", None) ss = page_get_users(pageId) for kk in ss: print "\t->", ss[kk].user.id yield ss[kk].sendData(ddat) page_remove_user(ro, pageId)