package cn.com.uangel.adsdk.socketrequest;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Vector;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.Log;
import cn.com.uangel.adsdk.entity.Advertisement;
import cn.com.uangel.adsdk.util.CommunalData;
import cn.com.uangel.adsdk.util.Util;
/**
*
* @author dev 手机端通过socket向服务器发送请求传递参数
*/
public class ClientSocketRequest {
private Socket socket = null;
private String serverIP = "202.152.184.94";
public static ClientSocketRequest m_Client_Socket_Request = null;
private DataInputStream in;
private DataOutputStream out;
private Vector<Advertisement> ads;
/**
*
* @return 返回连接socket对象
*/
public static ClientSocketRequest getIntence() {
if (m_Client_Socket_Request == null) {
m_Client_Socket_Request = new ClientSocketRequest();
}
return m_Client_Socket_Request;
}
private void writeUTF(String utfStr) throws IOException {
out.writeUTF(utfStr);
out.flush();
}
private String readUTF() throws IOException {
return in.readUTF();
}
public synchronized Vector<Advertisement> queryServerData(Context context, int adType) throws Exception {
if (CommunalData.city_code.equals("")) {
Util.initAll(context);
}
// 暂时不考虑net_state的问题了,因为没有网络会接受不到数据,效果是一样的
// if (!CommunalData.net_state) {
// return null;
// }
socket = new Socket(serverIP, 2022);
in = new DataInputStream(new BufferedInputStream(socket.getInputStream(), 8 * 1024));
out = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream(), 8 * 1024));
writeUTF("RequestAD");
out.flush();
readUTF(); // "OK"
String netType = "WIFI".equals(CommunalData.net_type) ? "1" : "0";
out.writeUTF(CommunalData.AppId + "‖" + CommunalData.Imei + "‖" + CommunalData.service_prv + "‖"
+ CommunalData.phone_type + "‖" + netType + "‖" + adType + "‖" + CommunalData.packagename + "‖"
+ CommunalData.city_code + "‖" + CommunalData.longitude + "‖" + CommunalData.latitude);
// System.out.println(CommunalData.phone_type);
// System.out.println("netType: " + CommunalData.net_type);
out.flush();
String okADsStr = in.readUTF(); // 满足条件的广告字符串
if ("No ADs".equals(okADsStr)) {
Log.e("UangelAD", "No ADs");
return null;
}
String[] okADs = okADsStr.split("︴");
// System.out.println(okADsStr);
ads = new Vector<Advertisement>();
for (String adStr : okADs) {
System.out.println("adStr: " + adStr);
String[] okAD = adStr.split("‖");
Advertisement ad = new Advertisement();
ad.setShowTypeID(okAD[0]);
ad.setAdID(okAD[1]);
ad.setAdTitle(okAD[3]);
ad.setDetail(okAD[6]);
String titleOrImg = okAD[2].split(":")[1];
int toi = 0;
if ("显示文字+图片".equals(titleOrImg)) {
toi = 0;
} else if ("仅显示图片".equals(titleOrImg)) {
toi = 1;
} else if ("全屏图片".equals(titleOrImg)) {
toi = 2;
} else if ("视频动画".equals(titleOrImg)) {
toi = 3;
}
ad.setTitleOrImg(toi);
if (okAD[5] != null && !okAD[5].equals("")) {
int click_result = 0;
if (okAD[5].equals("手机网络")) {
click_result = 1;
ad.setWeb_url(okAD[7]);
} else if (okAD[5].equals("Android程序")) {
click_result = 2;
ad.setWeb_url(okAD[7]);
} else if (okAD[5].equals("OPhone程序")) {
click_result = 2;
ad.setWeb_url(okAD[7]);
} else if (okAD[5].equals("点击通话")) {
click_result = 3;
ad.setTel(okAD[7]);
} else if (okAD[5].equals("发送短信")) {
click_result = 4;
String[] msgInfo = okAD[7].split("¿");
ad.setTel(msgInfo[0]);
ad.setSms(msgInfo[1]);
} else if (okAD[5].equals("发送邮件")) {
click_result = 5;
String[] emailInfo = okAD[7].split("¿");
ad.setEmail(new String[] { emailInfo[0] });
ad.setEmail_title("安捷乐广告");
ad.setEmail_content(emailInfo[1]);
} else if (okAD[5].equals("显示GoogleMap地址")) {
String[] addressInfo = okAD[7].split(":");
click_result = 6;
ad.setLon(Double.parseDouble(addressInfo[2]));
ad.setLat(Double.parseDouble(addressInfo[1]));
ad.setWeb_url(addressInfo[0]);
} else if (okAD[5].equals("视频动画")) {
click_result = 7;
} else if (okAD[5].equals("播放音乐")) {
click_result = 8;
ad.setMp3_url(okAD[7]);
} else if (okAD[5].equals("全屏图片")) {
click_result = 9;
ad.setClickFullImg(Drawable.createFromStream(in, null));
}
ad.setClick_result(click_result);
}
switch (adType) {
case 1:// 条幅型
case 3:// 悬浮型
ad.setImages(Drawable.createFromStream(in, null));
break;
case 2:// 插屏型
switch (toi) {
case 2:// 全屏图片
ad.setImages(Drawable.createFromStream(in, null));
break;
case 3:// 视频动画
// ad.setImages(Drawable.createFromStream(in, null));
break;
}
}
ads.add(ad);
}
socket.close();
return ads;
}
public synchronized void sendClickInfo(Advertisement ad) {
if (ad == null)
return;
try {
socket = new Socket(serverIP, 2022);
in = new DataInputStream(new BufferedInputStream(socket.getInputStream(), 8 * 1024));
out = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream(), 8 * 1024));
writeUTF("ClickAD");
writeUTF(CommunalData.AppId + "‖" + ad.getAdID() + "‖" + CommunalData.Imei + "‖" + CommunalData.city_code
+ "‖" + ad.getShowTypeID());
} catch (Exception e) {
e.printStackTrace();
}
}
}