/// <summary>
    /// 使用复活卡
    /// </summary>
    /// <param name="token">Hash 客户端信息</param>
    /// <param name="questionId">int 题目编号</param>
    /// <returns>Hash 返回结果</returns>
    public static Hash Revive(Hash token, int questionId)
    {
        //  如果状态不为中止,则跳出
        if (token.ToInt("status") != 200)
        {
            return(new Hash((int)CodeType.OK, "成功", ClientData.GetByClientId(token.ToInt("clientId"))));
        }

        //  如果没有可用的复活卡,则跳出
        if (token.ToInt("lives") == 0)
        {
            return(new Hash((int)CodeType.ClientHaveNotCard, "没有可用复活卡"));
        }

        //  数据库操作
        if (ClientData.Revive(token.ToInt("clientId"), false) > 0)
        {
            //  获取用户游戏进度信息
            Hash data = ClientQuestionData.GetPositionByClientId(token.ToInt("clientId"));

            //  返回成功结果
            return(new Hash((int)CodeType.OK, "成功", data));
        }
        return(new Hash((int)CodeType.DataBaseUnknonw, "数据库操作失败"));
    }
    /// <summary>
    /// 激活复活卡
    /// </summary>
    /// <param name="token">Hash 客户端信息</param>
    /// <param name="toClientId">int 求助客户端编号</param>
    /// <param name="openGId">string 群标识</param>
    /// <returns>Hash 返回结果</returns>
    public static Hash Activate(Hash token, int toClientId, string openGId)
    {
        //  不能复活自己
        if (token.ToInt("clientId") == toClientId)
        {
            return(new Hash((int)CodeType.ClientRelateInvalid, "不能为自己激活复活卡"));
        }

        //  一天只能为一个好友激活一次
        if (ClientLiveData.GetCountAtToday(token.ToInt("clientId"), toClientId) > 0)
        {
            return(new Hash((int)CodeType.ClientHaveActivated, "一天内只能为一个好友激活一次"));
        }

        //  获取用户信息
        if (ClientLiveData.Activate(token.ToInt("clientId"), toClientId, openGId) > 0)
        {
            //  更新用户复活卡
            ClientData.Activate(toClientId);

            //  获取用户信息
            Hash data = ClientQuestionData.GetPositionByClientId(token.ToInt("clientId"));

            //  返回结果
            return(new Hash((int)CodeType.OK, "成功", data));
        }
        return(new Hash((int)CodeType.DataBaseUnknonw, "数据库操作失败"));
    }
    /// <summary>
    /// 重新开始游戏
    /// </summary>
    /// <param name="token">Hash 客户端信息</param>
    /// <returns>Hash 返回结果</returns>
    public static Hash Restart(Hash token)
    {
        //  清空用户答题记录及得分
        ClientData.Restart(token.ToInt("clientId"));
        ClientQuestionData.Clear(token.ToInt("clientId"));

        //  获取用户游戏进度信息
        Hash data = ClientQuestionData.GetPositionByClientId(token.ToInt("clientId"));

        //  返回成功结果
        return(new Hash((int)CodeType.OK, "成功", data));
    }
    /// <summary>
    /// 跳过这一题
    /// </summary>
    /// <param name="token">Hash 客户端信息</param>
    /// <param name="questionId">int 题目编号</param>
    /// <returns>Hash 返回结果</returns>
    public static Hash Skip(Hash token, int questionId)
    {
        if (ClientQuestionData.Answer(token.ToInt("clientId"), questionId, ResultType.Skip) > 0)
        {
            //  恢复游戏状态
            ClientData.Revive(token.ToInt("clientId"), true);

            //  获取用户游戏进度信息
            Hash data = ClientQuestionData.GetPositionByClientId(token.ToInt("clientId"));

            //  返回成功结果
            return(new Hash((int)CodeType.OK, "成功", data));
        }
        return(new Hash((int)CodeType.DataBaseUnknonw, "数据库操作失败"));
    }
    /// <summary>
    /// 获取下一个题目
    /// </summary>
    /// <param name="token">Hash 客户端信息</param>
    /// <returns>Hash 返回结果</returns>
    public static Hash Next(Hash token)
    {
        //  获取下一个题目
        Hash question = ClientQuestionData.Next(token.ToInt("clientId"));
        Hash data     = ClientQuestionData.GetPositionByClientId(token.ToInt("clientId"));

        //  准备开始答题
        if (question.ToInt("questionId") > 0)
        {
            ClientQuestionData.Ready(token.ToInt("clientId"), question.ToInt("questionId"));
            data             = ClientQuestionData.GetPositionByClientId(token.ToInt("clientId"));
            data["question"] = question;
        }

        //  返回结果
        return(new Hash((int)CodeType.OK, "成功", data));
    }
    /// <summary>
    /// 答题结果
    /// </summary>
    /// <param name="token">Hash 客户端信息</param>
    /// <param name="questionId">int 题目编号</param>
    /// <param name="result">int 答题结果</param>
    /// <returns>Hash 结果信息</returns>
    public static Hash Answer(Hash token, int questionId, int result)
    {
        //  记录答题结果
        if (ClientQuestionData.Answer(token.ToInt("clientId"), questionId, (ResultType)result) > 0)
        {
            //  获取题目信息
            Hash question = QuestionData.GetByQuestionId(questionId);

            //  更新用户进度和得分
            ClientData.Score(token.ToInt("clientId"), question.ToInt("questionId"), question.ToInt("degree"), (ResultType)result);

            //  获取用户进度信息
            Hash data = ClientQuestionData.GetPositionByClientId(token.ToInt("clientId"));

            //  返回结果
            return(new Hash((int)CodeType.OK, "成功", data));
        }
        return(new Hash((int)CodeType.DataBaseUnknonw, "数据库操作失败"));
    }