From 928380a58b93cc24d65a836071edafeed9f1a0ab Mon Sep 17 00:00:00 2001
From: whycq <10027870+whycq@user.noreply.gitee.com>
Date: 星期三, 14 八月 2024 12:36:28 +0800
Subject: [PATCH] #

---
 app/src/main/java/com/example/agvcontroller/MainActivity.java              |   35 ++++++-
 app/src/main/java/com/example/agvcontroller/protocol/PacHeader.java        |   28 +++++
 app/src/main/java/com/example/agvcontroller/protocol2/AgvPackage.java      |  101 ++++++++++++++++++++
 app/src/main/java/com/example/agvcontroller/protocol2/PackagePart.java     |   87 +++++++++++++++++
 app/src/main/java/com/example/agvcontroller/socket/NettyServerHandler.java |   22 +---
 app/src/main/java/com/example/agvcontroller/protocol/ProtocolEncoder.java  |   18 +-
 6 files changed, 260 insertions(+), 31 deletions(-)

diff --git a/app/src/main/java/com/example/agvcontroller/MainActivity.java b/app/src/main/java/com/example/agvcontroller/MainActivity.java
index 2df3a7f..69d593f 100644
--- a/app/src/main/java/com/example/agvcontroller/MainActivity.java
+++ b/app/src/main/java/com/example/agvcontroller/MainActivity.java
@@ -6,6 +6,8 @@
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
 import android.os.Vibrator;
 import android.util.Log;
 import android.view.KeyEvent;
@@ -13,6 +15,8 @@
 import android.view.View;
 import android.widget.Button;
 
+import com.example.agvcontroller.protocol2.AgvPackage;
+import com.example.agvcontroller.protocol2.PackagePart;
 import com.example.agvcontroller.socket.NettyServerHandler;
 import com.example.agvcontroller.socket.SocketManager;
 import com.example.agvcontroller.socket.SocketTask;
@@ -35,6 +39,21 @@
     private Socket socket;
     SocketManager socketManager;
 
+    private boolean isDowm = false;
+    private Handler handler = new Handler(new Handler.Callback() {
+        @Override
+        public boolean handleMessage(Message msg) {
+            // 鍦ㄨ繖閲岃繘琛屾墦鍗拌緭鍑�
+            System.out.println("鎵撳嵃杈撳嚭");
+            if (isDowm) {
+                byte[] message2 = new byte[]{0x01, 0x02, 0x03, 0x06}; // 绀轰緥娑堟伅
+                nettyServerHandler.sendMessageToClient(clientId, message2); // 鍙戦�佹秷鎭埌瀹㈡埛绔�
+                handler.sendEmptyMessageDelayed(0, 100);
+            }
+            return false;
+        }
+    });
+
     String clientId;
     NettyServerHandler nettyServerHandler;
     @Override
@@ -46,10 +65,17 @@
         vibrateButton = findViewById(R.id.btn_stop);
 
         Intent intent = getIntent();
-        //String clientId = intent.getStringExtra("message");
         clientId = intent.getStringExtra("message");
         Log.i("message1",clientId);
         // 鍒濆鍖栧崟杞翠娇鑳�
+        int single = 9;
+        int len = PackagePart.UNIQUENO.getLen()
+                + PackagePart.TIMESTAMP.getLen()
+                + PackagePart.COMMAND_MARK.getLen()
+                + 16 + 1 + 1 + 1;
+        for (int i = 0; i < single; i++) {
+
+        }
         byte[] message2 = new byte[]{0x01, 0x02, 0x03, 0x06}; // 绀轰緥娑堟伅
         nettyServerHandler.sendMessageToClient(clientId, message2); // 鍙戦�佹秷鎭埌瀹㈡埛绔�
 
@@ -77,11 +103,10 @@
         @Override
         public boolean onTouch(View view, MotionEvent motionEvent) {
             if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) {
-                byte[] message2 = new byte[]{0x01, 0x02, 0x03, 0x06}; // 绀轰緥娑堟伅
-                nettyServerHandler.sendMessageToClient(clientId, message2); // 鍙戦�佹秷鎭埌瀹㈡埛绔�
+                isDowm = true;
+                handler.sendEmptyMessage(0);
             } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) {
-                byte[] message2 = new byte[]{0x01, 0x02, 0x03, 0x07}; // 绀轰緥娑堟伅
-                nettyServerHandler.sendMessageToClient(clientId, message2); // 鍙戦�佹秷鎭埌瀹㈡埛绔�
+                isDowm = false;
             }
             return false;
         }
diff --git a/app/src/main/java/com/example/agvcontroller/protocol/PacHeader.java b/app/src/main/java/com/example/agvcontroller/protocol/PacHeader.java
index 2912ac4..17ecd50 100644
--- a/app/src/main/java/com/example/agvcontroller/protocol/PacHeader.java
+++ b/app/src/main/java/com/example/agvcontroller/protocol/PacHeader.java
@@ -7,6 +7,34 @@
  */
 public class PacHeader {
 
+    public byte getStartSymbol() {
+        return startSymbol;
+    }
+
+    public int getContentLength() {
+        return contentLength;
+    }
+
+    public String getUniqueNo() {
+        return uniqueNo;
+    }
+
+    public ProtocolType getProtocolType() {
+        return protocolType;
+    }
+
+    public int getTimestamp() {
+        return timestamp;
+    }
+
+    public String getSerialNum() {
+        return serialNum;
+    }
+
+    public EncryType getEncryptType() {
+        return encryptType;
+    }
+
     /**
      * 璧峰绗�
      * 鍥哄畾涓�"0xEE || 0xAA"
diff --git a/app/src/main/java/com/example/agvcontroller/protocol/ProtocolEncoder.java b/app/src/main/java/com/example/agvcontroller/protocol/ProtocolEncoder.java
index ddc38e0..30b8695 100644
--- a/app/src/main/java/com/example/agvcontroller/protocol/ProtocolEncoder.java
+++ b/app/src/main/java/com/example/agvcontroller/protocol/ProtocolEncoder.java
@@ -42,7 +42,7 @@
 
             //String uniqueNo = pac.getHeader().getUniqueNo();
 
-                //byte[] uniquenoBytes = RadixTools.intToBytes(Integer.parseInt(pac.getHeader().getUniqueNo()));   // uniqueno
+            //byte[] uniquenoBytes = RadixTools.intToBytes(Integer.parseInt(pac.getHeader().getUniqueNo()));   // uniqueno
 
 
             int len = PackagePart.UNIQUENO.getLen()     // len
@@ -50,14 +50,14 @@
                     + PackagePart.COMMAND_MARK.getLen()
                     + bodyBytes.length;
 
-            //out.writeByte(pac.getHeader().getStartSymbol())         // symbol
-            //        .writeShortLE(len)
-            //        .writeBytes(Utils.reverse(uniquenoBytes))       // uniqueno
-            //        .writeIntLE((int) (System.currentTimeMillis() / 1000))   // timestamp
-            //        .writeByte(pac.getHeader().getProtocolType().getCode()) // type
-            //        .writeBytes(bodyBytes)                          // body
-            //        .writeShort(pac.getValidCode())                 // valid
-            //;
+            out.writeByte(pac.getHeader().getStartSymbol())         // symbol
+                    .writeShortLE(len)
+                    //.writeBytes(Utils.reverse(uniquenoBytes))       // uniqueno
+                    .writeIntLE((int) (System.currentTimeMillis() / 1000))   // timestamp
+                    .writeByte(pac.getHeader().getProtocolType().getCode()) // type
+                    .writeBytes(bodyBytes)                          // body
+                    .writeShort(pac.getValidCode())                 // valid
+            ;
 
             pac.setValidCode(ValidUtil.calculateValidByteFromBuff(out));
             out.resetReaderIndex();
diff --git a/app/src/main/java/com/example/agvcontroller/protocol2/AgvPackage.java b/app/src/main/java/com/example/agvcontroller/protocol2/AgvPackage.java
new file mode 100644
index 0000000..a818bab
--- /dev/null
+++ b/app/src/main/java/com/example/agvcontroller/protocol2/AgvPackage.java
@@ -0,0 +1,101 @@
+package com.example.agvcontroller.protocol2;
+
+import com.example.agvcontroller.protocol.PacBody;
+import com.example.agvcontroller.protocol.PacErrorType;
+import com.example.agvcontroller.protocol.PacHeader;
+
+import io.netty.buffer.ByteBuf;
+
+public class AgvPackage {
+
+    /**
+     * 婧愭暟鎹寘缂撳啿鍖�(寮曠敤)
+     */
+    private ByteBuf sourceBuff;
+
+    /**
+     * 鍘熷娑堟伅瀵瑰簲鐨�16杩涘埗瀛楃涓�
+     */
+    private String sourceHexStr;
+
+    /**
+     * 娑堟伅澶撮儴
+     */
+    private PacHeader header;
+
+    /**
+     * 娑堟伅浣�
+     */
+    private PacBody body;
+
+    public ByteBuf getSourceBuff() {
+        return sourceBuff;
+    }
+
+    public void setSourceBuff(ByteBuf sourceBuff) {
+        this.sourceBuff = sourceBuff;
+    }
+
+    public String getSourceHexStr() {
+        return sourceHexStr;
+    }
+
+    public void setSourceHexStr(String sourceHexStr) {
+        this.sourceHexStr = sourceHexStr;
+    }
+
+    public PacHeader getHeader() {
+        return header;
+    }
+
+    public void setHeader(PacHeader header) {
+        this.header = header;
+    }
+
+    public int getValidCode() {
+        return validCode;
+    }
+
+    public void setValidCode(int validCode) {
+        this.validCode = validCode;
+    }
+
+    public PacBody getBody() {
+        return body;
+    }
+
+    public void setBody(PacBody body) {
+        this.body = body;
+    }
+
+    public boolean isErrorPac() {
+        return errorPac;
+    }
+
+    public void setErrorPac(boolean errorPac) {
+        this.errorPac = errorPac;
+    }
+
+    public PacErrorType getPacErrorType() {
+        return pacErrorType;
+    }
+
+    public void setPacErrorType(PacErrorType pacErrorType) {
+        this.pacErrorType = pacErrorType;
+    }
+
+    /**
+     * 娑堟伅鐨勬牎姝g爜
+     */
+    private int validCode;
+
+    /**
+     * 鏄惁涓烘牎楠屽紓甯稿寘
+     */
+    private boolean errorPac;
+
+    /**
+     * 鏍¢獙寮傚父绫诲瀷
+     */
+    private PacErrorType pacErrorType;
+}
diff --git a/app/src/main/java/com/example/agvcontroller/protocol2/PackagePart.java b/app/src/main/java/com/example/agvcontroller/protocol2/PackagePart.java
new file mode 100644
index 0000000..39ac18e
--- /dev/null
+++ b/app/src/main/java/com/example/agvcontroller/protocol2/PackagePart.java
@@ -0,0 +1,87 @@
+package com.example.agvcontroller.protocol2;
+
+/**
+ * 鎶ユ枃鏍囪瘑鏋氫妇
+ * 涓嬫爣1: 璧峰绱㈠紩
+ * 涓嬫爣2: 闀垮害
+ * 涓嬫爣3: 鎻忚堪
+ * Created by vincent on 2019-04-03
+ */
+public enum PackagePart {
+
+    /**
+     * 璧峰绗�
+     */
+    START_SYMBOL(0, 1, "璧峰绗�"),
+
+    /**
+     * 鏁版嵁鍗曞厓闀垮害
+     */
+    CONTENT_LENGTH(1, 2, "鏁版嵁鍗曞厓闀垮害"),
+
+
+    /**
+     * 鍞竴鏍囪瘑鐮�
+     */
+    UNIQUENO(3, 4, "鍞竴鏍囪瘑鐮�"),
+
+    /**
+     * 鏃堕棿鎴�
+     */
+    TIMESTAMP(7, 4, "鏃堕棿鎴�"),
+
+    /**
+     * 鍛戒护鏍囪瘑
+     */
+    COMMAND_MARK(11, 1, "鍛戒护鏍囪瘑"),
+
+    /**
+     * 鏁版嵁鍗曞厓
+     */
+    CONTENT(12, -1, "鏁版嵁鍗曞厓"),
+
+    /**
+     * 鏍¢獙鐮�
+     */
+    VALIDE_CODE( -1, 2, "鏍¢獙鐮�"),
+
+    /**
+     * 搴旂瓟鏍囧織
+     */
+    ACK_MARK(3, 1, "搴旂瓟鏍囧織"),
+
+    /**
+     * 鏁版嵁鍗曞厓鍔犲瘑鏂瑰紡
+     */
+    ENCRYPT_TYPE(21, 1, "鏁版嵁鍗曞厓鍔犲瘑鏂瑰紡"),
+
+    ;
+
+    // 瀛楄妭娈靛紑濮嬬储寮�
+    private Integer startIndex;
+
+    // 瀛楄妭娈垫�诲瓧鑺傛暟
+    private Integer len;
+
+    // 鎻忚堪
+    private String des;
+
+    PackagePart(int startIndex, int len, String des) {
+        this.startIndex = startIndex;
+        this.len = len;
+        this.des = des;
+    }
+
+    public Integer getStartIndex() {
+        return startIndex;
+    }
+
+    public Integer getLen() {
+        return len;
+    }
+
+    public String getDes() {
+        return des;
+    }
+
+}
diff --git a/app/src/main/java/com/example/agvcontroller/socket/NettyServerHandler.java b/app/src/main/java/com/example/agvcontroller/socket/NettyServerHandler.java
index 2d2c049..8c1bc95 100644
--- a/app/src/main/java/com/example/agvcontroller/socket/NettyServerHandler.java
+++ b/app/src/main/java/com/example/agvcontroller/socket/NettyServerHandler.java
@@ -3,6 +3,7 @@
 import java.nio.charset.StandardCharsets;
 
 import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
 import io.netty.buffer.Unpooled;
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelHandlerContext;
@@ -44,19 +45,6 @@
     public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
         // 澶勭悊鎺ユ敹鍒扮殑娑堟伅
         ByteBuf byteBuf = (ByteBuf) msg;
-        //byte[] data = new byte[byteBuf.readableBytes()];
-        //byteBuf.readBytes(data);
-        //String received = new String(data, StandardCharsets.UTF_8);
-        //System.out.println("Received from client: " + received);
-        //
-        //// 鍥炲娑堟伅
-        ////ByteBuf response = Unpooled.copiedBuffer("Response from server", StandardCharsets.UTF_8);
-        ////ctx.writeAndFlush(response);
-        //
-        //byte[] responseHex = hexStringToByteArray("48656c6c6f20576f726c64"); // "Hello World" in hex
-        //ByteBuf response = Unpooled.wrappedBuffer(responseHex);
-        //ctx.writeAndFlush(response);
-
         try {
             while (byteBuf.isReadable()) {
                 byte[] bytes = new byte[byteBuf.readableBytes()];
@@ -89,17 +77,17 @@
         return data;
     }
 
-    public static void sendMessageToClient(String clientId, byte[] message) {
-
+    public static void sendMessageToClient(String clientId, Object message) {
         Channel channel = channelMap.get(clientId);
+
         if (channel != null && channel.isActive()) {
             ByteBuf buf = Unpooled.wrappedBuffer(message);
+            String upperCase = ByteBufUtil.hexDump(buf).toUpperCase();
+            Log.d(TAG, "upperCase " + upperCase);
             channel.writeAndFlush(buf);
         } else {
             Log.d(TAG, "Client " + clientId + " is not connected");
         }
-
-        Log.d(TAG, "Client " + clientId + " is not connected");
     }
 
     @Override

--
Gitblit v1.9.1