正在查看: WeatherSense v1.8.9 应用的 DeviceAPConnector.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: WeatherSense v1.8.9 应用的 DeviceAPConnector.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package com.emax.weather.utils;
import android.content.Context;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
public class DeviceAPConnector {
private String bindDevice;
private OnConnectCallback callback;
private String keyStr;
private Handler mHandler;
private Thread mThread;
private DatagramSocket socket;
private String ssidStr;
private boolean loop = true;
private final int STATE_CONNECT = 0;
private final int STATE_SET_SSID = 1;
private final int STATE_SET_KEY = 2;
private int state = 0;
private int retry = 0;
private int maxRetry = 3;
public interface OnConnectCallback {
void onFail();
void onNotResponse();
void onSuccess(String bindDevice);
}
public DeviceAPConnector(Context context) {
this.mHandler = new Handler(context.getMainLooper());
}
public void setSsidAndKeyStr(String ssidStr, String keyStr) {
this.ssidStr = ssidStr;
this.keyStr = keyStr;
}
public void initSocket() {
Log.d("DeviceAPConnector", "initSocket socket before:" + this.socket);
try {
if (this.socket == null) {
DatagramSocket datagramSocket = new DatagramSocket((SocketAddress) null);
this.socket = datagramSocket;
datagramSocket.setReuseAddress(true);
this.socket.setBroadcast(true);
this.socket.bind(new InetSocketAddress(8800));
}
startRevice();
} catch (Exception e) {
e.printStackTrace();
closeSocket();
}
Log.d("DeviceAPConnector", "initSocket socket after:" + this.socket);
}
private void closeSocket() {
Log.d("DeviceAPConnector", "closeSocket");
this.loop = false;
try {
DatagramSocket datagramSocket = this.socket;
if (datagramSocket != null) {
datagramSocket.close();
this.socket = null;
}
} catch (Exception e) {
e.printStackTrace();
this.socket = null;
}
try {
Thread thread = this.mThread;
if (thread != null) {
thread.interrupt();
this.mThread = null;
}
} catch (Exception e2) {
e2.printStackTrace();
this.mThread = null;
}
}
public void start() {
Log.d("DeviceAPConnector", "start");
this.retry = 0;
initSocket();
startConnect();
}
private void startRevice() {
if (this.mThread == null) {
Thread thread = new Thread() {
@Override
public void run() {
while (DeviceAPConnector.this.loop) {
byte[] bArr = new byte[1024];
try {
DatagramPacket datagramPacket = new DatagramPacket(bArr, 1024);
DeviceAPConnector.this.socket.receive(datagramPacket);
String str = new String(bArr, datagramPacket.getOffset(), datagramPacket.getLength(), "UTF-8");
Log.d("APConnectFragment", "receiveDataStr :" + str);
DeviceAPConnector.this.mHandler.removeMessages(0);
DeviceAPConnector.this.checkResult(str);
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
this.mThread = thread;
thread.start();
}
}
private void addTimeout() {
this.mHandler.postDelayed(new Runnable() {
@Override
public final void run() {
DeviceAPConnector.this.lambda$addTimeout$0$DeviceAPConnector();
}
}, 15000L);
}
private void startConnect() {
Log.d("DeviceAPConnector", "startConnect");
addTimeout();
this.state = 0;
sendData("LSD_WIFI");
}
private void setDeviceSSid() {
addTimeout();
this.state = 1;
sendData(this.ssidStr);
}
private void setDeviceKey() {
addTimeout();
this.state = 2;
sendData(this.keyStr);
}
private void performCallbackFail() {
closeSocket();
this.mHandler.post(new Runnable() {
@Override
public final void run() {
DeviceAPConnector.this.lambda$performCallbackFail$1$DeviceAPConnector();
}
});
}
public void lambda$performCallbackFail$1$DeviceAPConnector() {
OnConnectCallback onConnectCallback = this.callback;
if (onConnectCallback != null) {
onConnectCallback.onFail();
}
}
public void lambda$addTimeout$0$DeviceAPConnector() {
int i = this.retry;
if (i < this.maxRetry) {
this.retry = i + 1;
Log.d("DeviceAPConnector", "callbackNotResponse retry :" + this.retry);
closeSocket();
initSocket();
startConnect();
return;
}
performCllbackNotResponse();
}
private void performCllbackNotResponse() {
closeSocket();
OnConnectCallback onConnectCallback = this.callback;
if (onConnectCallback != null) {
onConnectCallback.onNotResponse();
}
}
public void callbackFail() {
int i = this.retry;
if (i < this.maxRetry) {
this.retry = i + 1;
closeSocket();
initSocket();
startConnect();
return;
}
performCallbackFail();
}
private void callbackSuccess() {
closeSocket();
this.mHandler.post(new Runnable() {
@Override
public void run() {
if (DeviceAPConnector.this.callback != null) {
DeviceAPConnector.this.callback.onSuccess(DeviceAPConnector.this.bindDevice);
}
}
});
}
public void checkResult(String receiveDataStr) {
int i = this.state;
if (i == 0) {
if (!TextUtils.isEmpty(receiveDataStr)) {
String[] split = receiveDataStr.split(",");
if (split != null && split.length == 2) {
this.bindDevice = split[0];
setDeviceSSid();
return;
} else {
callbackFail();
return;
}
}
callbackFail();
return;
}
if (i == 1) {
if (receiveDataStr.contains("+ok")) {
setDeviceKey();
return;
} else {
callbackFail();
return;
}
}
if (i != 2) {
return;
}
if (receiveDataStr.contains("+ok")) {
callbackSuccess();
} else {
callbackFail();
}
}
private void sendData(final String text) {
new Thread() {
@Override
public void run() {
try {
byte[] bytes = text.getBytes("UTF-8");
DeviceAPConnector.this.socket.send(new DatagramPacket(bytes, bytes.length, InetAddress.getByName("11.11.11.254"), 8800));
Log.d("DeviceAPConnector", "send");
} catch (Exception e) {
try {
Thread.sleep(3000L);
} catch (InterruptedException e2) {
e2.printStackTrace();
}
DeviceAPConnector.this.callbackFail();
e.printStackTrace();
}
}
}.start();
}
public void setOnConnectCallback(OnConnectCallback callback) {
this.callback = callback;
}
}