| | |
| | | |
| | | import android.content.Context; |
| | | import android.content.Intent; |
| | | import android.content.res.ColorStateList; |
| | | import android.graphics.Color; |
| | | import android.os.Bundle; |
| | | import android.os.Handler; |
| | | import android.os.Looper; |
| | | import android.os.Message; |
| | | import android.os.Vibrator; |
| | | import android.util.Log; |
| | |
| | | import android.widget.GridLayout; |
| | | import android.widget.RelativeLayout; |
| | | import android.widget.Switch; |
| | | import android.widget.TextView; |
| | | |
| | | import com.example.agvcontroller.action.AllResetAction; |
| | | import com.example.agvcontroller.action.BackPaddle; |
| | |
| | | import com.example.agvcontroller.utils.DialogUtil; |
| | | import com.example.agvcontroller.utils.SnowflakeIdWorker; |
| | | |
| | | import org.greenrobot.eventbus.EventBus; |
| | | import org.greenrobot.eventbus.Subscribe; |
| | | import org.greenrobot.eventbus.ThreadMode; |
| | | |
| | | import java.net.Socket; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.concurrent.ConcurrentHashMap; |
| | |
| | | public static final Map<String, Object> map = new ConcurrentHashMap(); |
| | | public static final Map<String, Object> car_num = new ConcurrentHashMap(); |
| | | |
| | | private RecyclerView recyclerView; |
| | | private ItemAdapter itemAdapter; |
| | | private List<Item> itemList; |
| | | private static TextView recentLogTextView; |
| | | private static Handler mainHandler; |
| | | private static List<String> logList = AGVApplication.getLogList(); |
| | | private static final int MAX_RECENT_LOGS = 10; // 最多显示 10 条最新日志 |
| | | |
| | | private static TextView agvBattery; |
| | | |
| | | private Vibrator vibrator; |
| | | private Button stopBtn; // 急停按钮 |
| | | // private Button forceSwitchBtn; // 手自动强制开关 |
| | |
| | | private Button axleFrontBtn9; |
| | | private Button axleBackBtn9; |
| | | |
| | | private Button viewAllLogsButton; |
| | | |
| | | |
| | | |
| | | private Button bodySwitchBtn; // 底盘/货叉切换 |
| | | private Socket socket; |
| | | private String AgvNo = "1"; |
| | | |
| | | private RelativeLayout layout_bottom; |
| | | private RelativeLayout layout_top; |
| | | private GridLayout layout_single; |
| | |
| | | @Override |
| | | public boolean handleMessage(Message msg) { |
| | | String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16); |
| | | short pwd = 0; |
| | | if (isGoForward) { |
| | | Log.d(TAG, "isGoForward: " + isGoForward); |
| | | AgvAction agvAction = new AgvAction<>(ForwardBackAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(1) |
| | | .bodySync((action) -> action.setPwd((short) 50)); |
| | | Log.d(TAG, "isGoForward: " + clientId); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | handler.sendEmptyMessageDelayed(0, 100); // 100ms 后发送下一条消息 |
| | | } |
| | |
| | | handler.sendEmptyMessageDelayed(0, 100); |
| | | } |
| | | |
| | | if (isRotatopnRight) { |
| | | AgvAction agvAction = new AgvAction<>(RotatopnLeftRight.class) |
| | | if (isFront1) { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchRunAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(1) |
| | | .bodySync((action) -> action.setPwd((short) 50)); |
| | | .bodySync((action) -> action.setPwd((short) 99)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | handler.sendEmptyMessageDelayed(0, 100); |
| | | } |
| | | if (isRotatopnLeft) { |
| | | AgvAction agvAction = new AgvAction<>(RotatopnLeftRight.class) |
| | | if (isBack1) { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchRunAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(1) |
| | | .bodySync((action) -> action.setPwd((short) -50 )); |
| | | .bodySync((action) -> action.setPwd((short) -99)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | handler.sendEmptyMessageDelayed(0, 100); |
| | | } |
| | | if (isFront2) { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchRunAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(2) |
| | | .bodySync((action) -> action.setPwd((short) 99)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | handler.sendEmptyMessageDelayed(0, 100); |
| | | } |
| | | if (isBack2) { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchRunAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(2) |
| | | .bodySync((action) -> action.setPwd((short) -99)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | handler.sendEmptyMessageDelayed(0, 100); |
| | | } |
| | | if (isFront3) { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchRunAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(3) |
| | | .bodySync((action) -> action.setPwd((short) 99)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | handler.sendEmptyMessageDelayed(0, 100); |
| | | } |
| | | if (isBack3) { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchRunAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(3) |
| | | .bodySync((action) -> action.setPwd((short) -99)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | handler.sendEmptyMessageDelayed(0, 100); |
| | | } |
| | | if (isFront4) { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchRunAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(4) |
| | | .bodySync((action) -> action.setPwd((short) 99)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | handler.sendEmptyMessageDelayed(0, 100); |
| | | } |
| | | if (isBack4) { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchRunAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(4) |
| | | .bodySync((action) -> action.setPwd((short) -99)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | handler.sendEmptyMessageDelayed(0, 100); |
| | | } |
| | | if (isFront5) { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchRunAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(5) |
| | | .bodySync((action) -> action.setPwd((short) 99)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | handler.sendEmptyMessageDelayed(0, 100); |
| | | } |
| | | if (isBack5) { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchRunAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(5) |
| | | .bodySync((action) -> action.setPwd((short) -99)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | handler.sendEmptyMessageDelayed(0, 100); |
| | | } |
| | | if (isFront6) { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchRunAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(6) |
| | | .bodySync((action) -> action.setPwd((short) 99)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | handler.sendEmptyMessageDelayed(0, 100); |
| | | } |
| | | if (isBack6) { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchRunAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(6) |
| | | .bodySync((action) -> action.setPwd((short) -99)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | handler.sendEmptyMessageDelayed(0, 100); |
| | | } |
| | | if (isFront7) { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchRunAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(7) |
| | | .bodySync((action) -> action.setPwd((short) 99)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | handler.sendEmptyMessageDelayed(0, 100); |
| | | } |
| | | if (isBack7) { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchRunAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(7) |
| | | .bodySync((action) -> action.setPwd((short) -99)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | handler.sendEmptyMessageDelayed(0, 100); |
| | | } |
| | | if (isFront8) { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchRunAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(8) |
| | | .bodySync((action) -> action.setPwd((short) 99)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | handler.sendEmptyMessageDelayed(0, 100); |
| | | } |
| | | if (isBack8) { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchRunAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(8) |
| | | .bodySync((action) -> action.setPwd((short) -99)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | handler.sendEmptyMessageDelayed(0, 100); |
| | | } |
| | | if (isFront9) { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchRunAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(9) |
| | | .bodySync((action) -> action.setPwd((short) 99)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | handler.sendEmptyMessageDelayed(0, 100); |
| | | } |
| | | if (isBack9) { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchRunAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(9) |
| | | .bodySync((action) -> action.setPwd((short) -99)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | handler.sendEmptyMessageDelayed(0, 100); |
| | | } |
| | | return false; |
| | | } |
| | | }); |
| | | |
| | | String clientId; |
| | | static String AgvNo = "1"; |
| | | static String clientId; |
| | | NettyServerHandler nettyServerHandler; |
| | | |
| | | |
| | | |
| | | @Override |
| | | protected void onCreate(Bundle savedInstanceState) { |
| | | super.onCreate(savedInstanceState); |
| | | setContentView(R.layout.activity_main); |
| | | |
| | | agvBattery = findViewById(R.id.agv_battery); |
| | | |
| | | |
| | | |
| | | // 按钮震动 |
| | | vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); |
| | |
| | | liftResetBtn = findViewById(R.id.btn_lift_reset); |
| | | allResetBtn = findViewById(R.id.btn_all_reset); |
| | | |
| | | viewAllLogsButton = findViewById(R.id.view_all_logs_button); |
| | | recentLogTextView = findViewById(R.id.recent_log_text_view); |
| | | mainHandler = new Handler(Looper.getMainLooper()); |
| | | |
| | | // 初始化日志显示 |
| | | updateRecentLogTextView(); |
| | | |
| | | // 启动一个定时任务来定期检查日志列表的变化 |
| | | handler.postDelayed(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | updateLogDisplay(); |
| | | handler.postDelayed(this, 1000); // 每秒检查一次 |
| | | } |
| | | }, 100); |
| | | |
| | | // 注册 EventBus |
| | | EventBus.getDefault().register(this); |
| | | |
| | | // 设置查看全部日志按钮的点击事件 |
| | | viewAllLogsButton.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | showAllLogsActivity(); |
| | | } |
| | | }); |
| | | |
| | | |
| | | Intent intent = getIntent(); |
| | | clientId = intent.getStringExtra("ip"); |
| | | AgvNo = intent.getStringExtra("agvNo"); |
| | | if (intent != null) { |
| | | AGVCar car = (AGVCar) intent.getSerializableExtra("item"); |
| | | clientId = car.getClientId(); |
| | | AgvNo = car.getAgvNo(); |
| | | } |
| | | |
| | | Log.i("message1",clientId); |
| | | |
| | | // 前拨杆伸出 |
| | |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(1) |
| | | .bodySync((action) -> action.setPwd((short) 0)); |
| | | .bodySync((action) -> action.setPwd((short) 1)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | axleFrontBtn1.setVisibility(View.VISIBLE); |
| | | axleBackBtn1.setVisibility(View.VISIBLE); |
| | |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(1) |
| | | .bodySync((action) -> action.setPwd((short) 1)); |
| | | .bodySync((action) -> action.setPwd((short) 0)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | axleFrontBtn1.setVisibility(View.GONE); |
| | | axleBackBtn1.setVisibility(View.GONE); |
| | |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(2) |
| | | .bodySync((action) -> action.setPwd((short) 0)); |
| | | .bodySync((action) -> action.setPwd((short) 1)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | axleFrontBtn2.setVisibility(View.VISIBLE); |
| | | axleBackBtn2.setVisibility(View.VISIBLE); |
| | | } else { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(2) |
| | | .bodySync((action) -> action.setPwd((short) 1)); |
| | | .bodySync((action) -> action.setPwd((short) 0)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | axleFrontBtn2.setVisibility(View.GONE); |
| | | axleBackBtn2.setVisibility(View.GONE); |
| | | } |
| | | } |
| | | }); |
| | |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(3) |
| | | .bodySync((action) -> action.setPwd((short) 0)); |
| | | .bodySync((action) -> action.setPwd((short) 1)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | axleFrontBtn3.setVisibility(View.VISIBLE); |
| | | axleBackBtn3.setVisibility(View.VISIBLE); |
| | | } else { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(3) |
| | | .bodySync((action) -> action.setPwd((short) 1)); |
| | | .bodySync((action) -> action.setPwd((short) 0)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | axleFrontBtn3.setVisibility(View.GONE); |
| | | axleBackBtn3.setVisibility(View.GONE); |
| | | } |
| | | } |
| | | }); |
| | |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(4) |
| | | .bodySync((action) -> action.setPwd((short) 0)); |
| | | .bodySync((action) -> action.setPwd((short) 1)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | axleFrontBtn4.setVisibility(View.VISIBLE); |
| | | axleBackBtn4.setVisibility(View.VISIBLE); |
| | | } else { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(4) |
| | | .bodySync((action) -> action.setPwd((short) 1)); |
| | | .bodySync((action) -> action.setPwd((short) 0)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | axleFrontBtn4.setVisibility(View.GONE); |
| | | axleBackBtn4.setVisibility(View.GONE); |
| | | } |
| | | } |
| | | }); |
| | |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(6) |
| | | .bodySync((action) -> action.setPwd((short) 0)); |
| | | .bodySync((action) -> action.setPwd((short) 1)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | axleFrontBtn6.setVisibility(View.VISIBLE); |
| | | axleBackBtn6.setVisibility(View.VISIBLE); |
| | | } else { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(6) |
| | | .bodySync((action) -> action.setPwd((short) 1)); |
| | | .bodySync((action) -> action.setPwd((short) 0)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | axleFrontBtn6.setVisibility(View.GONE); |
| | | axleBackBtn6.setVisibility(View.GONE); |
| | | } |
| | | } |
| | | }); |
| | |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(7) |
| | | .bodySync((action) -> action.setPwd((short) 0)); |
| | | .bodySync((action) -> action.setPwd((short) 1)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | axleFrontBtn7.setVisibility(View.VISIBLE); |
| | | axleBackBtn7.setVisibility(View.VISIBLE); |
| | | } else { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(7) |
| | | .bodySync((action) -> action.setPwd((short) 1)); |
| | | .bodySync((action) -> action.setPwd((short) 0)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | axleFrontBtn7.setVisibility(View.GONE); |
| | | axleBackBtn7.setVisibility(View.GONE); |
| | | } |
| | | } |
| | | }); |
| | |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(8) |
| | | .bodySync((action) -> action.setPwd((short) 0)); |
| | | .bodySync((action) -> action.setPwd((short) 1)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | axleFrontBtn8.setVisibility(View.VISIBLE); |
| | | axleBackBtn8.setVisibility(View.VISIBLE); |
| | | } else { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(8) |
| | | .bodySync((action) -> action.setPwd((short) 1)); |
| | | .bodySync((action) -> action.setPwd((short) 0)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | axleFrontBtn8.setVisibility(View.GONE); |
| | | axleBackBtn8.setVisibility(View.GONE); |
| | | } |
| | | } |
| | | }); |
| | |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(9) |
| | | .bodySync((action) -> action.setPwd((short) 0)); |
| | | .bodySync((action) -> action.setPwd((short) 1)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | axleFrontBtn9.setVisibility(View.VISIBLE); |
| | | axleBackBtn9.setVisibility(View.VISIBLE); |
| | | } else { |
| | | AgvAction agvAction = new AgvAction<>(SingleSwitchAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(9) |
| | | .bodySync((action) -> action.setPwd((short) 1)); |
| | | .bodySync((action) -> action.setPwd((short) 0)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | axleFrontBtn9.setVisibility(View.GONE); |
| | | axleBackBtn9.setVisibility(View.GONE); |
| | | } |
| | | } |
| | | }); |
| | | |
| | | |
| | | 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<>(SingleSwitchRunAction.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<>(SingleSwitchRunAction.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<>(SingleSwitchRunAction.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<>(SingleSwitchRunAction.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<>(SingleSwitchRunAction.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<>(SingleSwitchRunAction.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<>(SingleSwitchRunAction.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<>(SingleSwitchRunAction.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<>(SingleSwitchRunAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(5) |
| | | .bodySync((action) -> action.setPwd((short) 99)); |
| | | 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<>(SingleSwitchRunAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(5) |
| | | .bodySync((action) -> action.setPwd((short) -99)); |
| | | 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<>(SingleSwitchRunAction.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<>(SingleSwitchRunAction.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<>(SingleSwitchRunAction.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<>(SingleSwitchRunAction.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<>(SingleSwitchRunAction.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<>(SingleSwitchRunAction.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<>(SingleSwitchRunAction.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<>(SingleSwitchRunAction.class) |
| | | .setAgvNo(AgvNo) |
| | | .setSerialNo(substring) |
| | | .setVal(9) |
| | | .bodySync((action) -> action.setPwd((short) -100)); |
| | | nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 |
| | | } |
| | | }); |
| | | |
| | | // 点动按钮 |
| | | stopBtn.setOnTouchListener(new CarTouchButton()); |
| | |
| | | |
| | | |
| | | } |
| | | |
| | | private void updateLogDisplay() { |
| | | // 获取最新的日志列表 |
| | | List<String> logs = AGVApplication.getLogList(); |
| | | // 获取最后两条日志 |
| | | int size = logs.size(); |
| | | if (size == 0) { |
| | | recentLogTextView.setText(""); |
| | | } else if (size == 1) { |
| | | recentLogTextView.setText(logs.get(0)); |
| | | } else { |
| | | String logText = logs.get(size - 2) + "\n" + // 获取倒数第二条日志 |
| | | logs.get(size - 1); // 获取最后一条日志 |
| | | // 更新 TextView 的显示内容 |
| | | Log.d("logs", "updateLogDisplay: " + logText); |
| | | recentLogTextView.setText(logText); |
| | | } |
| | | } |
| | | |
| | | |
| | | private class CarTouchButton implements View.OnTouchListener { |
| | | |
| | |
| | | } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { |
| | | isRotatopnRight = false; |
| | | } |
| | | } else if (view.getId() == R.id.btn_rotatopn_right) { |
| | | } else if (view.getId() == R.id.btn_axle_1_front) { |
| | | // 轴动按钮 |
| | | if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { |
| | | isRotatopnRight = true; |
| | | isFront1 = true; |
| | | handler.sendEmptyMessage(0); |
| | | } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { |
| | | isRotatopnRight = false; |
| | | isFront1 = false; |
| | | } |
| | | } else if (view.getId() == R.id.btn_axle_1_back) { |
| | | // 轴动按钮 |
| | | if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { |
| | | isBack1 = true; |
| | | handler.sendEmptyMessage(0); |
| | | } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { |
| | | isBack1 = false; |
| | | } |
| | | } else if (view.getId() == R.id.btn_axle_2_front) { |
| | | // 轴动按钮 |
| | | if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { |
| | | isFront2 = true; |
| | | handler.sendEmptyMessage(0); |
| | | } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { |
| | | isFront2 = false; |
| | | } |
| | | } else if (view.getId() == R.id.btn_axle_2_back) { |
| | | // 轴动按钮 |
| | | if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { |
| | | isBack2 = true; |
| | | handler.sendEmptyMessage(0); |
| | | } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { |
| | | isBack2 = false; |
| | | } |
| | | } else if (view.getId() == R.id.btn_axle_3_front) { |
| | | // 轴动按钮 |
| | | if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { |
| | | isFront3 = true; |
| | | handler.sendEmptyMessage(0); |
| | | } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { |
| | | isFront3 = false; |
| | | } |
| | | } else if (view.getId() == R.id.btn_axle_3_back) { |
| | | // 轴动按钮 |
| | | if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { |
| | | isBack3 = true; |
| | | handler.sendEmptyMessage(0); |
| | | } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { |
| | | isBack3 = false; |
| | | } |
| | | } else if (view.getId() == R.id.btn_axle_4_front) { |
| | | // 轴动按钮 |
| | | if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { |
| | | isFront4 = true; |
| | | handler.sendEmptyMessage(0); |
| | | } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { |
| | | isFront4 = false; |
| | | } |
| | | } else if (view.getId() == R.id.btn_axle_4_back) { |
| | | // 轴动按钮 |
| | | if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { |
| | | isBack4 = true; |
| | | handler.sendEmptyMessage(0); |
| | | } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { |
| | | isBack4 = false; |
| | | } |
| | | } else if (view.getId() == R.id.btn_axle_5_front) { |
| | | // 轴动按钮 |
| | | if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { |
| | | isFront5 = true; |
| | | handler.sendEmptyMessage(0); |
| | | } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { |
| | | isFront5 = false; |
| | | } |
| | | } else if (view.getId() == R.id.btn_axle_5_back) { |
| | | // 轴动按钮 |
| | | if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { |
| | | isBack5 = true; |
| | | handler.sendEmptyMessage(0); |
| | | } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { |
| | | isBack5 = false; |
| | | } |
| | | } else if (view.getId() == R.id.btn_axle_6_front) { |
| | | // 轴动按钮 |
| | | if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { |
| | | isFront6 = true; |
| | | handler.sendEmptyMessage(0); |
| | | } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { |
| | | isFront6 = false; |
| | | } |
| | | } else if (view.getId() == R.id.btn_axle_6_back) { |
| | | // 轴动按钮 |
| | | if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { |
| | | isBack6 = true; |
| | | handler.sendEmptyMessage(0); |
| | | } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { |
| | | isBack6 = false; |
| | | } |
| | | } else if (view.getId() == R.id.btn_axle_7_front) { |
| | | // 轴动按钮 |
| | | if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { |
| | | isFront7 = true; |
| | | handler.sendEmptyMessage(0); |
| | | } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { |
| | | isFront7 = false; |
| | | } |
| | | } else if (view.getId() == R.id.btn_axle_7_back) { |
| | | // 轴动按钮 |
| | | if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { |
| | | isBack7 = true; |
| | | handler.sendEmptyMessage(0); |
| | | } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { |
| | | isBack7 = false; |
| | | } |
| | | } else if (view.getId() == R.id.btn_axle_8_front) { |
| | | // 轴动按钮 |
| | | if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { |
| | | isFront8 = true; |
| | | handler.sendEmptyMessage(0); |
| | | } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { |
| | | isFront8 = false; |
| | | } |
| | | } else if (view.getId() == R.id.btn_axle_8_back) { |
| | | // 轴动按钮 |
| | | if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { |
| | | isBack8 = true; |
| | | handler.sendEmptyMessage(0); |
| | | } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { |
| | | isBack8 = false; |
| | | } |
| | | } else if (view.getId() == R.id.btn_axle_9_front) { |
| | | // 轴动按钮 |
| | | if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { |
| | | isFront9 = true; |
| | | handler.sendEmptyMessage(0); |
| | | } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { |
| | | isFront9 = false; |
| | | } |
| | | } else if (view.getId() == R.id.btn_axle_9_back) { |
| | | // 轴动按钮 |
| | | if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { |
| | | isBack9 = true; |
| | | handler.sendEmptyMessage(0); |
| | | } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { |
| | | isBack9 = false; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | return false; |
| | |
| | | //SocketManager.getInstance().disconnect(); |
| | | //SocketManager.getInstance().stopServer(); |
| | | //socketManager.stopServer(); // 停止服务器 |
| | | // 移除定时任务,避免内存泄漏 |
| | | handler.removeCallbacksAndMessages(null); |
| | | } |
| | | |
| | | public static void upClient(AGVCar agvCar) { |
| | | clientId = agvCar.getClientId(); |
| | | AgvNo = agvCar.getAgvNo(); |
| | | agvBattery.setText("电量:" + agvCar.getBattery() + "%"); |
| | | // updateAgvBatteryText("电量:" + agvCar.getBattery() + "%"); |
| | | } |
| | | |
| | | private static void updateAgvBatteryText(String batteryLevel) { |
| | | if (agvBattery != null) { |
| | | agvBattery.setText(batteryLevel); |
| | | } |
| | | } |
| | | |
| | | // EventBus 订阅方法:接收日志字符串 |
| | | @Subscribe(threadMode = ThreadMode.MAIN) |
| | | public void onLogMessageReceived(String logMessage) { |
| | | addLog(logMessage); |
| | | } |
| | | // 方法:更新最近的日志显示 |
| | | public static void updateRecentLogTextView() { |
| | | mainHandler.post(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | StringBuilder logBuilder = new StringBuilder(); |
| | | int start = Math.max(0, logList.size() - MAX_RECENT_LOGS); |
| | | for (int i = start; i < logList.size(); i++) { |
| | | logBuilder.append(logList.get(i)).append("\n"); |
| | | } |
| | | recentLogTextView.setText(logBuilder.toString()); |
| | | } |
| | | }); |
| | | } |
| | | // 静态方法:添加日志 |
| | | public static void addLog(String log) { |
| | | logList.add(log); |
| | | updateRecentLogTextView(); |
| | | } |
| | | |
| | | // 方法:启动 LogActivity 并传递日志数据 |
| | | private void showAllLogsActivity() { |
| | | Intent intent = new Intent(this, LogActivity.class); |
| | | intent.putStringArrayListExtra("log_list", new ArrayList<>(logList)); |
| | | startActivity(intent); |
| | | } |
| | | } |