GameService.ts 6.14 KB
import DataService from "./DataService";
import { SDKApi } from "../http/SDKApi";
import { GAMEDATA, SDKVersion, __LOG__ } from "../base/SDKConst";
import WxLogin from "../wx/WxLogin";
import WxApi from "../wx/WxApi";
import WxPay from "../wx/WxPay";
import WxSystem from "../wx/WxSystem";
import DouyinPay from "../douyin/DouyinPay";


export default class GameService {
    public constructor() {

    }

    env() {
        return new Promise((resolve, reject) => {
            SDKApi.Version().then((data: any) => {
                if (data) {
                    __LOG__ && console.log("版本信息", data);
                    let num = data.data ? data.data.env ? data.data.env : 2 : 2;
                    DataService.I.setEnvEnum(+num)
                    // DataService.I.setCdnUrl(data.res_url || '');
                }
                // 设置在线参数请求
                // let isAutoOnlineUse = CfgManager.I.config.IsOnlineAutoUse;
                // isAutoOnlineUse && OnlineService.I.updateOnlineConfig().then(() => EventCenter.I.emit(EventEnum.ONLINE_SUCCESS));
                resolve(data);
            }).catch((err: any) => {
                reject(err);
            });
        });
    }

    login(isAuthorize = false) {
        return WxLogin.I.login(isAuthorize);
    }


    saveData(key: string, content: string) {
        return SDKApi.saveData({ key, content, uid: DataService.I.UserId, token: DataService.I.Token });
    }

    getData(key: string) {
        return SDKApi.getData({ key, uid: DataService.I.UserId, token: DataService.I.Token });
    }

    rankAdd(key, value) {
        return SDKApi.rankAdd({ typ: key, fraction: value, uid: DataService.I.UserId, token: DataService.I.Token })
    }

    rankList(typ, t, isRankData) {
        return SDKApi.rankList({ typ, t, rankdata: isRankData ? 1 : 0, uid: DataService.I.UserId, token: DataService.I.Token })
    }

    totalrankAdd(key, value, type, sort) {
        return SDKApi.totalrankAdd({ typ: key, sort, t: type, fraction: value, uid: DataService.I.UserId, token: DataService.I.Token })
    }

    totalrankList(typ, t, isRankData, sort) {
        return SDKApi.totalrankList({ typ, t, sort, rankdata: isRankData ? 1 : 0, uid: DataService.I.UserId, token: DataService.I.Token })
    }
    adList(adtyp) {
        return SDKApi.adList({ adtyp, uid: DataService.I.UserId, token: DataService.I.Token })
    }


    subScribe(tmplIds: Array<string>, ids: Array<string>): Promise<any> {
        return new Promise((resolve, reject) => {
            WxApi.I.subscribeMessage(tmplIds)
                .then((ret: any) => {
                    ret = ret || {};
                    let acceptKeys = tmplIds.filter((idKey: string) => ret[idKey] && ret[idKey] === 'accept');
                    if (!acceptKeys.length) {
                        reject({ errCode: 0, errMsg: '点击取消订阅' });
                    } else {
                        let uid = +DataService.I.UserId;
                        let token = DataService.I.Token + '';
                        let openid = DataService.I.OpenId + '';
                        let id = ids//JSON.stringify()
                        SDKApi.subscribe({
                            uid,
                            token,
                            openid,
                            status: 1,
                            id,
                        })
                        resolve({ code: 0, msg: '订阅成功!' })
                    }

                })
                .catch(err => reject(err));
        });
    }

    /**
     *  支付
     * @param params 
     * @param opts 
     * @returns 
     */
    pay(params: { payid: string, goodid: string, money: number; orderid: string }, opts: any = {}) {
        if (cc.sys.platform === cc.sys.BYTEDANCE_GAME) {
            return DouyinPay.I.pay(params, opts);
        } else {
            return WxPay.I.pay(params, opts);
        }
    }
    /**
     *  订单查询
     */
    orderQuery(source) {
        return SDKApi.orderQuery({
            ...this.buildParams(),
            source
        });
    }
    /**
    *  订单查询
    */
    preorder(goodid: string, orderid: string) {
        return SDKApi.preorder({
            ...this.buildParams2(),
            token: DataService.I.Token,
            goodid, orderid
        });
    }
    /**
    *  商品列表
    */
    goodslist() {
        return SDKApi.goodslist();
    }

    /**
     * 构建登录/弱登录公用参数
     */
    public buildParams2() {
        let gameid = GAMEDATA.game_id;
        let channel = DataService.I.ChannelId;
        let brand = WxSystem.I.brand;
        let model = WxSystem.I.model;
        let version = WxSystem.I.version;
        let system = WxSystem.I.system;
        let platform = WxSystem.I.platform;
        let sdkversion = WxSystem.I.SDKVersion;
        let scene = DataService.I.Scene + '';
        let uid = DataService.I.UserId;
        let env = DataService.I.EnvEnum === 1 ? 'pre' : 'prod';
        let openid = DataService.I.OpenId;
        return {
            gameid,
            channel,
            brand,
            model,
            version,
            system,
            platform,
            sdkversion,
            scene,
            uid,
            env,
            openid
        };
    }

    /**
    * 抖音投放关键行为打点
    */
    behavior() {
        let gameid = GAMEDATA.game_id;
        let uid = DataService.I.UserId;
        let token = DataService.I.Token;
        let openid = DataService.I.OpenId;
        return SDKApi.behavior({
            openid,
            gameid,
            uid,
            token
        })
    }



    /**
     * 构建登录/弱登录公用参数
     */
    public buildParams() {
        let gameid = GAMEDATA.game_id;
        let channel = DataService.I.ChannelId;
        let uid = DataService.I.UserId;
        let token = DataService.I.Token;
        let logindays = DataService.I.logindays;
        return {
            gameid,
            channel,
            uid,
            token,
            logindays
        };
    }

    public static instance: GameService;
    static get I(): GameService {
        return this.instance || (this.instance = new GameService());
    }
}