左晓为主开发手持机充值管理机
zuoxiao
2025-03-14 75f59fa9a615e3584694e820ff83503e8b72ea16
app/src/main/java/com/dayu/recharge/MyApplication.java
@@ -1,250 +1,99 @@
package com.dayu.recharge;
import android.app.Activity;
import android.app.Application;
import android.os.Handler;
import android.os.Message;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;
import com.dayu.recharge.dao.BaseDaoSingleton;
import com.dayu.recharge.dbBean.IpBean;
import com.dayu.recharge.net.ScoketMessageProtocol;
import com.dayu.recharge.net.SocketCallBack;
import com.dayu.recharge.net.SocketData;
import com.dayu.recharge.net.SocketNet;
import com.dayu.recharge.socketBean.ConfirmMachineRequestBean;
import com.dayu.recharge.socketBean.InitMachineBackBean;
import com.dayu.recharge.socketBean.InitMachineRequestBean;
import com.dayu.recharge.tools.BcdUtil;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.AidlUtil;
import com.dayu.recharge.utils.CRC8;
import com.dayu.recharge.utils.DeviceNumberUtils;
import com.dayu.recharge.utils.SocketUtil;
import com.dayu.recharge.utils.ToastUtil;
import com.easysocket.EasySocket;
import com.easysocket.config.EasySocketOptions;
import com.easysocket.entity.SocketAddress;
import com.dayu.baselibrary.BaseApplication;
import com.dayu.baselibrary.business.BusinessProvider;
import com.dayu.baselibrary.business.StartLoginNavigotor;
import com.dayu.baselibrary.dao.BaseDaoSingleton;
import com.dayu.baselibrary.dbbean.LibraryBean;
import com.dayu.baselibrary.utils.BaseCommon;
import com.dayu.henanlibrary.HeNanApplication;
import com.dayu.henanlibrary.dao.HNBaseDaoSingleton;
import com.dayu.henanlibrary.dbBean.AdminDataBean;
import com.dayu.qihealonelibrary.QHAloneApplication;
import com.dayu.qiheonlinelibrary.QHOnLineApplication;
import com.dayu.recharge.activity.LoginActivity;
import com.tencent.bugly.crashreport.CrashReport;
import java.net.InetAddress;
import java.util.Arrays;
import java.util.Timer;
import java.io.File;
public class MyApplication extends Application {
public class MyApplication extends Application implements StartLoginNavigotor {
    public static String TAG = "MyApplication";
    //当前加载的library模块   //0:河南版本,1齐河单机版
    public int libraryType = BaseCommon.NoLibrary;
    public static MyApplication myApplication;
    private String address;
    SocketNet.CreateBack createBack;
    //是否正在请求初始化接口
    public boolean isDoInitMachine = false;
    //是否连接服务器成功
    public boolean isConncet = false;
    private final Timer timer = new Timer();
    @Override
    public void onCreate() {
        super.onCreate();
        myApplication = this;
        isAidl = true;
        AidlUtil.getInstance().connectPrinterService(this);
//        initEasySocket(false, null);
        CrashReport.initCrashReport(getApplicationContext(), "45551598b8", true);
    }
    private boolean isAidl;
    public boolean isAidl() {
        return isAidl;
    }
    public void setAidl(boolean aidl) {
        isAidl = aidl;
    }
    public IpBean ipBean;
    /**
     * 初始化EasySocket
     */
    public void initEasySocket(boolean isCreate, SocketNet.CreateBack createBack) {
        try {
            this.createBack = createBack;
            try {
                ipBean = BaseDaoSingleton.getInstance(MyApplication.myApplication).ipDao().findFirst();
            } catch (Exception e) {
              e.printStackTrace();
            }
            if (ipBean == null) {
                ipBean = new IpBean();
                ipBean.setIp("newreceive.hnsjgg.com");
                ipBean.setPort(9999);
            }
            if (ipBean != null) {
                try {
                    //处理当连接上IP后修改ip不生效问题
                    if (EasySocket.getInstance().getDefconnection() != null) {
                        SocketAddress address = EasySocket.getInstance().getDefconnection().getOptions().getSocketAddress();
                        if (address != null) {
                            if (!address.getIp().equals(ipBean.getIp()) || address.getPort() != ipBean.getPort()) {
                                EasySocket.getInstance().destroyConnection();
                            }
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                if (!SocketUtil.isInteger(ipBean.getIp())) {
                    //域名方式
                    SocketUtil.parseHostGetIPAddress(ipBean.getIp(), new Handler() {
                        @Override
                        public void handleMessage(Message msg) {
                            super.handleMessage(msg);
                            switch (msg.what) {
                                case 1:
                                    createSocket(msg.obj + "", ipBean.getPort(), "0", 88);
                                    break;
                                case 2:
                                    InetAddress[] data = (InetAddress[]) msg.obj;
                                    createSocket(data[0].getHostAddress(), ipBean.getPort(), data[1].getHostAddress(), ipBean.getPort());
                                    break;
                                case -1:
                                    ToastUtil.show("DNS解析失败");
                                    break;
                            }
                        }
                    });
                } else {
                    //ip方式
                    if (EasySocket.getInstance().getContext() == null || isCreate) {
                        createSocket(ipBean.getIp(), ipBean.getPort(), "0", 88);
                    } else {
                        if (EasySocket.getInstance().getDefconnection() != null) {
                            SocketAddress address = EasySocket.getInstance().getDefconnection().getOptions().getSocketAddress();
                            if (address != null) {
                                if (!address.getIp().equals(ipBean.getIp()) || address.getPort() != ipBean.getPort()) {
                                    EasySocket.getInstance().destroyConnection();
                                }
                            }
                        }
                    }
                }
            File file = new File(HNBaseDaoSingleton.SqlitePath);
            if (!file.exists()) {
                file.mkdirs();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        initApplication();
        BaseApplication.getInstance().onCreat(this);
        CrashReport.initCrashReport(getApplicationContext(), "45551598b8", true);
    }
    public void initApplication() {
        //兼容老版的,认为有addressCode并且LibraryBean为null的为河南版本的
        try {
            AdminDataBean adminDataBean = HNBaseDaoSingleton.getInstance(this).adminDao().findFirst();
            LibraryBean libraryBean = BaseDaoSingleton.getInstance(this).libraryDao().findFirst();
            if (adminDataBean != null && libraryBean == null && !TextUtils.isEmpty(adminDataBean.addressCode)) {
                libraryType = BaseCommon.HeNanLibrary;
                initHeNan();
            } else if (libraryBean != null) {
                libraryType = libraryBean.getType();
                switch (libraryType) {
                    case BaseCommon.HeNanLibrary:
                        initHeNan();
                        break;
                    case BaseCommon.QHAloneLibrary:
                        QHAloneApplication.getInstance().application = this;
                        break;
                    case BaseCommon.QHOnLineLibrary:
                        QHOnLineApplication.getInstance(this);
                        BusinessProvider.getInstance(this);
                        break;
                    case BaseCommon.Generalv1Library:
                        com.dayu.general.BaseApplication.getInstance().application = this;
                        break;
                }
            }
        } catch (
                Exception e) {
            e.printStackTrace();
            CrashReport.postCatchedException(e);
        }
    }
    /**
     * 充值管理机注册
     * 初始化河南
     */
    public void initMachineRequestBean(String ip, int port, String addressCode) {
        if (!TextUtils.isEmpty(ip)
                && !TextUtils.isEmpty(String.valueOf(port))
                && !TextUtils.isEmpty(addressCode)) {
            Log.i("initMachineRequestBean", "开始注册设备");
            if (EasySocket.getInstance().getDefconnection() != null) {
                isDoInitMachine = true;
                InitMachineRequestBean initMachineRequestBean = new InitMachineRequestBean();
                initMachineRequestBean.setControl("01");
                //130107200008   112   青泉居委会
                initMachineRequestBean.setAddress(addressCode);
                initMachineRequestBean.setXuLie(SocketUtil.getXuLie(this));
                initMachineRequestBean.setAFN("91");
                SocketNet.getInstance().sendTestMessage(initMachineRequestBean.pack(), new SocketCallBack() {
                    @Override
                    public void onSocketResponse(SocketData readData) {
                        if (CRC8.isCRC8(readData.getOriginDataBytes())) {
                            //校验CRC成功
                            InitMachineBackBean initMachineBackBean = new InitMachineBackBean();
                            String initCode = HexUtil.bytesToHex(Arrays.copyOfRange(readData.getBodyBytes(), 2, 18));
                            //确认收到注册号报文
                            ConfirmMachineRequestBean confirmMachineRequestBean = new ConfirmMachineRequestBean();
                            confirmMachineRequestBean.setControl("01");
                            //130107200008   112   青泉居委会
                            confirmMachineRequestBean.setAddress(addressCode);
                            confirmMachineRequestBean.setXuLie(SocketUtil.getXuLie(MyApplication.this));
                            confirmMachineRequestBean.setAFN("92");
                            confirmMachineRequestBean.setInitCode(initCode);
                            Log.i("Socket", "确认注册报文");
                            SocketNet.getInstance().sendTestMessage(confirmMachineRequestBean.pack(), new SocketCallBack() {
                                @Override
                                public void onSocketResponse(SocketData readData) {
                                    isDoInitMachine = false;
                                    if (CRC8.isCRC8(readData.getOriginDataBytes())) {
                                        byte stateByte = readData.getBodyBytes()[2];
                                        String state = BcdUtil.bcdToStr(stateByte);
                                        //BCD码00成功01失败(注册号不是服务器返回信息)
                                        if (state.equalsIgnoreCase("00")) {
                                            //保存设备注册号
                                            if (!TextUtils.isEmpty(initCode)) {
                                                DeviceNumberUtils.setDeviceNumber(initCode);
                                            }
                                            Log.i(TAG, "onSuccess: 设备注册号:" + initCode);
//                                            WSHelper.getInstance(MyApplication.this).put("initCode", initCode);
                                            ToastUtil.show("充值管理注册报文获取成功");
                                        } else {
                                            Log.i(TAG, "注册失败--- 状态码:" + state);
                                            //校验CRC错误
//                                            ToastUtil.show("确认收到注册报文状态失败");
                                        }
                                    } else {
                                        //校验CRC错误
                                        ToastUtil.show("确认收到注册报文校验CRC错误");
                                    }
                                }
                                @Override
                                public void onSocketError(int code, String msg) {
                                }
                            });
                        } else {//校验CRC错误
                            ToastUtil.show("充值管理注册报文校验CRC错误");
                        }
                    }
                    @Override
                    public void onSocketError(int code, String msg) {
                    }
                });
            }
        }
    private void initHeNan() {
        HeNanApplication.getInstance().application = this;
        HeNanApplication.getInstance().initEasySocket(false, null);
    }
    private void createSocket(String ip, int port, String backUpIp, int backUpPort) {
        // socket配置
        EasySocketOptions options = new EasySocketOptions.Builder()
                // 主机地址,请填写自己的IP地址,以getString的方式是为了隐藏作者自己的IP地址
                .setSocketAddress(new SocketAddress(ip, port))
                // 定义消息协议,方便解决 socket黏包、分包的问题
                .setReaderProtocol(new ScoketMessageProtocol())
                .setMaxWriteBytes(150)
                .setMaxReadBytes(150)
                .setRequestTimeout(5 * 1000)
                .setBackupAddress(new SocketAddress(backUpIp, backUpPort))
                .build();
        // 初始化
        EasySocket.getInstance().createConnection(options, this);// 创建一个socket连接
//        EasySocket.getInstance().subscribeSocketAction(socketActionListener);
        EasySocket.getInstance().subscribeSocketAction(SocketNet.getInstance().socketNet.socketActionListener);
    @Override
    public void navigateToLogin(Context context) {
        Intent intent = new Intent(context, LoginActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        context.startActivity(intent);
    }