package android.source.tuangou.framework.net;
import android.os.*;
import android.source.tuangou.framework.Config;
import android.source.tuangou.framework.store.beans.Preferences;
import android.source.tuangou.framework.update.VersionManager;
import android.source.tuangou.framework.util.LogUtil;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.*;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.scheme.*;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.util.EntityUtils;
/*
* 网络服务类
* */
public class NetworkService{
private static NetworkService instance;
private final int CONNECTION_TIMEOUT = 60000;//连接超时
private final int SOCKET_TIMEOUT = 0x1d4c0;//
private DefaultHttpClient httpClient;
//网络服务构造函数
public NetworkService(){
//http通信参数类
BasicHttpParams basichttpparams = new BasicHttpParams();
//设置连接超时时间
HttpConnectionParams.setConnectionTimeout(basichttpparams, 60000);
//设置连接成功后,发送请求后最大等待Server响应的时间
HttpConnectionParams.setSoTimeout(basichttpparams, 120000);
/*
* PlainSocketFactory--创建和初始化普通的(不加密的)套接字的默认工厂
* Scheme类代表了一个协议模式
* SchemeRegistry类用来维持一组Scheme,当去通过请求URI建立连接时,HttpClient可以从中选择
*
* */
SchemeRegistry schemeregistry = new SchemeRegistry();
PlainSocketFactory plainsocketfactory = PlainSocketFactory.getSocketFactory();
Scheme scheme = new Scheme("http", plainsocketfactory, 80);
Scheme scheme1 = schemeregistry.register(scheme);
ThreadSafeClientConnManager threadsafeclientconnmanager = new
ThreadSafeClientConnManager(basichttpparams, schemeregistry);
DefaultHttpClient defaulthttpclient = new DefaultHttpClient
(threadsafeclientconnmanager, basichttpparams);
httpClient = defaulthttpclient;
}
//获取get请求参数
private String addGetParams(String s){
StringBuilder stringbuilder = new StringBuilder();
String s1 = Preferences.requestKeyName;
StringBuilder stringbuilder1 = stringbuilder.append(s1).append("=");
String s2 = Preferences.getInstance().getRequestKey();
StringBuilder stringbuilder2 = stringbuilder1.append(s2).append("&ver=");
String s3 = Config.CLIENT_TAG;
StringBuilder stringbuilder3 = stringbuilder2.append(s3).append(":");
String s4 = VersionManager.getFullVersion();
String s5 = stringbuilder3.append(s4).toString();
String s6;
if (s.indexOf("?") < 0)
s6 = (new StringBuilder()).append(s).append("?").append(s5).toString();
else
s6 = (new StringBuilder()).append(s).append("&").append(s5).toString();
return s6;
}
private void sendFailureMsg(int i, String s, Handler handler)
{
Message message = new Message();
Bundle bundle = new Bundle();
bundle.putInt("status", 600);
bundle.putString("error", s);
message.setData(bundle);
boolean flag = handler.sendMessage(message);
}
public static NetworkService sharedInstance()
{
try {
if (instance == null)
instance = new NetworkService();
return instance;
} catch (Exception e) {
// TODO: handle exception
}
return null;
}
//获取网络数据
public void get(String url, final Handler handler){
//获取get请求URL
final String adUrl = addGetParams(url);
LogUtil.d(adUrl);
final ResponseHandlerGet rh = new ResponseHandlerGet(handler);
//创建线程获取数据
(new ThreadGet(adUrl,handler,rh)).start();
}
//http请求
public HttpResponse getResponse(String s){
HttpResponse httpresponse;
try {
HttpGet httpget;
String s1 = addGetParams(s);
LogUtil.d(s1);
httpget = new HttpGet(s1);
httpresponse = null;
HttpResponse httpresponse1 = httpClient.execute(httpget);
httpresponse = httpresponse1;
return httpresponse;
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
return null;
}
//通过发送http请求,来获取当前具体地址
public String getSync(String s){
String s1;
try {
HttpResponse httpresponse;
s1 = "";
httpresponse = getResponse(s);
if (httpresponse == null
|| httpresponse.getStatusLine().getStatusCode() != 200){
}else{
String s2 = EntityUtils.toString(httpresponse.getEntity());
return s2;
}
} catch (Exception e) {
// TODO: handle exception
}
return "";
}
public void post(String s, Map map, final Handler handler)
{
final String abUrl = addGetParams(s);
final ResponseHandler2 rh = new ResponseHandler2(handler);
NetworkService networkservice = this;
final Map params = map;
final Handler mhandler = handler;
(new Thread2(params,abUrl,handler,rh)).start();
}
//发送http请求
public String postSync(String Url, Map map){
HttpPost httppost;
String s2;
ArrayList arraylist;
String s1 = addGetParams(Url);
httppost = new HttpPost(s1);
s2 = "";
arraylist = new ArrayList();
String s3 = Preferences.requestKeyName;
String s4 = Preferences.getInstance().getRequestKey();
BasicNameValuePair basicnamevaluepair = new BasicNameValuePair(s3, s4);
boolean flag = arraylist.add(basicnamevaluepair);
//组合数据
if (map != null){
Iterator iterator = map.keySet().iterator();
while(iterator.hasNext()){
String s5 = (String)iterator.next();
String s6 = (String)map.get(s5);
BasicNameValuePair basicnamevaluepair1 = new BasicNameValuePair(s5, s6);
boolean flag1 = arraylist.add(basicnamevaluepair1);
}
}
try {
String s7;
UrlEncodedFormEntity urlencodedformentity = new UrlEncodedFormEntity(
arraylist, "UTF-8");
httppost.setEntity(urlencodedformentity);
HttpResponse httpresponse = httpClient.execute(httppost);
if (httpresponse == null){
return null;
}
//获取http相应的数据
s7 = EntityUtils.toString(httpresponse.getEntity());
return s7;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return "";
}
//发送http请求
public Map postSync(String Url, Map map, JsonParser jsonparser){
//具体发送http请求的函数
String s1 = postSync(Url, map);
return jsonparser.parse(s1);
}
//get函数的相应类
private class ResponseHandlerGet
implements ResponseHandler{
final NetworkService this$0;
final Handler handler;
public String handleResponse(HttpResponse httpresponse)
throws ClientProtocolException, IOException{
System.out.println("handleResponse");
org.apache.http.HttpEntity httpentity;
int i;
httpentity = httpresponse.getEntity();
i = httpresponse.getStatusLine().getStatusCode();
String s;
s = EntityUtils.toString(httpentity);
Bundle bundle = new Bundle();
bundle.putString("responseText", s);
bundle.putInt("status", i);
Message message = new Message();
message.setData(bundle);
boolean flag = handler.sendMessage(message);
return s;
}
ResponseHandlerGet(Handler mHandler){
this$0 = NetworkService.this;
handler = mHandler;
}
}
//获取网络数据的线程
private class ThreadGet extends Thread{
final NetworkService this$0;
final String adUrl;
final Handler handler;
final ResponseHandler rh;
public void run(){
try {
System.out.println("thread run:");
HttpGet httpget = new HttpGet(adUrl);
Object obj = httpClient.execute(httpget, rh);
} catch (IOException ie) {
// TODO: handle exception
NetworkService networkservice = NetworkService.this;
String s1 = ie.getMessage();
Handler handler1 = handler;
networkservice.sendFailureMsg(600, s1, handler1);
return;
}catch(Exception e){
LogUtil.e(e);
NetworkService networkservice1 = NetworkService.this;
String s2 = e.getMessage();
Handler handler2 = handler;
networkservice1.sendFailureMsg(601, s2, handler2);
}
}
//构造函数
ThreadGet(String url, Handler mHandler, ResponseHandler mResponseHandler){
this$0 = NetworkService.this;
adUrl = url;
rh = mResponseHandler;
handler = mHandler;
}
}
private class ResponseHandler2
implements ResponseHandler
{
final NetworkService this$0;
final Handler handler;
public Object handleResponse(HttpResponse httpresponse)
throws ClientProtocolException, IOException{
try {
org.apache.http.HttpEntity httpentity;
int i;
httpentity = httpresponse.getEntity();
i = httpresponse.getStatusLine().getStatusCode();
String s;
s = EntityUtils.toString(httpentity);
Bundle bundle = new Bundle();
bundle.putString("responseText", s);
bundle.putInt("status", i);
Message message = new Message();
message.setData(bundle);
boolean flag = handler.sendMessage(message);
return s;
} catch (Exception e) {
// TODO: handle exception
}
return "";
}
ResponseHandler2(Handler mHandler)
{
this$0 = NetworkService.this;
this.handler = mHandler;
}
}
private class Thread2 extends Thread
{
final NetworkService this$0;
final String abUrl;
final Handler handler;
final Map params;
final ResponseHandler rh;
public void run()
{
ArrayList arraylist;
NetworkService networkservice;
String s4;
Handler handler1;
arraylist = new ArrayList();
String s = Preferences.requestKeyName;
String s1 = Preferences.getInstance().getRequestKey();
BasicNameValuePair basicnamevaluepair = new BasicNameValuePair(s, s1);
boolean flag = arraylist.add(basicnamevaluepair);
if (params != null){
for (Iterator iterator = params.keySet().iterator(); iterator.hasNext();){
String s2 = (String)iterator.next();
String s3 = (String)params.get(s2);
BasicNameValuePair basicnamevaluepair1 = new BasicNameValuePair(s2, s3);
boolean flag1 = arraylist.add(basicnamevaluepair1);
}
}
try
{
String s5 = abUrl;
HttpPost httppost = new HttpPost(s5);
UrlEncodedFormEntity urlencodedformentity = new UrlEncodedFormEntity(arraylist, "UTF-8");
httppost.setEntity(urlencodedformentity);
DefaultHttpClient defaulthttpclient = httpClient;
ResponseHandler responsehandler = rh;
Object obj = defaulthttpclient.execute(httppost, responsehandler);
}
// Misplaced declaration of an exception variable
catch (IOException iexception)
{
LogUtil.e(iexception);
networkservice = NetworkService.this;
s4 = iexception.getMessage();
handler1 = handler;
networkservice.sendFailureMsg(600, s4, handler1);
}
catch (Exception exception)
{
LogUtil.e(exception);
NetworkService networkservice1 = NetworkService.this;
String s6 = exception.getMessage();
Handler handler2 = handler;
networkservice1.sendFailureMsg(601, s6, handler2);
}
return;
}
Thread2(Map mapParams,String abUrl,Handler handler,
ResponseHandler mResponseHandler)
{
this$0 = NetworkService.this;
params = mapParams;
this.abUrl = abUrl;
rh = mResponseHandler;
this.handler = handler;
}
}
}