<?php

/* * **************************************************
 * 此代码为员工在公司工作期间创作.
 * 使用权和所有权归属于公司和员工共有.
 * 收益的权利归属于公司.
 *         ——石家庄龙游科技有限公司
 * ************************************************** */

namespace loyalsoft;

include_once __DIR__ . '/../../main.php';

/**
 * 检查更新(基于和王解的update模块的约定)
 * @author gwang
 * @version 1.0.0 Created by wanggangzero at 2023年6月15日17:07:11
 */
class CheckUpdateDLL {

    const Ver_file = "CodeVer.txt";                                             # dll版本信息文件名
    const DLL_file = "Assembly-CSharp.dll.bytes";                               # dll文件名

    /**
     * 检查客户端版本是否需要强制更新

     * @return UpdateDLLRetInfo
     */
    public static function Check() {
        $clientVer = self::GetClientVersion();                                  # 客户端基带版本号
        $platform = self::GetClientPlatform();                                  # 客户端平台(安卓/IOS)
        $ret = "";                                             # 返回值
        if ($platform != PLAT) {                                                # 防御客户端未正确设置plat,访问错误的服务器地址
            return "检查更新失败!(渠道不匹配 $platform - " . PLAT . ")";
        }
        $url = config::CDN_host() . "/dll/" . self::Ver_file . "?ts=" . now(); # dll版本
        list('result' => $ok, 'msg' => $newVer) = HttpUtil::makeRequest($url, array(), array(), array(), "get"); # 取CDN上版本信息
        if ($ok) {
            if ((intval($newVer) - $clientVer) > 0) { #                                 # 修订版本号不一致, 提示更新
                $ret = config::CDN_host() . "/dll/" . self::DLL_file . "?ver=" . $newVer;
            } else {
                $ret = "平安无事";
            }
        } else {                                                                # 检查更新失败
            $ret = "检查更新失败!";
        }
        return $ret;                                                            # 返回
    }

    /**
     * 读取参数中的客户端dll版本
     * @return int
     */
    static function GetClientVersion() {
        $valueMap = query_paras(); // array
//        $valueMap = array('clientVer' => 2, 'plat' => 'dev_wg');

        if (!is_array($valueMap)) {
            exit("无参数");
        }
        $clientVer = "";
        if (isset($valueMap["clientVer"])) {
            $clientVer = urldecode($valueMap['clientVer']);
        } else {
            exit("缺少参数 'clientVer'!");
        }
        return intval($clientVer);
    }

    /**
     * 读取参数中的客户端平台(and/and_hw/and_yyb/dev/dev_wg)
     * @return string
     */
    static function GetClientPlatform() {
        $valueMap = query_paras(); // array
//        $valueMap = array('clientVer' => 22, 'plat' => 'dev_wg');
        if (!is_array($valueMap)) {
            exit("无参数");
        }
        $plat = "";
        if (isset($valueMap["plat"])) {
            $plat = urldecode($valueMap['plat']);
        } else {
            exit("缺少参数 'plat'!");
        }
        return $plat;
    }
}

echo(CheckUpdateDLL::Check());                                   # 打印json给客户端
