#
whycq
2025-01-13 de127ac0c4b4803cce8a037c8d93840eeb192186
app/src/main/java/com/example/agvcontroller/MainActivity.java
@@ -1,5 +1,7 @@
package com.example.agvcontroller;
import static android.content.ContentValues.TAG;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;
@@ -16,7 +18,10 @@
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.GridLayout;
import android.widget.RelativeLayout;
import android.widget.Switch;
import com.example.agvcontroller.action.AllResetAction;
import com.example.agvcontroller.action.BackPaddle;
@@ -32,6 +37,7 @@
import com.example.agvcontroller.action.LiftResetAction;
import com.example.agvcontroller.action.LoadResetAction;
import com.example.agvcontroller.action.RotatopnLeftRight;
import com.example.agvcontroller.action.SingleSwitchAction;
import com.example.agvcontroller.protocol.AgvAction;
import com.example.agvcontroller.action.HandOutAction;
import com.example.agvcontroller.socket.NettyServerHandler;
@@ -80,13 +86,43 @@
    private Button liftResetBtn;
    private Button allResetBtn;
    private Switch switchBtn1;  // 单轴使能
    private Switch switchBtn2;  // 单轴使能
    private Switch switchBtn3;  // 单轴使能
    private Switch switchBtn4;  // 单轴使能
    private Switch switchBtn5;  // 单轴使能
    private Switch switchBtn6;  // 单轴使能
    private Switch switchBtn7;  // 单轴使能
    private Switch switchBtn8;  // 单轴使能
    private Switch switchBtn9;  // 单轴使能
    private Button axleFrontBtn1;
    private Button axleBackBtn1;
    private Button axleFrontBtn2;
    private Button axleBackBtn2;
    private Button axleFrontBtn3;
    private Button axleBackBtn3;
    private Button axleFrontBtn4;
    private Button axleBackBtn4;
    private Button axleFrontBtn5;
    private Button axleBackBtn5;
    private Button axleFrontBtn6;
    private Button axleBackBtn6;
    private Button axleFrontBtn7;
    private Button axleBackBtn7;
    private Button axleFrontBtn8;
    private Button axleBackBtn8;
    private Button axleFrontBtn9;
    private Button axleBackBtn9;
    private Button bodySwitchBtn; // 底盘/货叉切换
    private Socket socket;
    private String AgvNo = "1";
    private RelativeLayout layout_bottom;
    private RelativeLayout layout_top;
    private RelativeLayout layout_single;
    private GridLayout layout_single;
    private RelativeLayout layout_reset;
    int liftHeight = 400;
@@ -315,6 +351,37 @@
        layout_top = findViewById(R.id.layout_top);
        layout_single = findViewById(R.id.layout_single);
        layout_reset = findViewById(R.id.layout_reset);
        switchBtn1 = findViewById(R.id.switch1);
        switchBtn2 = findViewById(R.id.switch2);
        switchBtn3 = findViewById(R.id.switch3);
        switchBtn4 = findViewById(R.id.switch4);
        switchBtn5 = findViewById(R.id.switch5);
        switchBtn6 = findViewById(R.id.switch6);
        switchBtn7 = findViewById(R.id.switch7);
        switchBtn8 = findViewById(R.id.switch8);
        switchBtn9 = findViewById(R.id.switch9);
        axleFrontBtn1 =findViewById(R.id.btn_axle_1_front);
        axleBackBtn1 =findViewById(R.id.btn_axle_1_back);
        axleFrontBtn2 =findViewById(R.id.btn_axle_2_front);
        axleBackBtn2 =findViewById(R.id.btn_axle_2_back);
        axleFrontBtn3 =findViewById(R.id.btn_axle_3_front);
        axleBackBtn3 =findViewById(R.id.btn_axle_3_back);
        axleFrontBtn4 =findViewById(R.id.btn_axle_4_front);
        axleBackBtn4 =findViewById(R.id.btn_axle_4_back);
        axleFrontBtn5 =findViewById(R.id.btn_axle_5_front);
        axleBackBtn5 =findViewById(R.id.btn_axle_5_back);
        axleFrontBtn6 =findViewById(R.id.btn_axle_6_front);
        axleBackBtn6 =findViewById(R.id.btn_axle_6_back);
        axleFrontBtn7 =findViewById(R.id.btn_axle_7_front);
        axleBackBtn7 =findViewById(R.id.btn_axle_7_back);
        axleFrontBtn8 =findViewById(R.id.btn_axle_8_front);
        axleBackBtn8 =findViewById(R.id.btn_axle_8_back);
        axleFrontBtn9 =findViewById(R.id.btn_axle_9_front);
        axleBackBtn9 =findViewById(R.id.btn_axle_9_back);
        cameraResetBtn = findViewById(R.id.btn_camera_reset);
@@ -693,6 +760,550 @@
            }
        });
        switchBtn1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (vibrator != null && vibrator.hasVibrator()) {
                    vibrator.vibrate(500);
                }
                Log.d(TAG, "onCheckedChanged: " + isChecked);
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0, 16);
                if (isChecked) {
                    AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class)
                            .setAgvNo(AgvNo)
                            .setSerialNo(substring)
                            .setVal(1)
                            .bodySync((action) -> action.setPwd((short) 0));
                    nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
                    axleFrontBtn1.setVisibility(View.VISIBLE);
                    axleBackBtn1.setVisibility(View.VISIBLE);
                } else {
                    AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class)
                            .setAgvNo(AgvNo)
                            .setSerialNo(substring)
                            .setVal(1)
                            .bodySync((action) -> action.setPwd((short) 1));
                    nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
                    axleFrontBtn1.setVisibility(View.GONE);
                    axleBackBtn1.setVisibility(View.GONE);
                }
            }
        });
        switchBtn2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Log.d(TAG, "onCheckedChanged: " + isChecked);
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0, 16);
                if (isChecked) {
                    if (vibrator != null && vibrator.hasVibrator()) {
                        vibrator.vibrate(500);
                    }
                    AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class)
                            .setAgvNo(AgvNo)
                            .setSerialNo(substring)
                            .setVal(2)
                            .bodySync((action) -> action.setPwd((short) 0));
                    nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
                } else {
                    AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class)
                            .setAgvNo(AgvNo)
                            .setSerialNo(substring)
                            .setVal(2)
                            .bodySync((action) -> action.setPwd((short) 1));
                    nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
                }
            }
        });
        switchBtn3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Log.d(TAG, "onCheckedChanged: " + isChecked);
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0, 16);
                if (isChecked) {
                    if (vibrator != null && vibrator.hasVibrator()) {
                        vibrator.vibrate(500);
                    }
                    AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class)
                            .setAgvNo(AgvNo)
                            .setSerialNo(substring)
                            .setVal(3)
                            .bodySync((action) -> action.setPwd((short) 0));
                    nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
                } else {
                    AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class)
                            .setAgvNo(AgvNo)
                            .setSerialNo(substring)
                            .setVal(3)
                            .bodySync((action) -> action.setPwd((short) 1));
                    nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
                }
            }
        });
        switchBtn4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Log.d(TAG, "onCheckedChanged: " + isChecked);
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0, 16);
                if (isChecked) {
                    if (vibrator != null && vibrator.hasVibrator()) {
                        vibrator.vibrate(500);
                    }
                    AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class)
                            .setAgvNo(AgvNo)
                            .setSerialNo(substring)
                            .setVal(4)
                            .bodySync((action) -> action.setPwd((short) 0));
                    nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
                } else {
                    AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class)
                            .setAgvNo(AgvNo)
                            .setSerialNo(substring)
                            .setVal(4)
                            .bodySync((action) -> action.setPwd((short) 1));
                    nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
                }
            }
        });
        switchBtn5.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Log.d(TAG, "onCheckedChanged: " + isChecked);
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0, 16);
                if (isChecked) {
                    if (vibrator != null && vibrator.hasVibrator()) {
                        vibrator.vibrate(500);
                    }
                    AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class)
                            .setAgvNo(AgvNo)
                            .setSerialNo(substring)
                            .setVal(5)
                            .bodySync((action) -> action.setPwd((short) 0));
                    nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
                } else {
                    AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class)
                            .setAgvNo(AgvNo)
                            .setSerialNo(substring)
                            .setVal(5)
                            .bodySync((action) -> action.setPwd((short) 1));
                    nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
                }
            }
        });
        switchBtn6.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Log.d(TAG, "onCheckedChanged: " + isChecked);
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0, 16);
                if (isChecked) {
                    if (vibrator != null && vibrator.hasVibrator()) {
                        vibrator.vibrate(500);
                    }
                    AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class)
                            .setAgvNo(AgvNo)
                            .setSerialNo(substring)
                            .setVal(6)
                            .bodySync((action) -> action.setPwd((short) 0));
                    nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
                } else {
                    AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class)
                            .setAgvNo(AgvNo)
                            .setSerialNo(substring)
                            .setVal(6)
                            .bodySync((action) -> action.setPwd((short) 1));
                    nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
                }
            }
        });
        switchBtn7.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Log.d(TAG, "onCheckedChanged: " + isChecked);
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0, 16);
                if (isChecked) {
                    if (vibrator != null && vibrator.hasVibrator()) {
                        vibrator.vibrate(500);
                    }
                    AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class)
                            .setAgvNo(AgvNo)
                            .setSerialNo(substring)
                            .setVal(7)
                            .bodySync((action) -> action.setPwd((short) 0));
                    nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
                } else {
                    AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class)
                            .setAgvNo(AgvNo)
                            .setSerialNo(substring)
                            .setVal(7)
                            .bodySync((action) -> action.setPwd((short) 1));
                    nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
                }
            }
        });
        switchBtn8.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Log.d(TAG, "onCheckedChanged: " + isChecked);
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0, 16);
                if (isChecked) {
                    if (vibrator != null && vibrator.hasVibrator()) {
                        vibrator.vibrate(500);
                    }
                    AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class)
                            .setAgvNo(AgvNo)
                            .setSerialNo(substring)
                            .setVal(8)
                            .bodySync((action) -> action.setPwd((short) 0));
                    nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
                } else {
                    AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class)
                            .setAgvNo(AgvNo)
                            .setSerialNo(substring)
                            .setVal(8)
                            .bodySync((action) -> action.setPwd((short) 1));
                    nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
                }
            }
        });
        switchBtn9.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Log.d(TAG, "onCheckedChanged: " + isChecked);
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0, 16);
                if (isChecked) {
                    if (vibrator != null && vibrator.hasVibrator()) {
                        vibrator.vibrate(500);
                    }
                    AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class)
                            .setAgvNo(AgvNo)
                            .setSerialNo(substring)
                            .setVal(9)
                            .bodySync((action) -> action.setPwd((short) 0));
                    nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
                } else {
                    AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class)
                            .setAgvNo(AgvNo)
                            .setSerialNo(substring)
                            .setVal(9)
                            .bodySync((action) -> action.setPwd((short) 1));
                    nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
                }
            }
        });
        axleFrontBtn2 =findViewById(R.id.btn_axle_2_front);
        axleBackBtn2 =findViewById(R.id.btn_axle_2_back);
        axleFrontBtn3 =findViewById(R.id.btn_axle_3_front);
        axleBackBtn3 =findViewById(R.id.btn_axle_3_back);
        axleFrontBtn4 =findViewById(R.id.btn_axle_4_front);
        axleBackBtn4 =findViewById(R.id.btn_axle_4_back);
        axleFrontBtn5 =findViewById(R.id.btn_axle_5_front);
        axleBackBtn5 =findViewById(R.id.btn_axle_5_back);
        axleFrontBtn6 =findViewById(R.id.btn_axle_6_front);
        axleBackBtn6 =findViewById(R.id.btn_axle_6_back);
        axleFrontBtn7 =findViewById(R.id.btn_axle_7_front);
        axleBackBtn7 =findViewById(R.id.btn_axle_7_back);
        axleFrontBtn8 =findViewById(R.id.btn_axle_8_front);
        axleBackBtn8 =findViewById(R.id.btn_axle_8_back);
        axleFrontBtn9 =findViewById(R.id.btn_axle_9_front);
        axleBackBtn9 =findViewById(R.id.btn_axle_9_back);
        axleFrontBtn1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if (vibrator != null && vibrator.hasVibrator()) {
                    vibrator.vibrate(500);
                }
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16);
                AgvAction agvAction = new AgvAction<>(HandForkRotatopn.class)
                        .setAgvNo(AgvNo)
                        .setSerialNo(substring)
                        .setVal(1)
                        .bodySync((action) -> action.setPwd((short) 100));
                nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
            }
        });
        axleBackBtn1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if (vibrator != null && vibrator.hasVibrator()) {
                    vibrator.vibrate(500);
                }
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16);
                AgvAction agvAction = new AgvAction<>(HandForkRotatopn.class)
                        .setAgvNo(AgvNo)
                        .setSerialNo(substring)
                        .setVal(1)
                        .bodySync((action) -> action.setPwd((short) -100));
                nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
            }
        });
        axleFrontBtn2.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if (vibrator != null && vibrator.hasVibrator()) {
                    vibrator.vibrate(500);
                }
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16);
                AgvAction agvAction = new AgvAction<>(HandForkRotatopn.class)
                        .setAgvNo(AgvNo)
                        .setSerialNo(substring)
                        .setVal(2)
                        .bodySync((action) -> action.setPwd((short) 100));
                nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
            }
        });
        axleBackBtn2.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if (vibrator != null && vibrator.hasVibrator()) {
                    vibrator.vibrate(500);
                }
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16);
                AgvAction agvAction = new AgvAction<>(HandForkRotatopn.class)
                        .setAgvNo(AgvNo)
                        .setSerialNo(substring)
                        .setVal(2)
                        .bodySync((action) -> action.setPwd((short) -100));
                nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
            }
        });
        axleFrontBtn3.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if (vibrator != null && vibrator.hasVibrator()) {
                    vibrator.vibrate(500);
                }
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16);
                AgvAction agvAction = new AgvAction<>(HandForkRotatopn.class)
                        .setAgvNo(AgvNo)
                        .setSerialNo(substring)
                        .setVal(3)
                        .bodySync((action) -> action.setPwd((short) 100));
                nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
            }
        });
        axleBackBtn3.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if (vibrator != null && vibrator.hasVibrator()) {
                    vibrator.vibrate(500);
                }
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16);
                AgvAction agvAction = new AgvAction<>(HandForkRotatopn.class)
                        .setAgvNo(AgvNo)
                        .setSerialNo(substring)
                        .setVal(3)
                        .bodySync((action) -> action.setPwd((short) -100));
                nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
            }
        });
        axleFrontBtn4.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if (vibrator != null && vibrator.hasVibrator()) {
                    vibrator.vibrate(500);
                }
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16);
                AgvAction agvAction = new AgvAction<>(HandForkRotatopn.class)
                        .setAgvNo(AgvNo)
                        .setSerialNo(substring)
                        .setVal(4)
                        .bodySync((action) -> action.setPwd((short) 100));
                nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
            }
        });
        axleBackBtn4.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if (vibrator != null && vibrator.hasVibrator()) {
                    vibrator.vibrate(500);
                }
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16);
                AgvAction agvAction = new AgvAction<>(HandForkRotatopn.class)
                        .setAgvNo(AgvNo)
                        .setSerialNo(substring)
                        .setVal(4)
                        .bodySync((action) -> action.setPwd((short) -100));
                nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
            }
        });
        axleFrontBtn5.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if (vibrator != null && vibrator.hasVibrator()) {
                    vibrator.vibrate(500);
                }
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16);
                AgvAction agvAction = new AgvAction<>(HandForkRotatopn.class)
                        .setAgvNo(AgvNo)
                        .setSerialNo(substring)
                        .setVal(5)
                        .bodySync((action) -> action.setPwd((short) 100));
                nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
            }
        });
        axleBackBtn5.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if (vibrator != null && vibrator.hasVibrator()) {
                    vibrator.vibrate(500);
                }
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16);
                AgvAction agvAction = new AgvAction<>(HandForkRotatopn.class)
                        .setAgvNo(AgvNo)
                        .setSerialNo(substring)
                        .setVal(5)
                        .bodySync((action) -> action.setPwd((short) -100));
                nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
            }
        });
        axleFrontBtn6.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if (vibrator != null && vibrator.hasVibrator()) {
                    vibrator.vibrate(500);
                }
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16);
                AgvAction agvAction = new AgvAction<>(HandForkRotatopn.class)
                        .setAgvNo(AgvNo)
                        .setSerialNo(substring)
                        .setVal(6)
                        .bodySync((action) -> action.setPwd((short) 100));
                nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
            }
        });
        axleBackBtn6.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if (vibrator != null && vibrator.hasVibrator()) {
                    vibrator.vibrate(500);
                }
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16);
                AgvAction agvAction = new AgvAction<>(HandForkRotatopn.class)
                        .setAgvNo(AgvNo)
                        .setSerialNo(substring)
                        .setVal(6)
                        .bodySync((action) -> action.setPwd((short) -100));
                nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
            }
        });
        axleFrontBtn7.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if (vibrator != null && vibrator.hasVibrator()) {
                    vibrator.vibrate(500);
                }
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16);
                AgvAction agvAction = new AgvAction<>(HandForkRotatopn.class)
                        .setAgvNo(AgvNo)
                        .setSerialNo(substring)
                        .setVal(7)
                        .bodySync((action) -> action.setPwd((short) 100));
                nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
            }
        });
        axleBackBtn7.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if (vibrator != null && vibrator.hasVibrator()) {
                    vibrator.vibrate(500);
                }
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16);
                AgvAction agvAction = new AgvAction<>(HandForkRotatopn.class)
                        .setAgvNo(AgvNo)
                        .setSerialNo(substring)
                        .setVal(7)
                        .bodySync((action) -> action.setPwd((short) -100));
                nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
            }
        });
        axleFrontBtn8.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if (vibrator != null && vibrator.hasVibrator()) {
                    vibrator.vibrate(500);
                }
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16);
                AgvAction agvAction = new AgvAction<>(HandForkRotatopn.class)
                        .setAgvNo(AgvNo)
                        .setSerialNo(substring)
                        .setVal(8)
                        .bodySync((action) -> action.setPwd((short) 100));
                nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
            }
        });
        axleBackBtn8.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if (vibrator != null && vibrator.hasVibrator()) {
                    vibrator.vibrate(500);
                }
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16);
                AgvAction agvAction = new AgvAction<>(HandForkRotatopn.class)
                        .setAgvNo(AgvNo)
                        .setSerialNo(substring)
                        .setVal(8)
                        .bodySync((action) -> action.setPwd((short) -100));
                nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
            }
        });
        axleFrontBtn9.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if (vibrator != null && vibrator.hasVibrator()) {
                    vibrator.vibrate(500);
                }
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16);
                AgvAction agvAction = new AgvAction<>(HandForkRotatopn.class)
                        .setAgvNo(AgvNo)
                        .setSerialNo(substring)
                        .setVal(9)
                        .bodySync((action) -> action.setPwd((short) 100));
                nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
            }
        });
        axleBackBtn9.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if (vibrator != null && vibrator.hasVibrator()) {
                    vibrator.vibrate(500);
                }
                String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16);
                AgvAction agvAction = new AgvAction<>(HandForkRotatopn.class)
                        .setAgvNo(AgvNo)
                        .setSerialNo(substring)
                        .setVal(9)
                        .bodySync((action) -> action.setPwd((short) -100));
                nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端
            }
        });
        // 点动按钮
        stopBtn.setOnTouchListener(new CarTouchButton());
        goForwardBtn.setOnTouchListener(new CarTouchButton());