<?php

namespace loyalsoft;

/**
 * 错误码及错误描述字典
 * @author gwang
 */
class ErrCode {

    /**
     * 交互成功
     */
    const ok = 0;
//
// <editor-fold defaultstate="collapsed" desc="    基础错误码 10xx   ">

    /**
     * 未知原因错误
     */
    const err_unknownn = 1001;

    /**
     * 内部错误
     */
    const err_innerfault = 1002;

    /**
     * 数据库操作失败
     */
    const err_db = 1003;

    /**
     * 内存操作失败
     */
    const err_mem = 1004;

    /**
     * 断言失败
     */
    const err_assert = 1005;

    /**
     * 消息内容非法(不满足tk校验的条件)
     */
    const err_illegal = 1011;

    /**
     * 消息内容缺少校验值
     */
    const err_signo = 1012;

    /**
     * 消息超时
     */
    const err_outtime = 1021;

    /**
     * Just重试
     */
    const err_retry = 1024;

    /**
     * 客户端版本过低-整包更
     */
    const clientversionlow_err = 1031;

    /**
     * 客户端版本过低-增量更
     */
    const clientnewversion_msg = 1032;

    /**
     * 客户端打印信息并且退出
     */
    const clientPrintMsg_Halt = 1033;

    /**
     * 功能码非法
     */
    const ope_err = 1210;

    /**
     * 操作码非法
     */
    const cmd_err = 1211;

    /**
     * 参数非法
     */
    const paras_err = 1212;

    /**
     * 参数不足
     */
    const parasnotenough_msg = 1213;

    /**
     * 内容包含敏感词
     */
    const sensword_msg = 1234;

    /**
     * 服务器正在维护中
     */
    const err_server_maintaining = 1301;

    /**
     * 服务器正在升级，请过会儿再来。
     */
    const err_server_updating = 1302;

    /**
     * 已经在其他地方登录
     */
    const err_anotherlogin = 1303;

    /**
     * 功能暂未开放
     */
    const function_notopen_msg = 1801;

    /**
     * 方法尚未实现
     */
    const err_method_notimplement = 1802;

    /**
     * 方法已过时, 废弃的.
     */
    const err_method_obsoleted = 1803;

    /**
     * 游戏常量数据错误
     */
    const err_const_no = 1825;

// </editor-fold>
//
//   // <editor-fold defaultstate="collapsed" desc="    商城/付费 88xx    ">

    /**
     * 尚未首付
     */
    const pay_firstpayno_err = 8801;

    /**
     * 已经领取首付
     */
    const pay_firstpaygetted = 8802;

    /**
     * 系统繁忙
     */
    const pay_systembusy_err = 8803;

    /**
     * 不是黄钻或已经领取黄钻礼包
     */
    const pay_vipnewerno = 8804;

    /**
     * amt数值小于等于0
     */
    const pay_m_amtzero_err = 8805;

    /**
     * 价格异常
     */
    const pay_price_err = 8806;

    /**
     *  支付类型异常
     */
    const pay_m_type_err = 8807;

    /**
     * 商品常量数据错误-货物内容
     */
    const pay_shopItem_cosnt_goods_err = 8808;

    /**
     * 商城 已达刷新次数上限
     */
    const pay_refresh_times = 8809;

    /**
     * 神秘商城 - 购买次数已达上限
     */
    const pay_secretshop_buytimes = 8810;

    /**
     * 神秘商城 - 物品数据错误
     */
    const pay_secretshop_noitem_err = 8811;

    /**
     * 充值 - 订单不存在
     */
    const pay_order_no = 8812;

    /**
     * 充值 - 付款状态不正确 正在重新查询...
     */
    const pay_order_paystatus = 8813;

    /**
     * 充值 - 此订单已经发货, 无需重复请求
     */
    const pay_order_drawed = 8814;

    /**
     * 充值 - 订单uid不符
     */
    const pay_order_uid = 8815;

    /**
     * 神秘商城 - 免费刷新时间未到
     */
    const pay_secretshopt_freeRefresh_Time = 8816;
    const pay_order_product_id = 8817;
    const pay_fail = 8818;

    /**
     * 不能重复购买
     */
    const pay_repeatbuy = 8819;

// </editor-fold>
//
// <editor-fold defaultstate="collapsed" desc="    not enough 系列    ">

    /**
     * 金币不足
     */
    const notenough_gold_msg = 3014;

    /**
     * 宝石不足
     */
    const notenough_cash_msg = 3015;

    /**
     * 友情点不足
     */
    const notenough_friendshippoint = 3016;

    /**
     * 玩家荣誉值不足[荣誉值兑换]
     */
    const notenough_honour = 3032;

    /**
     * 元宝不足
     */
    const notenought_yuanbao = 3040;

    /**
     * 玩家体力值不足
     */
    const notenough_tili = 3046;

    /**
     * 晶石不足
     */
    const notenough_spar = 3047;

    /**
     * 资源点不足
     */
    const notenough_resPoint = 3048;
// </editor-fold>
//
// <editor-fold defaultstate="collapsed" desc="    user 31xx    ">

    /**
     * 玩家未登录
     */
    const user_login_err = 3101;

    /**
     * 玩家不存在
     */
    const user_no_err = 3102;

    /**
     * 玩家数据损坏
     */
    const user_data_broken_err = 3103;

    /**
     * 连续登录天数不够
     */
    const user_contigiftno_msg = 3104;

    /**
     * 已经领取连续登录礼包
     */
    const user_contigiftfalse_msg = 3105;

    /**
     * 设置新手引导进度失败
     */
    const user_settutorialscompletedfail_err = 3106;

    /**
     * 玩家等级不足
     */
    const user_levelnotenough_msg = 3107;

    /**
     * 找不到玩家的交互体数据
     */
    const user_interact_no_err = 3108;

    /**
     * 找不到玩家的分区记录
     */
    const user_zoneinfo_no_err = 3109;

    /**
     * 玩家昵称已经存在,请换一个再试
     */
    const user_nicknameexist = 3110;

    /**
     * 没有这种奖励类型
     */
    const user_reward_typeno = 3031;

// </editor-fold>
//
// <editor-fold defaultstate="collapsed" desc="    反射方法    ">

    /**
     * 辅助方法, 将所有错误码信息转换到CSV文本中.
     * 用法: 先在本文件中用ctrl + H 全部替换掉 'c onst ' -> 's tatic $'
     *       然后再调用本方法,即可在同目录下生成ErrCode.txt, 里面包含了所需信息.
     * @throws \Exception
     * @author gwang
     */
    static function L() {
        $class = new \ReflectionClass(__CLASS__);                               # 建立这个类的反射对象
        $properties = $class->getProperties(\ReflectionProperty::IS_STATIC);     # 拉取所有静态属性

        $fileName = __DIR__ . "/ErrCode.txt";                                   # 输出文件名
        $fd = fopen($fileName, "w");
        if (false === $fd) {                                                    # 打开文件失败
            throw new \Exception("打开$fileName 失败");
        }
        foreach ($properties as &$p) {
            $d = preg_replace('/[\*|\/|\s+]/', '', $p->getDocComment());        # 处理下注释
            $type = (strpos($p->getName(), 'err') === false ? 0 : 1);           # errorType: 0 继续, 1 重启
            $n = fputs($fd, $p->getName() . ";" . $p->getValue() . ";$type;$d" . PHP_EOL);  # 写入文件
            if (false === $n) {                                                 # 写入时失败
                throw new Exception("写入$fileName 时失败");
            }
        }
        fclose($fd);
    }

    /**
     * 辅助方法, 将所有错误码信息转换到CS文件中.
     * 用法: 先在本文件中用ctrl + H 全部替换掉 'c onst ' -> 's tatic $'
     *       然后再调用本方法,即可在同目录下生成ErrCode.cs, 里面包含了所有错误信息.
     * @throws \Exception
     * @author gwang
     */
    static function M() {
        $class = new \ReflectionClass(__CLASS__);                               # 建立这个类的反射对象
        $properties = $class->getProperties(\ReflectionProperty::IS_STATIC);     # 拉取所有静态属性

        $fileName = __DIR__ . "/ErrCode.cs";                                   # 输出文件名
        $fd = fopen($fileName, "w");
        if (false === $fd) {                                                    # 打开文件失败
            throw new \Exception("打开$fileName 失败");
        }
        $classHead = <<<HEAD
/// <summary>
/// 错误码
/// </summary>
class ErrCode
{


HEAD;
        $classEnd = <<<END
}
END;

        $cst = 'const';
        fputs($fd, $classHead);                                                 # 类头
        foreach ($properties as &$p) {
            $d = preg_replace('/[\*|\/|\s+]/', '', $p->getDocComment());        # 提取注释
            $pname = $p->getName();                                             # 字段名称
            $pvalue = $p->getValue();                                           # 错误码
            $filed = <<<FILED
    /// <summary>
    /// {$d}
    /// </summary>
    public {$cst} int {$pname} = {$pvalue};


FILED;
            $n = fputs($fd, $filed);                                            # 写入错误编号
            if (false === $n) {                                                 # 写入时失败
                throw new Exception("写入$fileName 时失败");
            }
        }
        fputs($fd, $classEnd);                                                  # 类尾
        fclose($fd);
    }

// </editor-fold>
}

//ErrCode::L();
//ErrCode::M();
