|  |  | 
 |  |  | import android.widget.Button; | 
 |  |  | import android.widget.RelativeLayout; | 
 |  |  |  | 
 |  |  | import com.example.agvcontroller.action.BackPaddle; | 
 |  |  | import com.example.agvcontroller.action.ForwardBackAction; | 
 |  |  | import com.example.agvcontroller.action.FrontPaddle; | 
 |  |  | import com.example.agvcontroller.action.HandExtendCollect; | 
 |  |  | import com.example.agvcontroller.action.HandForkRotatopn; | 
 |  |  | import com.example.agvcontroller.action.HandInAction; | 
 |  |  | import com.example.agvcontroller.action.HandLift; | 
 |  |  | import com.example.agvcontroller.action.RotatopnLeftRight; | 
 |  |  | import com.example.agvcontroller.protocol.AgvAction; | 
 |  |  | import com.example.agvcontroller.action.ForceSwitchAction; | 
 |  |  | import com.example.agvcontroller.action.HandOutAction; | 
 |  |  | import com.example.agvcontroller.socket.NettyServerHandler; | 
 |  |  | import com.example.agvcontroller.socket.SocketManager; | 
 |  |  | 
 |  |  |     private Button goBackwardBtn;  // 后退 | 
 |  |  |     private Button modelSwitchBtn;  // 进入、退出 手动 | 
 |  |  |  | 
 |  |  |     private Button frontPaddleExtendBtn; | 
 |  |  |     private Button frontPaddleCollectBtn; | 
 |  |  |     private Button backPaddleExtendBtn; | 
 |  |  |     private Button backPaddleCollectBtn; | 
 |  |  |     private Button riseBtn; | 
 |  |  |     private Button dropBtn; | 
 |  |  |     private Button extendForkBtn; | 
 |  |  |     private Button collectForkBtn; | 
 |  |  |     private Button turnLeftBtn; | 
 |  |  |     private Button turnRightBtn; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     private Button bodySwitchBtn; // 底盘/货叉切换 | 
 |  |  |     private Socket socket; | 
 |  |  |     private String AgvNo = "12"; | 
 |  |  | 
 |  |  |  | 
 |  |  |     SocketManager socketManager; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     //    按钮长按事件 | 
 |  |  |     private int autoVal = 1; | 
 |  |  |     private boolean isAuto = true; | 
 |  |  |     private boolean isGoForward = false; | 
 |  |  |     private boolean isGoBackward = false; | 
 |  |  |     private boolean isRotatopnRight = false; | 
 |  |  |     private boolean isRotatopnLeft = false; | 
 |  |  |  | 
 |  |  |     private boolean isFrontPaddleExtendBtn = false; | 
 |  |  |     private boolean isFrontPaddleCollectBtn = false; | 
 |  |  |     private boolean isBackPaddleExtendBtn = false; | 
 |  |  |     private boolean isBackPaddleCollectBtn = false; | 
 |  |  |     private boolean isRiseBtn = false; | 
 |  |  |     private boolean isDropBtn = false; | 
 |  |  |     private boolean isExtendForkBtn = false; | 
 |  |  |     private boolean isCollectForkBtn = false; | 
 |  |  |     private boolean isTurnLeftBtn = false; | 
 |  |  |     private boolean isTurnRightBtn = false; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  | 
 |  |  |                 nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 | 
 |  |  |                 handler.sendEmptyMessageDelayed(0, 100); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             // 前拨杆伸 | 
 |  |  |             if (isFrontPaddleExtendBtn) { | 
 |  |  |                 String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16); | 
 |  |  |                 AgvAction agvAction = new AgvAction<>(FrontPaddle.class) | 
 |  |  |                         .setAgvNo(AgvNo) | 
 |  |  |                         .setSerialNo(substring) | 
 |  |  |                         .setVal(1) | 
 |  |  |                         .bodySync((action) -> action.setPwd((short) -10)); | 
 |  |  |                 nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 | 
 |  |  |                 handler.sendEmptyMessageDelayed(0, 100); | 
 |  |  |             } | 
 |  |  |             // 前拨杆收 | 
 |  |  |             if (isFrontPaddleCollectBtn) { | 
 |  |  |                 String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16); | 
 |  |  |                 AgvAction agvAction = new AgvAction<>(FrontPaddle.class) | 
 |  |  |                         .setAgvNo(AgvNo) | 
 |  |  |                         .setSerialNo(substring) | 
 |  |  |                         .setVal(1) | 
 |  |  |                         .bodySync((action) -> action.setPwd((short) -10)); | 
 |  |  |                 nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 | 
 |  |  |                 handler.sendEmptyMessageDelayed(0, 100); | 
 |  |  |             } | 
 |  |  |             // 后拨杆伸 | 
 |  |  |             if (isBackPaddleExtendBtn) { | 
 |  |  |                 String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16); | 
 |  |  |                 AgvAction agvAction = new AgvAction<>(BackPaddle.class) | 
 |  |  |                         .setAgvNo(AgvNo) | 
 |  |  |                         .setSerialNo(substring) | 
 |  |  |                         .setVal(1) | 
 |  |  |                         .bodySync((action) -> action.setPwd((short) -10)); | 
 |  |  |                 nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 | 
 |  |  |                 handler.sendEmptyMessageDelayed(0, 100); | 
 |  |  |             } | 
 |  |  |             // 后拨杆收 | 
 |  |  |             if (isBackPaddleCollectBtn) { | 
 |  |  |                 String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16); | 
 |  |  |                 AgvAction agvAction = new AgvAction<>(BackPaddle.class) | 
 |  |  |                         .setAgvNo(AgvNo) | 
 |  |  |                         .setSerialNo(substring) | 
 |  |  |                         .setVal(1) | 
 |  |  |                         .bodySync((action) -> action.setPwd((short) -10)); | 
 |  |  |                 nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 | 
 |  |  |                 handler.sendEmptyMessageDelayed(0, 100); | 
 |  |  |             } | 
 |  |  |             // 上升 | 
 |  |  |             if (isRiseBtn) { | 
 |  |  |                 String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16); | 
 |  |  |                 AgvAction agvAction = new AgvAction<>(HandLift.class) | 
 |  |  |                         .setAgvNo(AgvNo) | 
 |  |  |                         .setSerialNo(substring) | 
 |  |  |                         .setVal(1) | 
 |  |  |                         .bodySync((action) -> action.setPwd((short) -10)); | 
 |  |  |                 nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 | 
 |  |  |                 handler.sendEmptyMessageDelayed(0, 100); | 
 |  |  |             } | 
 |  |  |             // 下降 | 
 |  |  |             if (isDropBtn) { | 
 |  |  |                 String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16); | 
 |  |  |                 AgvAction agvAction = new AgvAction<>(HandLift.class) | 
 |  |  |                         .setAgvNo(AgvNo) | 
 |  |  |                         .setSerialNo(substring) | 
 |  |  |                         .setVal(1) | 
 |  |  |                         .bodySync((action) -> action.setPwd((short) -10)); | 
 |  |  |                 nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 | 
 |  |  |                 handler.sendEmptyMessageDelayed(0, 100); | 
 |  |  |             } | 
 |  |  |             // 伸叉 | 
 |  |  |             if (isExtendForkBtn) { | 
 |  |  |                 String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16); | 
 |  |  |                 AgvAction agvAction = new AgvAction<>(HandExtendCollect.class) | 
 |  |  |                         .setAgvNo(AgvNo) | 
 |  |  |                         .setSerialNo(substring) | 
 |  |  |                         .setVal(1) | 
 |  |  |                         .bodySync((action) -> action.setPwd((short) -10)); | 
 |  |  |                 nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 | 
 |  |  |                 handler.sendEmptyMessageDelayed(0, 100); | 
 |  |  |             } | 
 |  |  |             // 收叉 | 
 |  |  |             if (isCollectForkBtn) { | 
 |  |  |                 String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16); | 
 |  |  |                 AgvAction agvAction = new AgvAction<>(HandExtendCollect.class) | 
 |  |  |                         .setAgvNo(AgvNo) | 
 |  |  |                         .setSerialNo(substring) | 
 |  |  |                         .setVal(1) | 
 |  |  |                         .bodySync((action) -> action.setPwd((short) -10)); | 
 |  |  |                 nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 | 
 |  |  |                 handler.sendEmptyMessageDelayed(0, 100); | 
 |  |  |             } | 
 |  |  |             // 货叉左旋 | 
 |  |  |             if (isTurnLeftBtn) { | 
 |  |  |                 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) -10)); | 
 |  |  |                 nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 | 
 |  |  |                 handler.sendEmptyMessageDelayed(0, 100); | 
 |  |  |             } | 
 |  |  |             // 货叉右旋 | 
 |  |  |             if (isTurnRightBtn) { | 
 |  |  |                 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) -10)); | 
 |  |  |                 nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 | 
 |  |  |                 handler.sendEmptyMessageDelayed(0, 100); | 
 |  |  |             } | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  | 
 |  |  |         rotatopnLeftBtn = findViewById(R.id.btn_rotatopn_left); | 
 |  |  |         rotatopnRightBtn = findViewById(R.id.btn_rotatopn_right); | 
 |  |  |         modelSwitchBtn = findViewById(R.id.btn_model_switch); | 
 |  |  |  | 
 |  |  |         frontPaddleExtendBtn = findViewById(R.id.btn_front_paddle_extend); // 前拨杆 | 
 |  |  |         frontPaddleCollectBtn = findViewById(R.id.btn_front_paddle_collect); // 前拨杆 | 
 |  |  |         backPaddleExtendBtn = findViewById(R.id.btn_back_paddle_extend); // 后拨杆 | 
 |  |  |         backPaddleCollectBtn = findViewById(R.id.btn_back_paddle_collect); // 后拨杆 | 
 |  |  |         riseBtn = findViewById(R.id.btn_rise); | 
 |  |  |         dropBtn = findViewById(R.id.btn_drop); | 
 |  |  |         extendForkBtn = findViewById(R.id.btn_extend_fork); | 
 |  |  |         collectForkBtn = findViewById(R.id.btn_collect_fork); | 
 |  |  |         turnLeftBtn = findViewById(R.id.btn_turn_left); | 
 |  |  |         turnRightBtn = findViewById(R.id.btn_turn_right); | 
 |  |  |  | 
 |  |  |         bodySwitchBtn = findViewById(R.id.btn_body_switch); | 
 |  |  |  | 
 |  |  | 
 |  |  |         rotatopnLeftBtn.setOnTouchListener(new CarTouchButton()); | 
 |  |  |         rotatopnRightBtn.setOnTouchListener(new CarTouchButton()); | 
 |  |  |  | 
 |  |  |         frontPaddleExtendBtn.setOnTouchListener(new CarTouchButton()); | 
 |  |  |         frontPaddleCollectBtn.setOnTouchListener(new CarTouchButton()); | 
 |  |  |         backPaddleExtendBtn.setOnTouchListener(new CarTouchButton()); | 
 |  |  |         backPaddleCollectBtn.setOnTouchListener(new CarTouchButton()); | 
 |  |  |         riseBtn.setOnTouchListener(new CarTouchButton()); | 
 |  |  |         dropBtn.setOnTouchListener(new CarTouchButton()); | 
 |  |  |         extendForkBtn.setOnTouchListener(new CarTouchButton()); | 
 |  |  |         collectForkBtn.setOnTouchListener(new CarTouchButton()); | 
 |  |  |         turnLeftBtn.setOnTouchListener(new CarTouchButton()); | 
 |  |  |         turnRightBtn.setOnTouchListener(new CarTouchButton()); | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private class CarTouchButton implements View.OnTouchListener { | 
 |  |  |  | 
 |  |  |         @Override | 
 |  |  |         public boolean onTouch(View view, MotionEvent motionEvent) { | 
 |  |  |  | 
 |  |  |             if (view.getId() == R.id.btn_go_forward) { | 
 |  |  |                 // 前进 | 
 |  |  |                 if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { | 
 |  |  | 
 |  |  |                 } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { | 
 |  |  |                     isGoForward = false; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |             } else if (view.getId() == R.id.btn_go_backward) { | 
 |  |  |                 // 后退 | 
 |  |  |                 if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { | 
 |  |  | 
 |  |  |                 } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { | 
 |  |  |                     isGoBackward = false; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |             } else if (view.getId() == R.id.btn_rotatopn_left) { | 
 |  |  |                 // 左旋转 | 
 |  |  |                 if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { | 
 |  |  | 
 |  |  |                 } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { | 
 |  |  |                     isRotatopnLeft = false; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |             } else if (view.getId() == R.id.btn_rotatopn_right) { | 
 |  |  |                 // 右旋转 | 
 |  |  |                 if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { | 
 |  |  | 
 |  |  |                 } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { | 
 |  |  |                     isRotatopnRight = false; | 
 |  |  |                 } | 
 |  |  |             } else if (view.getId() == R.id.btn_front_paddle_extend) { | 
 |  |  |                 // 前拨杆伸出 | 
 |  |  |                 if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { | 
 |  |  |                     isFrontPaddleExtendBtn = true; | 
 |  |  |                     handler.sendEmptyMessage(0); | 
 |  |  |                 } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { | 
 |  |  |                     isFrontPaddleExtendBtn = false; | 
 |  |  |                 } | 
 |  |  |             } else if (view.getId() == R.id.btn_front_paddle_collect) { | 
 |  |  |                 // 前拨杆收起 | 
 |  |  |                 if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { | 
 |  |  |                     isFrontPaddleCollectBtn = true; | 
 |  |  |                     handler.sendEmptyMessage(0); | 
 |  |  |                 } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { | 
 |  |  |                     isFrontPaddleCollectBtn = false; | 
 |  |  |                 } | 
 |  |  |             } else if (view.getId() == R.id.btn_back_paddle_extend) { | 
 |  |  |                 // 后拨杆伸出 | 
 |  |  |                 if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { | 
 |  |  |                     isBackPaddleExtendBtn = true; | 
 |  |  |                     handler.sendEmptyMessage(0); | 
 |  |  |                 } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { | 
 |  |  |                     isBackPaddleExtendBtn = false; | 
 |  |  |                 } | 
 |  |  |             } else if (view.getId() == R.id.btn_back_paddle_collect) { | 
 |  |  |                 // 后拨杆收起 | 
 |  |  |                 if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { | 
 |  |  |                     isBackPaddleCollectBtn = true; | 
 |  |  |                     handler.sendEmptyMessage(0); | 
 |  |  |                 } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { | 
 |  |  |                     isBackPaddleCollectBtn = false; | 
 |  |  |                 } | 
 |  |  |             } else if (view.getId() == R.id.btn_rise) { | 
 |  |  |                 // 上升 | 
 |  |  |                 if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { | 
 |  |  |                     isRiseBtn = true; | 
 |  |  |                     handler.sendEmptyMessage(0); | 
 |  |  |                 } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { | 
 |  |  |                     isRiseBtn = false; | 
 |  |  |                 } | 
 |  |  |             } else if (view.getId() == R.id.btn_drop) { | 
 |  |  |                 // 下降 | 
 |  |  |                 if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { | 
 |  |  |                     isDropBtn = true; | 
 |  |  |                     handler.sendEmptyMessage(0); | 
 |  |  |                 } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { | 
 |  |  |                     isDropBtn = false; | 
 |  |  |                 } | 
 |  |  |             } else if (view.getId() == R.id.btn_extend_fork) { | 
 |  |  |                 // 伸叉 | 
 |  |  |                 if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { | 
 |  |  |                     isExtendForkBtn = true; | 
 |  |  |                     handler.sendEmptyMessage(0); | 
 |  |  |                 } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { | 
 |  |  |                     isExtendForkBtn = false; | 
 |  |  |                 } | 
 |  |  |             } else if (view.getId() == R.id.btn_collect_fork) { | 
 |  |  |                 // 收叉 | 
 |  |  |                 if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { | 
 |  |  |                     isCollectForkBtn = true; | 
 |  |  |                     handler.sendEmptyMessage(0); | 
 |  |  |                 } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { | 
 |  |  |                     isCollectForkBtn = false; | 
 |  |  |                 } | 
 |  |  |             } else if (view.getId() == R.id.btn_turn_left) { | 
 |  |  |                 // 左旋转 | 
 |  |  |                 if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { | 
 |  |  |                     isTurnLeftBtn = true; | 
 |  |  |                     handler.sendEmptyMessage(0); | 
 |  |  |                 } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { | 
 |  |  |                     isTurnLeftBtn = false; | 
 |  |  |                 } | 
 |  |  |             } else if (view.getId() == R.id.btn_turn_right) { | 
 |  |  |                 // 左旋转 | 
 |  |  |                 if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { | 
 |  |  |                     isTurnRightBtn = true; | 
 |  |  |                     handler.sendEmptyMessage(0); | 
 |  |  |                 } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { | 
 |  |  |                     isTurnRightBtn = false; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             return false; | 
 |  |  |  | 
 |  |  |         } |