import RYSDK from "./RYSDK"; export default class RYAD { //protected _cached_custom = {}; public getAD_custom(id: string, complete: Function, useLocalRandom?: boolean) { useLocalRandom = null == useLocalRandom ? true : useLocalRandom; let self = this; let para = { adv_key: id, success: (data) => { console.log("获取到广告数据 RYAD:", data); if (200 == data.code) { let datas = data.result.list; if (datas == null) { console.error("获取到广告数据 为NULL") } if (true == useLocalRandom) { RYAD.sortDatas_custom(datas); } complete(datas) } else { console.error("获取到广告数据 为NULL") complete(null) } }, fail: (data) => { complete(null) }, complete: (data) => { //complete() }, }; if (null != RYSDK.Instance_custom.rysdk_custom) { RYSDK.Instance_custom.rysdk_custom.ry_GetAdv(para); } else { complete(null); } } public static sortDatas_custom(datas: any): any { if (null == datas || 0 == datas.length) return []; let dataDic: { [appid: string]: any[] } = {}; let keys = new Array(); for (let i = 0; i < datas.length; ++i) { let data = datas[i]; if (dataDic[data.appid] == null) { dataDic[data.appid] = new Array(); dataDic[data.appid].push(data); keys.push(data.appid); } else { dataDic[data.appid].push(data); } } for (let i = 0; i < keys.length; ++i) { let key = keys[i]; let randomIndex = Math.floor(Math.random() * keys.length); let temp = keys[randomIndex]; keys[randomIndex] = key; keys[i] = temp; } for (let i = 0; i < keys.length; ++i) { let key = keys[i]; let dataArray = dataDic[key]; for (let j = 0; j < dataArray.length; ++j) { let data = dataArray[j]; let randomIndex = Math.floor(Math.random() * dataArray.length); let temp = dataArray[randomIndex]; dataArray[randomIndex] = data; dataArray[j] = temp; } } let res = new Array(); while (keys.length > 0) { if (keys.length == 1) { let key = keys[0]; let isOk = false; let dataArray = dataDic[key]; for (let i = 0; i < res.length; ++i) { let curData = res[i]; let nextData = res[i + 1]; if (null != nextData) { if (curData.appid != key && nextData.appid != key) { let data = dataArray.shift(); if (null != data) { let f = res.slice(0, i + 1); let b = res.slice(i + 1, res.length); res = f; res.push(data); for (let k = 0; k < b.length; ++k) { res.push(b[k]); } } isOk = true; break; } } else { if (curData.appid != key) { let data = dataArray.shift(); if (null != data) { let f = res.slice(0, i + 1); let b = res.slice(i + 1, res.length); res = f; res.push(data); for (let k = 0; k < b.length; ++k) { res.push(b[k]); } } isOk = true; break; } } } if (!isOk || dataArray.length <= 0) { keys.splice(0, 1); } } else { for (let i = 0; i < keys.length; ++i) { let key = keys[i]; let dataArray = dataDic[key]; let data = dataArray.shift(); res.push(data); if (dataArray.length <= 0) { keys.splice(i, 1); --i; } } } } return res; } }