package com.basic.security.manager; import android.os.SystemClock; import android.text.TextUtils; import com.basic.security.base.BaseApplication; import com.basic.security.utils.FaceId; import com.basic.security.utils.IpUtils; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.HashMap; import java.util.Map; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class NodeNameManager { static Map deviceIdNodeNameMap = new HashMap<>(); static Lock lock = new ReentrantLock(); static DatagramSocket receiveSocket = null; public static void start() { sendNodeName(); receiveNodeName(); } public static String getNodeNameByDeviceId(String deviceId) { try { lock.lock(); return deviceIdNodeNameMap.get(deviceId); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } return ""; } public static String getIp(String node) { try { if (node.contains("@")) { String[] parts = node.split("@"); if (parts.length == 2) { return parts[1]; } } } catch (Exception e) { e.printStackTrace(); } return ""; } public static String getNodeNameByNodeName(String nodeName) { try { lock.lock(); if (nodeName.contains("@")) { String deviceId = nodeName.split("@")[0]; String newNodeName = deviceIdNodeNameMap.get(deviceId); if (!TextUtils.isEmpty(newNodeName)) { return newNodeName; } } } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } return nodeName; } public static void setNodeName(String deviceId, String nodeName) { try { lock.lock(); deviceIdNodeNameMap.put(deviceId, nodeName); } finally { lock.unlock(); } } public static void sendNodeName() { // System1.out.println("NodeNameManager.sendNodeName 1"); BaseApplication.getApplication().executorService.execute(() -> { while (true) { try { // System1.out.println("NodeNameManager.sendNodeName 2"); SystemClock.sleep(5 * 1000); DatagramSocket sendSocket = new DatagramSocket(); sendSocket.setBroadcast(true); String msg = (DeviceManager.getDeviceId() + "@" + IpUtils.getIpAddress(BaseApplication.getApplication())); byte[] buffer = msg.getBytes(); DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("255.255.255.255"), 4445); sendSocket.send(packet); sendSocket.close(); // System1.out.println("NodeNameManager.sendNodeName msg="+msg); } catch (Exception e) { System1.out.println("NodeNameManager.sendNodeName " + e.getMessage()); } } }); } public static void receiveNodeName() { BaseApplication.getApplication().executorService.execute(() -> { while (true) { try { String nodeName = FaceId.instance.receiveBroadcast((char) 4445); if (nodeName.contains("@")) { String deviceId = nodeName.split("@", -1)[0]; String deviceIp = nodeName.split("@", -1)[1]; setNodeName(deviceId, nodeName); // System1.out.println("NodeNameManager.receiveNodeName msg="+nodeName); } } catch (Exception e) { e.printStackTrace(); } } }); } }