左晓为主开发手持机充值管理机
app/src/main/java/com/dayu/recharge/net/SocketNet.java
@@ -1,19 +1,28 @@
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;
/**
@@ -29,13 +38,13 @@
    boolean isTest = false;
    Context mContext;
    CallbackSender mSender;
    public static SocketNet getInstance() {
        if (socketNet == null) {
            socketNet = new SocketNet();
            if (socketNet.socketActionListener != null) {
            }
        }
        return socketNet;
    }
@@ -43,19 +52,62 @@
    /**
     * 发送一个的消息,
     */
    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, "请检查网络连接");
        }
    }
@@ -93,32 +145,37 @@
         */
        @Override
        public void onSocketConnSuccess(SocketAddress socketAddress) {
            Log.i("SocketActionListener", "连接成功");
            Log.i("SocketActionListener1111", "连接成功");
            MyApplication.myApplication.isConncet = true;
            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);
//            }
            if (isTest) {
                MyApplication.myApplication.isConncet = true;
//                EasySocket.getInstance().disconnect(false);
            } else {
            }
            rushState();
        }
        /**
@@ -129,14 +186,12 @@
        @Override
        public void onSocketConnFail(SocketAddress socketAddress, boolean isNeedReconnect) {
            MyApplication.myApplication.isConncet = false;
            rushState();
            Log.i("SocketActionListener", "socket连接失败");
            if (isTest) {
//                ToastUtil.show(mContext, "连接失败,请检查网络");
            } else {
                if (myCallBack != null) {
                    myCallBack.onSocketError(-1, "socket连接失败,请检查网络");
                }
            }
//            if (myCallBack != null) {
//                myCallBack.onSocketError(-1, "连接数据中心失败,请检查网络");
//            }
//            myCallBack = null;
        }
        /**
@@ -147,33 +202,59 @@
        @Override
        public void onSocketDisconnect(SocketAddress socketAddress, boolean isNeedReconnect) {
            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() {
        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;
    }
}