package com.basic.security.manager;
|
|
import android.os.SystemClock;
|
import android.text.TextUtils;
|
|
import com.basic.security.base.BaseApplication;
|
import com.basic.security.utils.ExceptionUtil;
|
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<String, String> 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) {
|
ExceptionUtil.printException(e);
|
} 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) {
|
ExceptionUtil.printException(e);
|
}
|
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) {
|
ExceptionUtil.printException(e);
|
} 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() {
|
BaseApplication.getApplication().executorService.execute(() -> {
|
while (true) {
|
try {
|
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();
|
} 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.receiveBroadcastJ((char) 4445);
|
if (nodeName.contains("@")) {
|
String deviceId = nodeName.split("@", -1)[0];
|
String deviceIp = nodeName.split("@", -1)[1];
|
setNodeName(deviceId, nodeName);
|
}
|
} catch (Exception e) {
|
ExceptionUtil.printException(e);
|
}
|
}
|
});
|
}
|
}
|