Beispiel #1
0
def process_mesage():
    """Listens at /hooks for posts to that url and gets response from game engine."""

    data = request.data.decode("utf-8")

    logging.info(data)

    request_data = json.loads(data)

    if not is_unique(request_data, parse.get_message_id):
        return "", 200

    try:
        user_response = parse.most_recent_msg(request_data)
        user_id = parse.get_user_id(request_data)
    except:
        logging.error("PARSE FAILED={}".format(sys.exc_info()[0]))
        raise ParseException(sys.exc_info()[0])

    logging.info("user_id={0}, user_response={1}".format(
        user_id, user_response))

    logging.debug("restart status={}".format(r.get("restart:" + user_id)))

    success = responder.process_response(user_response, user_id)

    if success:
        logging.info("Successful response={}".format(user_id))
        return "", 200
    else:
        logging.error("Response Failure user_response={} user_id={}".format(
            user_response, user_id))
    def login_handler(self):
        username = self.jdata.get("username")
        password = self.jdata.get("password")
        if not all([username, password]):
            return {"code": "LOGIN_FAIL", "message": "You need send username and password"}
        else:
            try:
                if not r.exists("user:"******":password"):
                    return {"code": "LOGIN_FAIL", "message": "Username is not existed"}
                if password == r.get("user:"******":password"):
                    if self.is_recv_boardcast:
                        recv_connections.append(self)
                    else:
                        connections.append(self)

                    self.user = username
                    self.isLogin = True
                    if not self.is_recv_boardcast:
                        self.broadcast_login()
                        r.sadd("online_user", username)
                    #self.broadcast({"action": "login", "user": self.get_user(), "nickname": r.get("user:"******":nickname")})
                    return {"code": "LOGIN_SUCCESS", "message": "success", "nickname": r.get("user:"******":nickname")}
                else:
                    return {"code": "LOGIN_FAIL", "message": "Username and password not match"}
            except Exception, e:
                print "Error:", e.message,traceback.format_exc()
                return {"code": "SERVER_ERROR", "message": "Server Error"}
 def broadcast_file(self, store_filepath, filename, file_type):
     now_time = time.strftime('%Y/%m/%d %H:%M:%S', time.localtime(time.time()))
     broadcast_msg = {
         "action": "broadcast_file",
         "time": now_time,
         "user": self.user,
         "nickname": r.get(u"user:"******":nickname"),
         "filename": filename,
         "file_type": file_type,
     }
     # 向所有在线用户发送该消息
     for conn in recv_connections:
         if conn.get_user() != self.user:
             print "向{}发送消息".format(conn.get_user())
             conn.request.sendall(json.dumps(broadcast_msg))
             time.sleep(0.2)
             print u"开始发送文件.."
             # 向所有在线用户发送该文件
             with open(store_filepath, 'rb') as f:
                 while True:
                     data = f.read(4096)
                     if not data:
                         break
                     conn.request.sendall(data)
                 f.close()
                 time.sleep(0.2)
                 conn.request.sendall('EOF')
                 print u"发送文件完成"
Beispiel #4
0
def respond(user_id, user_response):
    """Gets the game response for a specific user_id and user_response"""
    game = Game.resume(r.get("save:" + user_id))
    user_tupl_resp = tuple(user_response.lower().split(" "))
    response = format_response(game.do_command(user_tupl_resp))
    r.set("save:" + user_id, game.t_suspend())
    return response
Beispiel #5
0
def process_mesage():
    """Listens at /hooks for posts to that url and gets response from game engine."""

    data = request.data.decode("utf-8")

    logging.info(data)

    request_data = json.loads(data)

    if not is_unique(request_data, parse.get_message_id):
        return "", 200

    try:
        user_response = parse.most_recent_msg(request_data)
        user_id = parse.get_user_id(request_data)
    except:
        logging.error("PARSE FAILED={}".format(sys.exc_info()[0]))
        raise ParseException(sys.exc_info()[0])

    logging.info("user_id={0}, user_response={1}".format(user_id, user_response))

    logging.debug("restart status={}".format(r.get("restart:" + user_id)))

    success = responder.process_response(user_response, user_id)

    if success:
        logging.info("Successful response={}".format(user_id))
        return "", 200
    else:
        logging.error("Response Failure user_response={} user_id={}".format(user_response, user_id))
 def broadcast_logout(self):
     now_time = time.strftime('%Y/%m/%d %H:%M:%S', time.localtime(time.time()))
     broadcast_msg = {
         "action": "broadcast",
         "time": now_time,
         "content": "用户" + r.get("user:"******":nickname") + "退出聊天室\n",
         "user": self.user,
         "nickname": "【系统消息】"
     }
     self.broadcast(broadcast_msg)
Beispiel #7
0
def process_postback(postback_payload, user_id):
    if not r.get("yesno:" + user_id):
        return True
    elif postback_payload.startswith("restart"):
        return restart(postback_payload, user_id)
    elif postback_payload.startswith("start_new"):
        return start_new(postback_payload, user_id)
    elif re.match("(yes|no)", postback_payload):
        return game_fallback(postback_payload, user_id)
    else:
        logging.error("Invalid postback={}".format(postback_payload))
        return False
 def broadcast_handler(self, content=None):
     if not content:
         content = self.jdata.get("content")
     if not content:
         print {"code": "BROADCAST_FAIL", "message": "content length must > 0"}
     now_time = time.strftime('%Y/%m/%d %H:%M:%S', time.localtime(time.time()))
     broadcast_msg = {
         "action": "broadcast",
         "time": now_time,
         "content": content,
         "user": self.user,
         "nickname": r.get(u"user:"******":nickname")
     }
     self.broadcast(broadcast_msg)
     print {"code": "BROADCAST_SUCCESS", "message": ""}
Beispiel #9
0
def yes_no_question(user_response, user_id):
    response_type = r.get("yesno:" + user_id)
    logging.debug("Response type={}".format(response_type))
    if response_type == b'restart':
        smooch.send_postbacks(user_id, "Do you want to restart?",
                              [("Yes", "restart_yes"), ("No", "restart_no")])
        return True
    elif response_type == b'new_game':
        smooch.send_postbacks(user_id, "Do you want to play again?",
                              [("Yes", "start_new_yes"),
                               ("No", "start_new_no")])
        return True
    elif response_type == b'game':
        smooch.send_postbacks(user_id, "Please answer the question.",
                              [("Yes", "yes"), ("No", "no")])
        return True
    else:
        logging.error("Extraneous response type={}".format(response_type))
        return False
Beispiel #10
0
def process_response(user_response, user_id):
    user_exists = advent.user_exists(user_id)

    if user_response.startswith("/"):
        user_response = user_response.replace("/", "")

    if r.get("yesno:" + user_id):
        return yes_no_question(user_response, user_id)
    elif tip.is_tip(user_response.lower()):
        return process_tip(user_response, user_id)
    elif user_exists and (user_response.lower() == "restart" or user_response.lower() == "reset"):
        return restart(user_response, user_id)
    elif user_exists and (user_response.lower() == "help" or user_response.lower() == "?"):
        return help_message(user_response, user_id)
    elif user_exists and user_response.lower() == "info":
        return info_message(user_response, user_id)
    elif user_exists:
        return normal_response(user_response, user_id)
    else:
        return new_user(user_response, user_id)
Beispiel #11
0
def yes_no_question(user_response, user_id):
    response_type = r.get("yesno:" + user_id)
    logging.debug("Response type={}".format(response_type))
    if response_type == b'restart':
        smooch.send_postbacks(user_id, "Do you want to restart?",
                              [("Yes", "restart_yes"),
                               ("No", "restart_no")])
        return True
    elif response_type == b'new_game':
        smooch.send_postbacks(user_id, "Do you want to play again?",
                              [("Yes", "start_new_yes"),
                               ("No", "start_new_no")])
        return True
    elif response_type == b'game':
        smooch.send_postbacks(user_id, "Please answer the question.",
                              [("Yes", "yes"),
                               ("No", "no")])
        return True
    else:
        logging.error("Extraneous response type={}".format(response_type))
        return False
Beispiel #12
0
def process_response(user_response, user_id):
    user_exists = advent.user_exists(user_id)

    if user_response.startswith("/"):
        user_response = user_response.replace("/", "")

    if r.get("yesno:" + user_id):
        return yes_no_question(user_response, user_id)
    elif tip.is_tip(user_response.lower()):
        return process_tip(user_response, user_id)
    elif user_exists and (user_response.lower() == "restart"
                          or user_response.lower() == "reset"):
        return restart(user_response, user_id)
    elif user_exists and (user_response.lower() == "help"
                          or user_response.lower() == "?"):
        return help_message(user_response, user_id)
    elif user_exists and user_response.lower() == "info":
        return info_message(user_response, user_id)
    elif user_exists:
        return normal_response(user_response, user_id)
    else:
        return new_user(user_response, user_id)
 def get_user_info(self):
     user_info = []
     for conn in connections:
         user_info.append([conn.get_user(), r.get("user:"******":nickname"), conn.p2p_server_host, conn.p2p_server_port])
     return user_info
Beispiel #14
0
def yes_no_question(user_id):
    game = Game.resume(r.get("save:" + user_id))
    return game.yes_no_question()