package cn.emay.sdk.util; 
 | 
  
 | 
import java.io.BufferedOutputStream; 
 | 
import java.io.File; 
 | 
import java.io.FileInputStream; 
 | 
import java.io.FileOutputStream; 
 | 
import java.io.IOException; 
 | 
import java.util.ArrayList; 
 | 
import java.util.Collections; 
 | 
import java.util.Comparator; 
 | 
import java.util.HashMap; 
 | 
import java.util.Iterator; 
 | 
import java.util.List; 
 | 
import java.util.Map; 
 | 
import java.util.Map.Entry; 
 | 
  
 | 
import cn.emay.sdk.common.CommonConstants; 
 | 
import cn.emay.sdk.core.dto.cache.UrlDTO; 
 | 
import cn.emay.sdk.core.dto.sms.common.ResultModel; 
 | 
import cn.emay.sdk.core.dto.sms.request.BalanceRequest; 
 | 
import cn.emay.sdk.core.dto.sms.response.BalanceResponse; 
 | 
import cn.emay.sdk.util.http.client.EmayHttpClient; 
 | 
import cn.emay.sdk.util.http.request.impl.EmayHttpRequestString; 
 | 
import cn.emay.sdk.util.http.response.impl.string.EmayHttpResponseString; 
 | 
import cn.emay.sdk.util.http.response.impl.string.EmayHttpResponseStringPraser; 
 | 
import cn.emay.sdk.util.json.JsonHelper; 
 | 
import cn.emay.sdk.util.json.gson.JsonArray; 
 | 
import cn.emay.sdk.util.json.gson.JsonElement; 
 | 
import cn.emay.sdk.util.json.gson.JsonParser; 
 | 
import cn.emay.sdk.util.json.gson.reflect.TypeToken; 
 | 
  
 | 
public class HostUtil { 
 | 
  
 | 
    public static String getUrl(String appId, String secretkey) { 
 | 
        String host = ""; 
 | 
        List<String> list = CommonConstants.interList; 
 | 
        try { 
 | 
            if (list != null) { 
 | 
                long minUseTime = -1l; 
 | 
                for (String url : list) { 
 | 
                    long useTime = getBalance(appId, secretkey, url); 
 | 
                    if (useTime == -1) { 
 | 
                        continue; 
 | 
                    } else if (minUseTime == -1 || minUseTime > useTime) { 
 | 
                        minUseTime = useTime; 
 | 
                        host = url; 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } catch (Exception e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        return host; 
 | 
    } 
 | 
  
 | 
    public static void getSDKInter() { 
 | 
  
 | 
        EmayHttpClient client = new EmayHttpClient(); 
 | 
        EmayHttpRequestString request = null; 
 | 
        try { 
 | 
            request = new EmayHttpRequestString(CommonConstants.getSdkUrl, "UTF-8", "POST", null, null, null); 
 | 
            EmayHttpResponseString res = client.service(request, new EmayHttpResponseStringPraser()); 
 | 
            if (res != null && res.getResultCode().getCode().equals("SUCCESS")) { 
 | 
                String json = res.getResultString(); 
 | 
                if (json != null && !json.equals("")) { 
 | 
                    List<String> list = new ArrayList<String>(); 
 | 
                    JsonArray array = new JsonParser().parse(json).getAsJsonObject().getAsJsonArray("result"); 
 | 
                    Iterator<JsonElement> iterator = array.iterator(); 
 | 
                    while (iterator.hasNext()) { 
 | 
                        JsonElement element = iterator.next(); 
 | 
                        String ip = element.getAsJsonObject().get("ip").getAsString(); 
 | 
                        Integer port = element.getAsJsonObject().get("port").getAsInt(); 
 | 
                        list.add("http://" + ip + ":" + port); 
 | 
                    } 
 | 
                    CommonConstants.interList = list; 
 | 
                } 
 | 
            } 
 | 
        } catch (Exception e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
    public static long getBalance(String appId, String secretKey, String host) { 
 | 
        long useTime = 0l; 
 | 
        try { 
 | 
            long time = System.currentTimeMillis(); 
 | 
            BalanceRequest request = new BalanceRequest(); 
 | 
            ResultModel<BalanceResponse> result = HttpUtil.request(appId, secretKey, host + "/inter/getBalance", request, BalanceResponse.class); 
 | 
            if (result != null && result.getCode().equals("SUCCESS")) { 
 | 
                useTime = System.currentTimeMillis() - time; 
 | 
            } else { 
 | 
                useTime = -1l; 
 | 
            } 
 | 
        } catch (Exception e) { 
 | 
            e.printStackTrace(); 
 | 
            useTime = -1l; 
 | 
        } 
 | 
        return useTime; 
 | 
  
 | 
    } 
 | 
  
 | 
    public static List<Entry<String, Integer>> sortMap(Map<String, Integer> map) { 
 | 
        List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(map.entrySet()); 
 | 
        Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() { 
 | 
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { 
 | 
                return (o2.getValue() - o1.getValue()); 
 | 
            } 
 | 
        }); 
 | 
        return list; 
 | 
    } 
 | 
  
 | 
    public static File creatCacheFile(String filePath) { 
 | 
        File file = null; 
 | 
        try { 
 | 
            if (StringUtil.isEmpty(filePath)) { 
 | 
                file = new File(CommonConstants.fileName); 
 | 
                if (!file.exists()) { 
 | 
                    file.createNewFile(); 
 | 
                } 
 | 
                return file; 
 | 
            } 
 | 
            file = new File(filePath); 
 | 
            if (!file.exists()) { 
 | 
                File fileParent = file.getParentFile(); 
 | 
                if (!fileParent.exists()) { 
 | 
                    fileParent.mkdirs(); 
 | 
                } 
 | 
                file.createNewFile(); 
 | 
            } 
 | 
            if (!file.canWrite() || !file.canRead()) { 
 | 
                return null; 
 | 
            } 
 | 
        } catch (Exception e) { 
 | 
            e.printStackTrace(); 
 | 
            return null; 
 | 
        } 
 | 
        return file; 
 | 
    } 
 | 
  
 | 
    public static boolean writeFile(File file, String content) { 
 | 
        BufferedOutputStream bos = null; 
 | 
        try { 
 | 
            bos = new BufferedOutputStream(new FileOutputStream(file)); 
 | 
            bos.write(content.getBytes("UTF-8")); 
 | 
            bos.flush(); 
 | 
        } catch (Exception e) { 
 | 
            e.printStackTrace(); 
 | 
            return false; 
 | 
        } finally { 
 | 
            try { 
 | 
                bos.close(); 
 | 
            } catch (IOException e) { 
 | 
                e.printStackTrace(); 
 | 
            } 
 | 
        } 
 | 
        return true; 
 | 
    } 
 | 
  
 | 
    public static String readFile(File file) { 
 | 
        long fileSize = file.length(); 
 | 
        String json = ""; 
 | 
        if (fileSize > Integer.MAX_VALUE) { 
 | 
            return null; 
 | 
        } 
 | 
        byte[] by = new byte[(int) fileSize]; 
 | 
        try { 
 | 
            FileInputStream in = new FileInputStream(file); 
 | 
            int offset = 0; 
 | 
            int numRead = 0; 
 | 
            while (offset < by.length && (numRead = in.read(by, offset, by.length - offset)) >= 0) { 
 | 
                offset += numRead; 
 | 
            } 
 | 
            json = new String(by, "UTF-8"); 
 | 
            in.close(); 
 | 
        } catch (Exception e) { 
 | 
            return null; 
 | 
        } 
 | 
        return json; 
 | 
    } 
 | 
  
 | 
    public static void contrastWrite(File file, String appId, String host) { 
 | 
        List<UrlDTO> list = new ArrayList<UrlDTO>(); 
 | 
        String json = readFile(file); 
 | 
        if (StringUtil.isEmpty(json)) { 
 | 
            UrlDTO dto = new UrlDTO(appId, host); 
 | 
            list.add(dto); 
 | 
            json = JsonHelper.toJsonString(list); 
 | 
            writeFile(file, json); 
 | 
        } else { 
 | 
            list = JsonHelper.fromJson(new TypeToken<List<UrlDTO>>() { 
 | 
            }, json); 
 | 
            Map<String, String> map = new HashMap<String, String>(); 
 | 
            for (UrlDTO urlDTO : list) { 
 | 
                map.put(urlDTO.getAppId(), urlDTO.getUrl()); 
 | 
                if (urlDTO.getAppId().equals(appId) && !urlDTO.getUrl().equals(host)) { 
 | 
                    urlDTO.setUrl(host); 
 | 
                    json = JsonHelper.toJsonString(list); 
 | 
                    writeFile(file, json); 
 | 
                    break; 
 | 
                } 
 | 
  
 | 
            } 
 | 
            if (!map.containsKey(appId)) { 
 | 
                list.add(new UrlDTO(appId, host)); 
 | 
                writeFile(file, JsonHelper.toJsonString(list)); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public static String getFileUrl(File file, String appId) { 
 | 
        String url = ""; 
 | 
        String json = readFile(file); 
 | 
        if (StringUtil.isEmpty(json)) { 
 | 
            return url; 
 | 
        } else { 
 | 
            List<UrlDTO> list = JsonHelper.fromJson(new TypeToken<List<UrlDTO>>() { 
 | 
            }, json); 
 | 
            for (UrlDTO urlDTO : list) { 
 | 
                if (urlDTO.getAppId().equals(appId)) { 
 | 
                    url = urlDTO.getUrl(); 
 | 
                    break; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return url; 
 | 
    } 
 | 
} 
 |