package com.example.agvcontroller; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.example.agvcontroller.socket.SocketManager; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.util.ArrayList; import java.util.List; public class StartActivity extends AppCompatActivity { private RecyclerView recyclerView; private List items; private ItemAdapter adapter; private Button addItem; SocketManager socketManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_start); addItem = findViewById(R.id.addbtn); addItem.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(StartActivity.this, EditeActivity.class); startActivity(intent); } }); recyclerView = findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(this)); items = new ArrayList<>(); adapter = new ItemAdapter(items); recyclerView.setAdapter(adapter); EventBus.getDefault().register(this); adapter.setmOnItemClickListener(new ItemAdapter.OnItemClickListener() { @Override public void onItemClick(View view, int position) { Context context = view.getContext(); Intent intent = new Intent(context,MainActivity.class); String ip = items.get(position).getIp(); String clientId = items.get(position).getClientId(); String agvNo = items.get(position).getAgvNo(); intent.putExtra("ip", ip); intent.putExtra("agvNo", agvNo); intent.putExtra("clientId", clientId); startActivityForResult(intent,1); } }); socketManager = new SocketManager(); socketManager.startServer(8022); } @Subscribe(threadMode = ThreadMode.MAIN) public void onDeviceConnected(Item deviceAddress) { Log.i("EventBus", "Received device connected: " + deviceAddress); if (!items.isEmpty()) { int sameIp = 0; for (Item item : items) { if (item.getIp().equals(deviceAddress.getIp())) { item.setAgvNo(deviceAddress.getAgvNo()); item.setPort(deviceAddress.getPort()); item.setClientId(deviceAddress.getClientId()); item.setStatus(deviceAddress.getStatus()); adapter.notifyItemChanged(items.indexOf(item)); MainActivity.upClient(deviceAddress.getClientId()); sameIp++; } Log.i("Item",item.getIp()); Log.i("Item",item.getClientId()); } if (sameIp == 0) { items.add(new Item(deviceAddress.getClientId() ,deviceAddress.getIp() ,deviceAddress.getPort() ,deviceAddress.getAgvNo() ,deviceAddress.getStatus())); } } else { items.add(new Item(deviceAddress.getClientId() ,deviceAddress.getIp() ,deviceAddress.getPort() ,deviceAddress.getAgvNo() ,deviceAddress.getStatus())); } adapter.notifyDataSetChanged(); } @Subscribe(threadMode = ThreadMode.MAIN) public void onDeviceDisconnected(String deviceIp) { Log.i("EventBus", "Received device disconnected: " + deviceIp); for (int i = 0; i < items.size(); i++) { if (items.get(i).getIp().equals(deviceIp)) { items.remove(i); break; } } adapter.notifyDataSetChanged(); } }