package com.qiniu.android.common; import java.net.URI; /** * Created by bailong on 15/10/10. */ public abstract class Zone { /** * 获取上传域名 */ protected synchronized String upHost(ZoneInfo zoneInfo, boolean useHttps, String lastUpHost) { String upHost = null; String upDomain = null; if (lastUpHost != null) { URI uri = URI.create(lastUpHost); //frozen domain String frozenDomain = uri.getHost(); zoneInfo.frozenDomain(frozenDomain); } //get backup domain for (int index = 0; index < zoneInfo.upDomainsList.size(); index++) { String domain = zoneInfo.upDomainsList.get(index); long frozenTill = zoneInfo.upDomainsMap.get(domain); if (frozenTill == 0 || frozenTill <= System.currentTimeMillis() / 1000) { upDomain = domain; break; } } if (upDomain != null) { //reset the selected domain zoneInfo.upDomainsMap.put(upDomain, 0L); } else { //reset the up host frozen time for (String domain : zoneInfo.upDomainsList) { zoneInfo.upDomainsMap.put(domain, 0L); } //return the first one as default if (zoneInfo.upDomainsList.size() > 0) { upDomain = zoneInfo.upDomainsList.get(0); } } if (upDomain != null) { if (useHttps) { upHost = String.format("https://%s", upDomain); } else { upHost = String.format("http://%s", upDomain); } } return upHost; } public abstract String upHost(String upToken, boolean useHttps, String frozenDomain); public abstract void frozenDomain(String upHostUrl); public abstract void preQuery(String token, QueryHandler complete); public abstract boolean preQuery(String token); public interface QueryHandler { void onSuccess(); void onFailure(int reason); } }