From ebc06a3ae3a42bd6ac1359a59c55d5e6f1a0e2f0 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期二, 26 三月 2024 16:18:08 +0800
Subject: [PATCH] 优化通讯 写卡界面添加二次确认 优化用户写卡逻辑,提高写卡速度。

---
 easysocket/.idea/misc.xml                                                                     |   10 
 app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java                             |    3 
 app/src/main/java/com/dayu/recharge/tools/NfcReadHelper.java                                  |    2 
 easysocket/src/main/java/com/easysocket/EasySocket.java                                       |    7 
 app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java                             |   17 -
 easysocket/.idea/.gitignore                                                                   |    3 
 app/src/main/java/com/dayu/recharge/net/CallbackSender.java                                   |   38 ++
 app/src/main/java/com/dayu/recharge/tools/WriteCardUtils.java                                 |   11 
 easysocket/.idea/vcs.xml                                                                      |    6 
 app/src/main/java/com/dayu/recharge/activity/NFCWreatActivity.java                            |   88 +++++-
 app/src/main/java/com/dayu/recharge/activity/BaseActivity.java                                |   12 
 app/src/main/java/com/dayu/recharge/MyApplication.java                                        |  100 ++++---
 app/src/main/java/com/dayu/recharge/net/SocketNet.java                                        |  133 +++++++--
 app/src/main/java/com/dayu/recharge/tools/NFCWriteHelper.java                                 |  134 +++++++--
 app/src/main/java/com/dayu/recharge/view/ConfirmDialog.java                                   |   54 ++++
 easysocket/local.properties                                                                   |    8 
 app/src/main/java/com/dayu/recharge/view/ProgressDialog.java                                  |    3 
 app/src/main/java/com/dayu/recharge/net/CallbackIDFactoryImpl.java                            |   29 ++
 easysocket/.idea/gradle.xml                                                                   |   13 +
 easysocket/src/main/java/com/easysocket/connection/connect/SuperConnection.java               |   13 
 local.properties                                                                              |    4 
 easysocket/src/main/java/com/easysocket/connection/dispatcher/CallbackResponseDispatcher.java |   10 
 app/src/main/java/com/dayu/recharge/activity/RechargeActivity.java                            |    2 
 app/src/main/res/layout/confirm_dialog.xml                                                    |   65 +++++
 24 files changed, 572 insertions(+), 193 deletions(-)

diff --git a/app/src/main/java/com/dayu/recharge/MyApplication.java b/app/src/main/java/com/dayu/recharge/MyApplication.java
index 453b711..7fe9e91 100644
--- a/app/src/main/java/com/dayu/recharge/MyApplication.java
+++ b/app/src/main/java/com/dayu/recharge/MyApplication.java
@@ -8,6 +8,7 @@
 
 import com.dayu.recharge.dao.BaseDaoSingleton;
 import com.dayu.recharge.dbBean.IpBean;
+import com.dayu.recharge.net.CallbackIDFactoryImpl;
 import com.dayu.recharge.net.ScoketMessageProtocol;
 import com.dayu.recharge.net.SocketCallBack;
 import com.dayu.recharge.net.SocketData;
@@ -34,14 +35,12 @@
 public class MyApplication extends Application {
     public static String TAG = "MyApplication";
     public static MyApplication myApplication;
-    private String address;
 
     SocketNet.CreateBack createBack;
     //鏄惁姝e湪璇锋眰鍒濆鍖栨帴鍙�
     public boolean isDoInitMachine = false;
     //鏄惁杩炴帴鏈嶅姟鍣ㄦ垚鍔�
     public boolean isConncet = false;
-    private final Timer timer = new Timer();
 
     //姣忔鍚姩绋嬪簭鍙幓娉ㄥ唽涓�閬嶏紝涓嶅啀閲嶆柊娉ㄥ唽銆�
     public static boolean isCreate = false;
@@ -89,48 +88,10 @@
 //                ipBean.setIp("dayuyanjiuyuan.top");
 //                ipBean.setPort(8888);
             }
-            if (ipBean != null) {
-                try {
-                    //澶勭悊褰撹繛鎺ヤ笂IP鍚庝慨鏀筰p涓嶇敓鏁堥棶棰�
-                    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瑙f瀽澶辫触");
-                                    break;
-                            }
-
-                        }
-                    });
-
-                } else {
-                    //ip鏂瑰紡
-                    if (EasySocket.getInstance().getContext() == null || isCreate) {
-                        createSocket(ipBean.getIp(), ipBean.getPort(), "0", 88);
-                    } else {
+            if (SocketNet.getInstance().isNetworkAvailable(this)){
+                if (ipBean != null) {
+                    try {
+                        //澶勭悊褰撹繛鎺ヤ笂IP鍚庝慨鏀筰p涓嶇敓鏁堥棶棰�
                         if (EasySocket.getInstance().getDefconnection() != null) {
                             SocketAddress address = EasySocket.getInstance().getDefconnection().getOptions().getSocketAddress();
                             if (address != null) {
@@ -139,10 +100,53 @@
                                 }
                             }
                         }
+                    } 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瑙f瀽澶辫触");
+                                        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();
+                                    }
+                                }
+                            }
+                        }
+
+                    }
                 }
+            }else {
+                ToastUtil.show("璇锋鏌ョ綉缁滆繛鎺�");
             }
+
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -166,7 +170,7 @@
                 initMachineRequestBean.setAddress(addressCode);
                 initMachineRequestBean.setXuLie(SocketUtil.getXuLie(this));
                 initMachineRequestBean.setAFN("91");
-                SocketNet.getInstance().sendTestMessage(initMachineRequestBean.pack(), new SocketCallBack() {
+                SocketNet.getInstance().sendTestMessage(initMachineRequestBean.pack(), "91",new SocketCallBack() {
                     @Override
                     public void onSocketResponse(SocketData readData) {
 
@@ -183,7 +187,7 @@
                             confirmMachineRequestBean.setAFN("92");
                             confirmMachineRequestBean.setInitCode(initCode);
                             Log.i("Socket", "纭娉ㄥ唽鎶ユ枃");
-                            SocketNet.getInstance().sendTestMessage(confirmMachineRequestBean.pack(), new SocketCallBack() {
+                            SocketNet.getInstance().sendTestMessage(confirmMachineRequestBean.pack(), "92",new SocketCallBack() {
 
                                 @Override
                                 public void onSocketResponse(SocketData readData) {
@@ -240,10 +244,10 @@
                 .setSocketAddress(new SocketAddress(ip, port))
                 // 瀹氫箟娑堟伅鍗忚锛屾柟渚胯В鍐� socket榛忓寘銆佸垎鍖呯殑闂
                 .setReaderProtocol(new ScoketMessageProtocol())
+                .setCallbackIDFactory(new CallbackIDFactoryImpl())
                 .setMaxWriteBytes(150)
                 .setMaxReadBytes(150)
-                .setRequestTimeout(5 * 1000)
-
+                .setRequestTimeout(20 * 1000)
                 .setBackupAddress(new SocketAddress(backUpIp, backUpPort))
                 .build();
 
diff --git a/app/src/main/java/com/dayu/recharge/activity/BaseActivity.java b/app/src/main/java/com/dayu/recharge/activity/BaseActivity.java
index 1078008..be1ce94 100644
--- a/app/src/main/java/com/dayu/recharge/activity/BaseActivity.java
+++ b/app/src/main/java/com/dayu/recharge/activity/BaseActivity.java
@@ -1,7 +1,5 @@
 package com.dayu.recharge.activity;
 
-import android.app.Activity;
-import android.content.Context;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.Signature;
@@ -11,12 +9,10 @@
 
 import androidx.appcompat.app.AppCompatActivity;
 
-import com.dayu.recharge.MyApplication;
 import com.dayu.recharge.R;
 import com.dayu.recharge.dao.AppDatabase;
 import com.dayu.recharge.dao.BaseDaoSingleton;
 import com.dayu.recharge.view.TitleBar;
-import com.easysocket.EasySocket;
 
 /**
  * Created by zuoxiao on 2018/12/20.
@@ -58,13 +54,7 @@
 
             if (view != null && view instanceof TitleBar) {
                 titleBar = (TitleBar) view;
-                titleBar.setOnItemclickListner(TitleBar.ClickType_LEFT_IMAGE, new View.OnClickListener() {
-
-                    @Override
-                    public void onClick(View v) {
-                        finish();
-                    }
-                });
+                titleBar.setOnItemclickListner(TitleBar.ClickType_LEFT_IMAGE, v -> finish());
             }
         } catch (Exception e) {
             e.printStackTrace();
diff --git a/app/src/main/java/com/dayu/recharge/activity/NFCWreatActivity.java b/app/src/main/java/com/dayu/recharge/activity/NFCWreatActivity.java
index 7d23e6d..adc20fe 100644
--- a/app/src/main/java/com/dayu/recharge/activity/NFCWreatActivity.java
+++ b/app/src/main/java/com/dayu/recharge/activity/NFCWreatActivity.java
@@ -5,6 +5,7 @@
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.util.Log;
+import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.Toast;
@@ -42,7 +43,9 @@
 import com.dayu.recharge.utils.MyCommon;
 import com.dayu.recharge.utils.SocketUtil;
 import com.dayu.recharge.utils.TipUtil;
+import com.dayu.recharge.view.ConfirmDialog;
 import com.dayu.recharge.view.ProgressDialog;
+import com.dayu.recharge.view.TitleBar;
 import com.tencent.bugly.crashreport.CrashReport;
 
 import java.util.Arrays;
@@ -71,6 +74,11 @@
     boolean configDeviceRegiestFlag = false;
 
     boolean configPowerFlag = false;
+
+    /**
+     * 鏄惁涓嶅啀楠岃瘉鐢ㄦ埛鐩存帴鍐欏崱
+     */
+    boolean isAgainWrite = false;
 
     UserCardBean userCardBean;
 
@@ -105,6 +113,7 @@
     //鍏呭�奸�氫俊鏄惁瀹屾垚
     boolean rechargeIsOk = false;
     ActivityWriteTextBinding binding;
+    ConfirmDialog confirmDialog;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -113,12 +122,61 @@
             binding = ActivityWriteTextBinding.inflate(LayoutInflater.from(this));
             setContentView(binding.getRoot());
             nfcWreatActivity = this;
+            setData();
             getData();
             baseApp = (MyApplication) getApplication();
         } catch (Exception e) {
             e.printStackTrace();
             CrashReport.postCatchedException(e);
         }
+    }
+
+
+    private void setData() {
+        titleBar.setOnItemclickListner(TitleBar.ClickType_LEFT_IMAGE, v -> {
+            //澶勭悊鍥犵敤鎴疯鎿嶄綔杩斿洖瀵艰嚧涓嶈兘鍐欏崱鐨勯棶棰橈紝娣诲姞浜屾纭
+            back();
+        });
+    }
+
+    private void back() {
+        if (isUser) {
+            confirmDialog = new ConfirmDialog(NFCWreatActivity.this, v -> {
+                confirmDialog.dismiss();
+                myFinish();
+            });
+            confirmDialog.show();
+        } else if (!TextUtils.isEmpty(morny)) {
+            confirmDialog = new ConfirmDialog(NFCWreatActivity.this, v -> {
+                confirmDialog.dismiss();
+                myFinish();
+            });
+            confirmDialog.show();
+        } else {
+            finish();
+        }
+    }
+
+
+    private void myFinish() {
+        if (NewCardActivity.newCardActivity != null) {
+            NewCardActivity.newCardActivity.finish();
+        }
+        if (RechargeActivity.rechargeActivity != null) {
+            RechargeActivity.rechargeActivity.finish();
+        }
+        NFCWreatActivity.nfcWreatActivity.finish();
+    }
+
+
+    //鐐瑰嚮涓ゆ閫�鍑虹▼搴� 鏈夋椂闂撮棿闅� 闂撮殧鍐呯偣鍑诲垯閫�鍑虹▼搴� 鍚﹀垯 鍒欐彁绀�
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if (keyCode == KeyEvent.KEYCODE_BACK) {
+            back();
+            return true;
+        }
+        return super.onKeyDown(keyCode, event);
     }
 
 
@@ -201,6 +259,8 @@
             binding.textView.setTextColor(getResources().getColor(R.color.red));
         } else if (cardType.equals("-1")) {
             TipUtil.show(NFCWreatActivity.this, "璇峰嬁绉诲姩鍗$墖锛岃鍗″け璐ヨ閲嶈瘯锛侊紒");
+        } else if (cardType.equals("-2")) {
+            TipUtil.show(NFCWreatActivity.this, "璇诲崱澶辫触,璇锋鏌ュ崱鏄惁鏄敤鎴峰崱");
         } else {
             Log.i("NFCWreatActivity", "olduserCard!=null  saveData");
             saveData();
@@ -219,7 +279,6 @@
                     || configureDeviceRegistrationCrad != null
                     || configurationPowerCard != null) {
                 if (userCard != null && TextUtils.isEmpty(morny)) {
-
                     userFlag = WriteCardUtils.setUser(intent, userCard, this);
                 }
                 if (cleanCard != null) {
@@ -360,7 +419,7 @@
             rechargeRequestBean.setBalance(morny);
 
             rechargeRequestBean.setOrderId(SocketUtil.getOrderId(NFCWreatActivity.this));
-            SocketNet.getInstance().sendTestMessage(rechargeRequestBean.pack(), new SocketCallBack() {
+            SocketNet.getInstance().sendTestMessage(rechargeRequestBean.pack(),"95", new SocketCallBack() {
 
                 @Override
                 public void onSocketResponse(SocketData readData) {
@@ -437,7 +496,7 @@
         UserCard userCardold = NfcReadHelper.getInstence(intent, this).getUserCardData();
         if (userCardold != null) {
             //鍒ゆ柇鏄惁鍏呭�肩殑鏄竴涓崱
-            if (userCard.getInitPeasantCode().equals(userCardold.getInitPeasantCode())) {
+            if (userCard.getInitPeasantCode().equals(userCardold.getInitPeasantCode()) || isAgainWrite) {
                 userCard.setState("00");
                 userFlag = WriteCardUtils.setUser(intent, userCard, this);
                 //   鎵撳嵃鐩稿叧
@@ -445,12 +504,14 @@
                     setPrinterData(rechargeBean);
                     startDetailActivity(userName, "鍚敤");
                 } else {
-                    TipUtil.show(NFCWreatActivity.this, "鍐欏崱澶辫触锛岃閲嶆柊鍐嶈瘯");
+                    isAgainWrite = true;
+                    TipUtil.show(NFCWreatActivity.this, "鍐欏崱澶辫触锛岃閲嶆柊璐村崱");
                 }
             } else {
                 TipUtil.show(NFCWreatActivity.this, "璇诲彇鐨勫崱鍜屽厖鍊肩殑鍗′笉涓�鑷�");
             }
         }
+        stopAnim();
     }
 
     private void setmanageCard(Intent intent, final ManageCard manageCard) {
@@ -539,13 +600,7 @@
             detail.putExtra("morny", morny);
         }
         startActivity(detail);
-        if (NewCardActivity.newCardActivity != null) {
-            NewCardActivity.newCardActivity.finish();
-        }
-        if (RechargeActivity.rechargeActivity != null) {
-            RechargeActivity.rechargeActivity.finish();
-        }
-        NFCWreatActivity.nfcWreatActivity.finish();
+        myFinish();
     }
 
     /**
@@ -564,7 +619,7 @@
             requestBean.setInitCode(initCode);
             requestBean.setInitPeasantCode(initPeasantCode);
             requestBean.setXuLie(SocketUtil.getXuLie(this));
-            SocketNet.getInstance().sendTestMessage(requestBean.pack(), new SocketCallBack() {
+            SocketNet.getInstance().sendTestMessage(requestBean.pack(), "94",new SocketCallBack() {
                 @Override
                 public void onSocketResponse(SocketData readData) {
                     if (CRC8.isCRC8(readData.getOriginDataBytes())) {
@@ -602,12 +657,7 @@
                                 //琛ュ崱閫昏緫
                                 userFlag = WriteCardUtils.setUser(intent, userCard, NFCWreatActivity.this);
                                 if (userFlag) {
-                                    TipUtil.show(NFCWreatActivity.this, "琛ュ崱鎴愬姛", new TipUtil.TipListener() {
-                                        @Override
-                                        public void onCancle() {
-                                            NFCWreatActivity.this.finish();
-                                        }
-                                    });
+                                    TipUtil.show(NFCWreatActivity.this, "琛ュ崱鎴愬姛", () -> NFCWreatActivity.this.finish());
                                 }
                                 return;
                             } else if ("01".equals(state)) {
@@ -642,7 +692,6 @@
                 @Override
                 public void onSocketError(int code, String msg) {
                     stopAnim();
-
                     TipUtil.show(NFCWreatActivity.this, msg);
                 }
             });
@@ -657,6 +706,7 @@
 
     protected void onDestroy() {
         super.onDestroy();
+        ProgressDialog.dismiss();
         nfcWreatActivity = null;
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java b/app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java
index 7242c4d..64d3a63 100644
--- a/app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java
+++ b/app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java
@@ -53,7 +53,6 @@
 
     public static final int SCAN_IDCARD_REQUEST = 1;
     UserCardBean userCardBean;
-    Dialog dialog;
 
     ActivityNewCardBinding newCardBinding;
     AdminDataBean adminData;
@@ -271,7 +270,7 @@
         initCardRequestBean.setPhone(phoneBuffer.toString());
         String userId = userCardBean.getUserID();
         initCardRequestBean.setIdCard(SocketUtil.str2HexStr(userId));
-        SocketNet.getInstance().sendTestMessage(initCardRequestBean.pack(), new SocketCallBack() {
+        SocketNet.getInstance().sendTestMessage(initCardRequestBean.pack(), "93",new SocketCallBack() {
 
             @Override
             public void onSocketResponse(SocketData readData) {
diff --git a/app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java b/app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java
index 5e55056..5371a40 100644
--- a/app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java
+++ b/app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java
@@ -39,20 +39,6 @@
  */
 public class ReadCardAcitivy extends BaseNfcActivity {
 
-    private static final int USER_CRAD = 1;
-    private static final int MANAGE_CRAD = 2;
-    private static final int CLEAN_CARD = 3;
-    private static final int REGISTERED_CARD = 4;
-    private static final int CLEAN_ALL_USER = 5;
-    private static final int DOMAIN_CARD = 6;
-    private static final int TEST_CARD = 7;
-
-    private static final int CONFIGURATION_CARD = 8;
-
-    private static final int CONFIGURATION_POWER_CARD = 9;
-    private static final int PASS_WORD_CRAD = 10;
-
-
     volatile UserCard userCard;
     ActivityRedCardBinding redCardBinding;
 
@@ -229,7 +215,7 @@
         requestBean.setInitCode(initCode);
         requestBean.setInitPeasantCode(initPeasantCode);
         requestBean.setXuLie(SocketUtil.getXuLie(this));
-        SocketNet.getInstance().sendTestMessage(requestBean.pack(), new SocketCallBack() {
+        SocketNet.getInstance().sendTestMessage(requestBean.pack(), "94",new SocketCallBack() {
             @Override
             public void onSocketResponse(SocketData readData) {
                 if (CRC8.isCRC8(readData.getOriginDataBytes())) {
@@ -285,6 +271,7 @@
 
             @Override
             public void onSocketError(int code, String msg) {
+                stopAnim();
                 TipUtil.show(ReadCardAcitivy.this, msg);
             }
         });
diff --git a/app/src/main/java/com/dayu/recharge/activity/RechargeActivity.java b/app/src/main/java/com/dayu/recharge/activity/RechargeActivity.java
index 3c77359..57b9d9b 100644
--- a/app/src/main/java/com/dayu/recharge/activity/RechargeActivity.java
+++ b/app/src/main/java/com/dayu/recharge/activity/RechargeActivity.java
@@ -167,7 +167,7 @@
             requestBean.setInitCode(initCode);
             requestBean.setInitPeasantCode(initPeasantCode);
             requestBean.setXuLie(SocketUtil.getXuLie(this));
-            SocketNet.getInstance().sendTestMessage(requestBean.pack(), new SocketCallBack() {
+            SocketNet.getInstance().sendTestMessage(requestBean.pack(),"94", new SocketCallBack() {
                 @Override
                 public void onSocketResponse(SocketData readData) {
                     ProgressDialog.dismiss();
diff --git a/app/src/main/java/com/dayu/recharge/net/CallbackIDFactoryImpl.java b/app/src/main/java/com/dayu/recharge/net/CallbackIDFactoryImpl.java
new file mode 100644
index 0000000..a82aa9c
--- /dev/null
+++ b/app/src/main/java/com/dayu/recharge/net/CallbackIDFactoryImpl.java
@@ -0,0 +1,29 @@
+package com.dayu.recharge.net;
+
+import com.dayu.recharge.tools.HexUtil;
+import com.easysocket.config.CallbackIDFactory;
+import com.easysocket.entity.OriginReadData;
+
+/**
+ * author: zuo
+ * Date: 2024-03-26
+ * Time: 10:02
+ * 澶囨敞锛�
+ */
+public class CallbackIDFactoryImpl extends CallbackIDFactory {
+
+    /**
+     * @param
+     * @return
+     */
+    @Override
+    public String getCallbackID(OriginReadData data) {
+        try {
+            String AFN = HexUtil.byteToHex(data.getBodyBytes()[1]);
+            return AFN;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dayu/recharge/net/CallbackSender.java b/app/src/main/java/com/dayu/recharge/net/CallbackSender.java
new file mode 100644
index 0000000..f8faed0
--- /dev/null
+++ b/app/src/main/java/com/dayu/recharge/net/CallbackSender.java
@@ -0,0 +1,38 @@
+package com.dayu.recharge.net;
+
+import com.easysocket.entity.basemsg.SuperCallbackSender;
+
+/**
+ * author: zuo
+ * Date: 2024-03-25
+ * Time: 17:33
+ * 澶囨敞锛氬甫鏈夊洖璋冩爣璇嗙殑鍙戦�佹秷鎭�
+ */
+public class CallbackSender extends SuperCallbackSender {
+
+    //閫氫俊绫诲瀷鐮�
+    String AFN;
+
+    public String getAFN() {
+        return AFN;
+    }
+
+    public void setAFN(String AFN) {
+        this.AFN = AFN;
+    }
+
+    byte[] data;
+
+    public byte[] getData() {
+        return data;
+    }
+
+    public void setData(byte[] data) {
+        this.data = data;
+    }
+
+    @Override
+    public byte[] pack() {
+        return data;
+    }
+}
diff --git a/app/src/main/java/com/dayu/recharge/net/SocketNet.java b/app/src/main/java/com/dayu/recharge/net/SocketNet.java
index 0573432..592d458 100644
--- a/app/src/main/java/com/dayu/recharge/net/SocketNet.java
+++ b/app/src/main/java/com/dayu/recharge/net/SocketNet.java
@@ -1,22 +1,22 @@
 package com.dayu.recharge.net;
 
 import android.content.Context;
-import android.os.Handler;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
 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.connection.action.SocketStatus;
+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;
 
@@ -34,6 +34,8 @@
     boolean isTest = false;
     Context mContext;
 
+    CallbackSender mSender;
+
     public static SocketNet getInstance() {
         if (socketNet == null) {
             socketNet = new SocketNet();
@@ -48,24 +50,60 @@
     /**
      * 鍙戦�佷竴涓殑娑堟伅锛�
      */
-    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();
-//            if (EasySocket.getInstance().getDefconnection().getConnectionStatus()== SocketStatus.SOCKET_CONNECTED){
-            EasySocket.getInstance().upMessage(dataMessage);
-//            }else {
-//
-//            }
+        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) {
 
-//            this.dataMessage = dataMessage;
+                        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, "璇锋鏌ョ綉缁滆繛鎺�");
         }
+
     }
 
 
@@ -103,11 +141,14 @@
          */
         @Override
         public void onSocketConnSuccess(SocketAddress socketAddress) {
+
+
             Log.i("SocketActionListener1111", "杩炴帴鎴愬姛");
             MyApplication.myApplication.isConncet = true;
             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) {
@@ -117,8 +158,16 @@
 
                         }
                     }
-
                 }
+                try {
+                    if (mSender != null) {
+                        sendTestMessage(mSender.getData(), mSender.getAFN(), myCallBack);
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+
+
             } catch (Exception e) {
                 CrashReport.postCatchedException(e);
             }
@@ -135,10 +184,10 @@
             MyApplication.myApplication.isConncet = false;
             rushState();
             Log.i("SocketActionListener", "socket杩炴帴澶辫触");
-            if (myCallBack != null) {
-                myCallBack.onSocketError(-1, "杩炴帴鏁版嵁涓績澶辫触,璇锋鏌ョ綉缁�");
-            }
-            myCallBack = null;
+//            if (myCallBack != null) {
+//                myCallBack.onSocketError(-1, "杩炴帴鏁版嵁涓績澶辫触,璇锋鏌ョ綉缁�");
+//            }
+//            myCallBack = null;
         }
 
         /**
@@ -151,10 +200,14 @@
             Log.i("SocketActionListener", "---> socket鏂紑杩炴帴锛屾槸鍚﹂渶瑕侀噸杩烇細" + isNeedReconnect);
             MyApplication.myApplication.isConncet = false;
             rushState();
-            if (myCallBack != null) {
-                myCallBack.onSocketError(-2, "涓庢湇鍔″櫒杩炴帴鏂紑锛岃閲嶈瘯");
+            try {
+                if (myCallBack != null) {
+                    myCallBack.onSocketError(-2, "涓庢湇鍔″櫒杩炴帴鏂紑锛岃妫�鏌ョ綉缁�");
+                }
+                myCallBack = null;
+            } catch (Exception e) {
+                throw new RuntimeException(e);
             }
-            myCallBack = null;
         }
 
 
@@ -167,14 +220,14 @@
         public void onSocketResponse(SocketAddress socketAddress, OriginReadData originReadData) {
             super.onSocketResponse(socketAddress, originReadData);
             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;
+//            SocketData socketData = new SocketData();
+//            socketData.setBodyData(originReadData.getBodyBytes());
+//            socketData.setHeaderData(originReadData.getHeaderData());
+////            dataMessage = null;
+//            if (myCallBack != null) {
+//                myCallBack.onSocketResponse(socketData);
+//            }
+//            myCallBack = null;
         }
     };
 
@@ -188,4 +241,16 @@
         }
     }
 
+    // 妫�鏌ョ綉缁滆繛鎺ユ槸鍚﹀彲鐢�
+    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;
+    }
+
 }
diff --git a/app/src/main/java/com/dayu/recharge/tools/NFCWriteHelper.java b/app/src/main/java/com/dayu/recharge/tools/NFCWriteHelper.java
index 16a3046..a1923c1 100644
--- a/app/src/main/java/com/dayu/recharge/tools/NFCWriteHelper.java
+++ b/app/src/main/java/com/dayu/recharge/tools/NFCWriteHelper.java
@@ -7,6 +7,8 @@
 import android.nfc.tech.MifareClassic;
 import android.util.Log;
 
+import com.dayu.recharge.card.UserCard;
+
 import java.io.IOException;
 
 /**
@@ -55,6 +57,67 @@
         return helper;
     }
 
+
+    /**
+     * 鍐欏崱
+     *
+     * @param userCard 鐢ㄦ埛鍗″唴瀹�
+     * @param
+     */
+    public boolean writeUserData(UserCard userCard) {
+        if (userCard != null) {
+            int a = 1;
+            try {
+                MifareClassic mfc = MifareClassic.get(tag);
+                if (null != mfc) {
+                    try {
+                        //杩炴帴NFC
+                        mfc.connect();
+                        //楠岃瘉鎵囧尯瀵嗙爜
+                        boolean isOpen = mfc.authenticateSectorWithKeyA(a, defauleKey);
+                        if (!isOpen) {
+                            isOpen = mfc.authenticateSectorWithKeyA(a, companyKey);
+                        } else {
+                            //鍐欏崱鏃朵慨鏀规墍鏈夊瘑鐮�
+                            changePasword(a, mfc);
+                        }
+                        if (isOpen) {
+                            for (int b = 0; b < 3; b++) {
+                                byte[] data;
+                                if (b == 0) {
+                                    data = userCard.getZeroBytes();
+                                } else if (b == 1) {
+                                    data = userCard.getOneBytes();
+                                } else {
+                                    data = userCard.getTwoBytes();
+                                }
+                                int bIndex = mfc.sectorToBlock(a);
+                                //鍐欏崱
+                                mfc.writeBlock(bIndex + b, data);
+                            }
+                            return true;
+                        }
+                        return false;
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        return false;
+                    } finally {
+                        try {
+                            mfc.close();
+                        } catch (IOException e) {
+                            e.printStackTrace();
+                        }
+                    }
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+                return false;
+            }
+        }
+        return false;
+    }
+
+
     /**
      * 鍐欏崱
      *
@@ -65,8 +128,6 @@
      */
     public boolean writeData(byte[] str, int a, int b) {
         Log.i("NFCWreatActivity", "writeData: a=" + a + " b=" + b);
-        //鍐欏崱鏃朵慨鏀规墍鏈夊瘑鐮�
-        changePasword(a);
         if (str.length <= 16) {
             try {
                 MifareClassic mfc = MifareClassic.get(tag);
@@ -90,6 +151,9 @@
                         boolean isOpen = mfc.authenticateSectorWithKeyA(a, defauleKey);
                         if (!isOpen) {
                             isOpen = mfc.authenticateSectorWithKeyA(a, companyKey);
+                        } else {
+                            //鍐欏崱鏃朵慨鏀规墍鏈夊瘑鐮�
+                            changePasword(a, mfc);
                         }
                         if (isOpen) {
                             int bIndex = mfc.sectorToBlock(a);
@@ -124,54 +188,52 @@
      * @param a 涔﹀啓鐨勬墖鍖�
      *          //     * @param callback 杩斿洖鐩戝惉
      */
-    public boolean changePasword(int a) {
-        MifareClassic mfc = MifareClassic.get(tag);
+    public boolean changePasword(int a, MifareClassic mfc) {
+//        MifareClassic mfc = MifareClassic.get(tag);
         byte[] data = new byte[16];
         if (null != mfc) {
             try {
-                mfc.connect();
-
-                int count = mfc.getSectorCount();
-                boolean isOpen = mfc.authenticateSectorWithKeyA(a, defauleKey);
-
-                //楠岃瘉鏄惁鏄粯璁ゅ瘑鐮侊紝褰撻粯璁ゅ瘑鐮佹椂淇敼瀵嗙爜
-                if (isOpen) {
-                    //灏嗗瘑鐮佽浆鎹负keyA
-                    byte[] dataA = HexUtil.hexToByteArray(companyKeyA);
-                    for (int i = 0; i < dataA.length; i++) {
-                        data[i] = dataA[i];
-                    }
-                    //杈撳叆鎺у埗浣�
-                    data[6] = (byte) 0xFF;
-                    data[7] = (byte) 0x07;
-                    data[8] = (byte) 0x80;
-                    data[9] = (byte) 0x69;
-                    byte[] dataB = HexUtil.hexToByteArray(companyKeyB);
-                    //灏嗗瘑鐮佽浆鎹负KeyB
-                    for (int i = 0; i < dataB.length; i++) {
-                        data[i + 10] = dataB[i];
-                    }
-                    int bIndex = mfc.sectorToBlock(a);
-                    int bCount = mfc.getBlockCountInSector(a);
-                    //鍐欏埌鎵囧尯鐨勬渶鍚庝竴涓潡
-                    mfc.writeBlock(bIndex + bCount - 1, data);
+//                mfc.connect();
+//                int count = mfc.getSectorCount();
+//                boolean isOpen = mfc.authenticateSectorWithKeyA(a, defauleKey);
+//                //楠岃瘉鏄惁鏄粯璁ゅ瘑鐮侊紝褰撻粯璁ゅ瘑鐮佹椂淇敼瀵嗙爜
+//                if (isOpen) {
+                //灏嗗瘑鐮佽浆鎹负keyA
+                byte[] dataA = HexUtil.hexToByteArray(companyKeyA);
+                for (int i = 0; i < dataA.length; i++) {
+                    data[i] = dataA[i];
+                }
+                //杈撳叆鎺у埗浣�
+                data[6] = (byte) 0xFF;
+                data[7] = (byte) 0x07;
+                data[8] = (byte) 0x80;
+                data[9] = (byte) 0x69;
+                byte[] dataB = HexUtil.hexToByteArray(companyKeyB);
+                //灏嗗瘑鐮佽浆鎹负KeyB
+                for (int i = 0; i < dataB.length; i++) {
+                    data[i + 10] = dataB[i];
+                }
+                int bIndex = mfc.sectorToBlock(a);
+                int bCount = mfc.getBlockCountInSector(a);
+                //鍐欏埌鎵囧尯鐨勬渶鍚庝竴涓潡
+                mfc.writeBlock(bIndex + bCount - 1, data);
 //                    byte[] dataa = mfc.readBlock(bIndex + bCount - 1);
 //                    // 淇敼瀵嗙爜 A
 //                    mfc.writeBlock(mfc.sectorToBlock(a) + 3, dataA);
 //                    // 淇敼瀵嗙爜 B
 //                    mfc.writeBlock(mfc.sectorToBlock(a) + 7, dataB);
-                }
+//                }
                 return true;
             } catch (Exception e) {
                 e.printStackTrace();
                 return false;
 //                callback.isSusses(false);
             } finally {
-                try {
-                    mfc.close();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
+//                try {
+//                    mfc.close();
+//                } catch (IOException e) {
+//                    e.printStackTrace();
+//                }
             }
         }
         return false;
diff --git a/app/src/main/java/com/dayu/recharge/tools/NfcReadHelper.java b/app/src/main/java/com/dayu/recharge/tools/NfcReadHelper.java
index e8ed9d6..412adeb 100644
--- a/app/src/main/java/com/dayu/recharge/tools/NfcReadHelper.java
+++ b/app/src/main/java/com/dayu/recharge/tools/NfcReadHelper.java
@@ -133,7 +133,7 @@
 
                 } else {
                     Log.i("NFCWreatActivity", "isOpen===" + isOpen);
-                    return "-1";
+                    return "-2";
                 }
             } catch (IOException e) {
                 return "-1";
diff --git a/app/src/main/java/com/dayu/recharge/tools/WriteCardUtils.java b/app/src/main/java/com/dayu/recharge/tools/WriteCardUtils.java
index 9ace2a3..245cd36 100644
--- a/app/src/main/java/com/dayu/recharge/tools/WriteCardUtils.java
+++ b/app/src/main/java/com/dayu/recharge/tools/WriteCardUtils.java
@@ -17,15 +17,8 @@
 
     //鍚戝崱鍐欏叆鐢ㄦ埛淇℃伅
     public static boolean setUser(Intent intent, UserCard userCard, Activity activity) {
-        userFlag = NFCWriteHelper.getInstence(intent,activity).writeData(userCard.getZeroBytes(), 1, 0);
-        if (!userFlag) {
-            return false;
-        }
-        userFlag = NFCWriteHelper.getInstence(intent,activity).writeData(userCard.getOneBytes(), 1, 1);
-        if (!userFlag) {
-            return false;
-        }
-        userFlag = NFCWriteHelper.getInstence(intent,activity).writeData(userCard.getTwoBytes(), 1, 2);
+        userFlag = NFCWriteHelper.getInstence(intent,activity).writeUserData(userCard);
+
         return userFlag;
     }
 }
diff --git a/app/src/main/java/com/dayu/recharge/view/ConfirmDialog.java b/app/src/main/java/com/dayu/recharge/view/ConfirmDialog.java
new file mode 100644
index 0000000..68ccef3
--- /dev/null
+++ b/app/src/main/java/com/dayu/recharge/view/ConfirmDialog.java
@@ -0,0 +1,54 @@
+package com.dayu.recharge.view;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.view.Gravity;
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+
+import com.dayu.recharge.R;
+
+/**
+ * author: zuo
+ * Date: 2024-03-25
+ * Time: 13:22
+ * 澶囨敞锛�
+ */
+public class ConfirmDialog extends Dialog {
+
+
+    Activity mContext;
+    View.OnClickListener mListner;
+
+    public ConfirmDialog(@NonNull Activity context) {
+        super(context, R.style.ws_pay_showSelfDialog);
+        mContext = context;
+        initView();
+    }
+
+    public ConfirmDialog(@NonNull Activity context, View.OnClickListener listner) {
+        super(context, R.style.ws_pay_showSelfDialog);
+        mContext = context;
+        mListner = listner;
+        initView();
+    }
+
+    private void initView() {
+        getWindow().setGravity(Gravity.CENTER);
+        setContentView(R.layout.confirm_dialog);
+        setCanceledOnTouchOutside(false);
+        TextView cannel = (TextView) this.findViewById(R.id.confirm_cancel);
+        TextView ok = (TextView) this.findViewById(R.id.confirm_ok);
+        cannel.setOnClickListener(v -> ConfirmDialog.this.dismiss());
+        if (mListner == null) {
+            ok.setOnClickListener((View v) -> {
+                ConfirmDialog.this.dismiss();
+                mContext.finish();
+            });
+        } else {
+            ok.setOnClickListener(mListner);
+        }
+    }
+}
diff --git a/app/src/main/java/com/dayu/recharge/view/ProgressDialog.java b/app/src/main/java/com/dayu/recharge/view/ProgressDialog.java
index 4ac546d..e535cf3 100644
--- a/app/src/main/java/com/dayu/recharge/view/ProgressDialog.java
+++ b/app/src/main/java/com/dayu/recharge/view/ProgressDialog.java
@@ -2,9 +2,7 @@
 
 import android.app.Activity;
 import android.app.Dialog;
-import android.content.Context;
 
-import com.dayu.recharge.activity.NewCardActivity;
 import com.tencent.bugly.crashreport.CrashReport;
 
 /**
@@ -22,7 +20,6 @@
             dialog = android.app.ProgressDialog.show(activity, "", "姝e湪閫氫俊璇风◢鍚�", true, true);
         } catch (Exception e) {
             e.printStackTrace();
-            CrashReport.postCatchedException(e);
         }
     }
 
diff --git a/app/src/main/res/layout/confirm_dialog.xml b/app/src/main/res/layout/confirm_dialog.xml
new file mode 100644
index 0000000..cdde6c5
--- /dev/null
+++ b/app/src/main/res/layout/confirm_dialog.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="#00ffffff"
+    android:gravity="center"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:background="@drawable/ws_pay_bg_dialog_top_stroke"
+        android:gravity="center"
+        android:orientation="vertical"
+        android:padding="20dp">
+
+        <TextView
+            android:id="@+id/confirm_data"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textSize="22sp"
+            android:textColor="#000000"
+            android:text="纭閫�鍑哄悧锛�"
+            />
+
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+
+            <TextView
+                android:id="@+id/confirm_cancel"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="20dp"
+                android:background="@drawable/ws_login_red_btn_one"
+                android:paddingLeft="15dp"
+                android:paddingTop="5dp"
+                android:paddingRight="15dp"
+                android:paddingBottom="5dp"
+                android:text="鍙栨秷"
+                android:textSize="@dimen/text_size" />
+
+            <TextView
+                android:id="@+id/confirm_ok"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="100dp"
+                android:layout_marginTop="20dp"
+                android:background="@drawable/ws_login_red_btn_one"
+                android:paddingLeft="15dp"
+                android:paddingTop="5dp"
+                android:paddingRight="15dp"
+                android:paddingBottom="5dp"
+                android:text="纭"
+                android:textSize="@dimen/text_size" />
+
+        </LinearLayout>
+
+
+    </LinearLayout>
+
+</LinearLayout>
+
diff --git a/easysocket/.idea/.gitignore b/easysocket/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/easysocket/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/easysocket/.idea/gradle.xml b/easysocket/.idea/gradle.xml
new file mode 100644
index 0000000..de8896e
--- /dev/null
+++ b/easysocket/.idea/gradle.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="GradleSettings">
+    <option name="linkedExternalProjectsSettings">
+      <GradleProjectSettings>
+        <option name="testRunner" value="GRADLE" />
+        <option name="distributionType" value="DEFAULT_WRAPPED" />
+        <option name="externalProjectPath" value="$PROJECT_DIR$" />
+        <option name="gradleJvm" value="jbr-17" />
+      </GradleProjectSettings>
+    </option>
+  </component>
+</project>
\ No newline at end of file
diff --git a/easysocket/.idea/misc.xml b/easysocket/.idea/misc.xml
new file mode 100644
index 0000000..452c977
--- /dev/null
+++ b/easysocket/.idea/misc.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ExternalStorageConfigurationManager" enabled="true" />
+  <component name="ProjectRootManager" version="2" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/build/classes" />
+  </component>
+  <component name="ProjectType">
+    <option name="id" value="Android" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/easysocket/.idea/vcs.xml b/easysocket/.idea/vcs.xml
new file mode 100644
index 0000000..6c0b863
--- /dev/null
+++ b/easysocket/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/easysocket/local.properties b/easysocket/local.properties
new file mode 100644
index 0000000..a4b82aa
--- /dev/null
+++ b/easysocket/local.properties
@@ -0,0 +1,8 @@
+## This file must *NOT* be checked into Version Control Systems,
+# as it contains information specific to your local configuration.
+#
+# Location of the SDK. This is only used by Gradle.
+# For customization when using a Version Control System, please read the
+# header note.
+#Mon Mar 25 17:17:41 CST 2024
+sdk.dir=D\:\\android\\sdk
diff --git a/easysocket/src/main/java/com/easysocket/EasySocket.java b/easysocket/src/main/java/com/easysocket/EasySocket.java
index 56dba09..eb8eee0 100644
--- a/easysocket/src/main/java/com/easysocket/EasySocket.java
+++ b/easysocket/src/main/java/com/easysocket/EasySocket.java
@@ -12,8 +12,6 @@
 import com.easysocket.interfaces.conn.ISocketActionListener;
 import com.easysocket.utils.LogUtil;
 
-import java.nio.charset.Charset;
-
 /**
  * Author锛欰lex
  * Date锛�2019/6/4
@@ -129,8 +127,9 @@
      */
     public EasySocket disconnect(boolean isNeedReconnect) {
         LogUtil.d("EasySocket--銆媎isconnect");
-        if (defConnection != null)
-        getDefconnection().disconnect(isNeedReconnect);
+        if (defConnection != null) {
+            getDefconnection().disconnect(isNeedReconnect);
+        }
         return this;
     }
 
diff --git a/easysocket/src/main/java/com/easysocket/connection/connect/SuperConnection.java b/easysocket/src/main/java/com/easysocket/connection/connect/SuperConnection.java
index af5491a..9dc1556 100644
--- a/easysocket/src/main/java/com/easysocket/connection/connect/SuperConnection.java
+++ b/easysocket/src/main/java/com/easysocket/connection/connect/SuperConnection.java
@@ -122,12 +122,9 @@
     public synchronized void connect() {
 
         if (connectionStatus.get() == SocketStatus.SOCKET_DISCONNECTING) {
-            new Handler().postDelayed(new Runnable() {
-                @Override
-                public void run() {
-                    LogUtil.d("---> socket>>connect>>姝e湪鏂紑杩炴帴锛屽欢鏃朵竴绉掑煼琛岄噸杩�");
-                    connect();
-                }
+            new Handler().postDelayed(() -> {
+                LogUtil.d("---> socket>>connect>>姝e湪鏂紑杩炴帴锛屽欢鏃朵竴绉掑煼琛岄噸杩�");
+                connect();
             }, 1000); // 寤舵椂1绉�
             return;
         }
@@ -328,6 +325,10 @@
         return this;
     }
 
+    /**
+     * 娑堟伅鍥炶皟涓昏澶勭悊瓒呮椂娑堟伅
+     * @param callBack
+     */
     @Override
     public void onCallBack(SuperCallBack callBack) {
         callbackResponseDispatcher.addSocketCallback(callBack);
diff --git a/easysocket/src/main/java/com/easysocket/connection/dispatcher/CallbackResponseDispatcher.java b/easysocket/src/main/java/com/easysocket/connection/dispatcher/CallbackResponseDispatcher.java
index 5ce8190..f4290bb 100644
--- a/easysocket/src/main/java/com/easysocket/connection/dispatcher/CallbackResponseDispatcher.java
+++ b/easysocket/src/main/java/com/easysocket/connection/dispatcher/CallbackResponseDispatcher.java
@@ -29,7 +29,7 @@
      * 淇濆瓨鍙戦�佺殑姣忎釜鍥炶皟娑堟伅鐨勭洃鍚疄渚嬶紝key涓哄洖璋冩爣璇哻allbackId锛岃繖鏍峰洖璋冩秷鎭湁鍙嶉鐨勬椂鍊欙紝灏卞彲浠ユ壘鍒板苟璋冪敤
      * 瀵瑰簲鐨勭洃鍚璞�
      */
-    private Map<String, SuperCallBack> callbacks = new HashMap<>();
+    private volatile Map<String, SuperCallBack> callbacks = new HashMap<>();
     /**
      * 淇濆瓨闇�瑕佽繘琛岃秴鏃舵娴嬬殑璇锋眰锛岃繖鏄竴涓欢鏃堕槦鍒楋紝鍏冪礌瓒呮椂鐨勬椂鍊欎細琚彇鍑烘潵
      */
@@ -76,13 +76,19 @@
                 timeoutExecutor.execute(new Runnable() {
                     @Override
                     public void run() {
+                        LogUtil.d("浠诲姟瓒呮椂杞");
                         try {
                             // 鍙湁瓒呮椂鐨勫厓绱犳墠浼氳鍙栧嚭锛屾病鏈夌殑璇濅細琚瓑寰�
                             timeoutItem item = timeoutQueue.take();
                             if (item != null) {
+                                LogUtil.d("瓒呮椂浠诲姟ID锛�" + item.callbackId);
                                 SuperCallBack callBack = callbacks.remove(item.callbackId);
-                                if (callBack != null)
+                                if (callBack != null) {
+                                    LogUtil.d("瓒呮椂浠诲姟ID锛�" + item.callbackId + "callBack != null");
                                     callBack.onError(new RequestTimeOutException("request timeout"));
+                                }else {
+                                    LogUtil.d("瓒呮椂浠诲姟ID锛�" + item.callbackId + "  callBack == null");
+                                }
                             }
                         } catch (InterruptedException e) {
                             e.printStackTrace();
diff --git a/local.properties b/local.properties
index b21f6f6..285b71e 100644
--- a/local.properties
+++ b/local.properties
@@ -4,6 +4,6 @@
 # Location of the SDK. This is only used by Gradle.
 # For customization when using a Version Control System, please read the
 # header note.
-#Tue Feb 27 10:36:34 CST 2024
-sdk.dir=D\:\\AndroidStudio\\sdk
+#Fri Mar 15 09:00:13 CST 2024
 ndk.dir=D\:\\android\\sdk\\ndk\\android-ndk-r21
+sdk.dir=D\:\\android\\sdk

--
Gitblit v1.8.0