| | |
| | | package com.dayu.recharge.net; |
| | | |
| | | import android.app.Activity; |
| | | import android.content.Context; |
| | | import android.os.Handler; |
| | | import android.net.ConnectivityManager; |
| | | import android.net.NetworkInfo; |
| | | import android.os.Looper; |
| | | import android.text.TextUtils; |
| | | import android.util.Log; |
| | | |
| | | import com.dayu.recharge.MyApplication; |
| | | import com.dayu.recharge.activity.HomeActivity; |
| | | import com.dayu.recharge.dao.BaseDaoSingleton; |
| | | import com.dayu.recharge.dbBean.AdminDataBean; |
| | | import com.dayu.recharge.dbBean.DeviceNumber; |
| | | import com.dayu.recharge.dbBean.IpBean; |
| | | import com.easysocket.EasySocket; |
| | | import com.easysocket.callback.SimpleCallBack; |
| | | import com.easysocket.entity.OriginReadData; |
| | | import com.easysocket.entity.SocketAddress; |
| | | import com.easysocket.exception.RequestTimeOutException; |
| | | import com.easysocket.interfaces.conn.ISocketActionListener; |
| | | import com.easysocket.interfaces.conn.SocketActionListener; |
| | | import com.dayu.recharge.MyApplication; |
| | | import com.easysocket.utils.HexUtil; |
| | | import com.tencent.bugly.crashreport.CrashReport; |
| | | |
| | | import java.util.logging.Handler; |
| | | |
| | | |
| | | /** |
| | |
| | | boolean isTest = false; |
| | | Context mContext; |
| | | |
| | | CallbackSender mSender; |
| | | |
| | | public static SocketNet getInstance() { |
| | | if (socketNet == null) { |
| | | socketNet = new SocketNet(); |
| | | if (socketNet.socketActionListener != null) { |
| | | |
| | | } |
| | | } |
| | | |
| | | return socketNet; |
| | | } |
| | | |
| | |
| | | /** |
| | | * 发送一个的消息, |
| | | */ |
| | | public void sendTestMessage(byte[] dataMessage, SocketCallBack callBack) { |
| | | public void sendTestMessage(byte[] dataMessage, String AFN, SocketCallBack callBack) { |
| | | myCallBack = callBack; |
| | | isTest = false; |
| | | // 发送 |
| | | // EasySocket.getInstance().upMessage(dataMessage); |
| | | if (EasySocket.getInstance().getDefconnection() != null) { |
| | | // EasySocket.getInstance().disconnect(false); |
| | | // EasySocket.getInstance().connect(); |
| | | EasySocket.getInstance().upMessage(dataMessage); |
| | | // this.dataMessage = dataMessage; |
| | | mSender = new CallbackSender(); |
| | | mSender.setAFN(AFN); |
| | | mSender.setData(dataMessage); |
| | | if (isNetworkAvailable(MyApplication.myApplication)) { |
| | | // 发送 |
| | | if (EasySocket.getInstance().getDefconnection() != null) { |
| | | // EasySocket.getInstance().upMessage(dataMessage); |
| | | EasySocket.getInstance().upCallbackMessage(mSender).onCallBack(new SimpleCallBack(AFN) { |
| | | @Override |
| | | public void onResponse(OriginReadData data) { |
| | | |
| | | try { |
| | | mSender = null; |
| | | myCallBack = null; |
| | | Log.i("SocketActionListener", "SimpleCallBack收到数据-->" + HexUtil.bytesToHex(data.getBodyBytes())); |
| | | SocketData socketData = new SocketData(); |
| | | socketData.setBodyData(data.getBodyBytes()); |
| | | socketData.setHeaderData(data.getHeaderData()); |
| | | // dataMessage = null; |
| | | if (callBack != null) { |
| | | callBack.onSocketResponse(socketData); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void onError(Exception e) { |
| | | super.onError(e); |
| | | mSender = null; |
| | | myCallBack = null; |
| | | try { |
| | | if (e instanceof RequestTimeOutException) { |
| | | // 在这里执行需要在主线程中执行的操作 |
| | | callBack.onSocketError(-3, "请求超时,正在重试"); |
| | | //超时后重新连接 |
| | | EasySocket.getInstance().disconnect(true); |
| | | } |
| | | |
| | | } catch (Exception ex) { |
| | | throw new RuntimeException(ex); |
| | | } |
| | | } |
| | | }); |
| | | } else { |
| | | callBack.onSocketError(-2, "与服务器连接断开,请检查网络稍后再试"); |
| | | MyApplication.myApplication.initEasySocket(false, null); |
| | | } |
| | | } else { |
| | | MyApplication.myApplication.initEasySocket(false, null); |
| | | callBack.onSocketError(-2, "请检查网络连接"); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | |
| | | */ |
| | | @Override |
| | | public void onSocketConnSuccess(SocketAddress socketAddress) { |
| | | Log.i("SocketActionListener", "连接成功"); |
| | | |
| | | |
| | | Log.i("SocketActionListener1111", "连接成功"); |
| | | MyApplication.myApplication.isConncet = true; |
| | | rushState(); |
| | | DeviceNumber initCode = BaseDaoSingleton.getInstance(MyApplication.myApplication).deviceNumberDao().findFirst(); |
| | | if (initCode == null && !MyApplication.myApplication.isDoInitMachine) { |
| | | new Handler().postDelayed(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | IpBean ipBean = BaseDaoSingleton.getInstance(MyApplication.myApplication).ipDao().findFirst(); |
| | | AdminDataBean adminData = BaseDaoSingleton.getInstance(MyApplication.myApplication).adminDao().findFirst(); |
| | | if (ipBean != null && adminData != null) { |
| | | MyApplication.myApplication.initMachineRequestBean(ipBean.getIp(), ipBean.getPort(), adminData.getAddressCode()); |
| | | try { |
| | | AdminDataBean adminData = BaseDaoSingleton.getInstance(MyApplication.myApplication).adminDao().findFirst(); |
| | | Log.i("SocketActionListener1111", "isDoInitMachine==" + MyApplication.myApplication.isDoInitMachine + ""); |
| | | //每次连接成功注册一次设备 |
| | | if (!MyApplication.myApplication.isDoInitMachine) { |
| | | Log.i("SocketActionListener1111", "isDoInitMachine"); |
| | | if (MyApplication.myApplication.ipBean != null && adminData != null) { |
| | | if (!TextUtils.isEmpty(adminData.getAddressCode()) && !MyApplication.myApplication.isCreate) { |
| | | Log.i("SocketActionListener1111", "initMachineRequestBean"); |
| | | MyApplication.myApplication.initMachineRequestBean(MyApplication.myApplication.ipBean.getIp(), MyApplication.myApplication.ipBean.getPort(), adminData.getAddressCode()); |
| | | |
| | | } |
| | | } |
| | | }, 500); |
| | | } |
| | | try { |
| | | if (mSender != null) { |
| | | sendTestMessage(mSender.getData(), mSender.getAFN(), myCallBack); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | |
| | | } catch (Exception e) { |
| | | CrashReport.postCatchedException(e); |
| | | } |
| | | // if (dataMessage != null) { |
| | | // EasySocket.getInstance().upMessage(dataMessage); |
| | | // } |
| | | |
| | | |
| | | rushState(); |
| | | } |
| | | |
| | | /** |
| | |
| | | MyApplication.myApplication.isConncet = false; |
| | | rushState(); |
| | | Log.i("SocketActionListener", "socket连接失败"); |
| | | if (isTest) { |
| | | // ToastUtil.show(mContext, "连接失败,请检查网络"); |
| | | } else { |
| | | if (myCallBack != null) { |
| | | myCallBack.onSocketError(-1, "连接数据中心失败,请检查网络"); |
| | | } |
| | | } |
| | | // if (myCallBack != null) { |
| | | // myCallBack.onSocketError(-1, "连接数据中心失败,请检查网络"); |
| | | // } |
| | | // myCallBack = null; |
| | | } |
| | | |
| | | /** |
| | |
| | | Log.i("SocketActionListener", "---> socket断开连接,是否需要重连:" + isNeedReconnect); |
| | | MyApplication.myApplication.isConncet = false; |
| | | rushState(); |
| | | try { |
| | | if (myCallBack != null) { |
| | | myCallBack.onSocketError(-2, "与服务器连接断开,请检查网络"); |
| | | } |
| | | myCallBack = null; |
| | | } catch (Exception e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * socket接收的数据 |
| | | * @param socketAddress |
| | | * @param readData |
| | | * @param originReadData |
| | | */ |
| | | @Override |
| | | public void onSocketResponse(SocketAddress socketAddress, String readData) { |
| | | Log.i("SocketActionListener", "SocketActionListener收到数据-->" + readData); |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onSocketResponse(SocketAddress socketAddress, OriginReadData originReadData) { |
| | | super.onSocketResponse(socketAddress, originReadData); |
| | | Log.i("SocketActionListener", "SocketActionListener收到数据-->" + originReadData.getBodyString()); |
| | | SocketData socketData = new SocketData(); |
| | | socketData.setBodyData(originReadData.getBodyBytes()); |
| | | socketData.setHeaderData(originReadData.getHeaderData()); |
| | | // dataMessage = null; |
| | | if (myCallBack != null) { |
| | | myCallBack.onSocketResponse(socketData); |
| | | } |
| | | |
| | | Log.i("SocketActionListener", "SocketActionListener收到数据-->" + HexUtil.bytesToHex(originReadData.getBodyBytes())); |
| | | // SocketData socketData = new SocketData(); |
| | | // socketData.setBodyData(originReadData.getBodyBytes()); |
| | | // socketData.setHeaderData(originReadData.getHeaderData()); |
| | | //// dataMessage = null; |
| | | // if (myCallBack != null) { |
| | | // myCallBack.onSocketResponse(socketData); |
| | | // } |
| | | // myCallBack = null; |
| | | } |
| | | }; |
| | | |
| | | private void rushState() { |
| | | if (HomeActivity.homeActivity != null) { |
| | | HomeActivity.homeActivity.rushState(); |
| | | try { |
| | | if (HomeActivity.homeActivity != null) { |
| | | HomeActivity.homeActivity.rushState(); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | // 检查网络连接是否可用 |
| | | public boolean isNetworkAvailable(Context context) { |
| | | if (context != null) { |
| | | ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); |
| | | if (connectivityManager != null) { |
| | | NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); |
| | | return activeNetworkInfo != null && activeNetworkInfo.isConnected(); |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | } |