细节修改

This commit is contained in:
2025-08-08 18:35:37 +08:00
parent 952319dab2
commit 7ca80bb1ab
2 changed files with 75 additions and 30 deletions

View File

@@ -66,6 +66,8 @@ public class Main extends Service {
private String packageNames = "{}";
private static DeviceInfo deviceInfo = new DeviceInfo("未知序列号", "0%", 0, "未知游戏");
// ================= 会话状态类 =================
private static class SessionState {
int expectedSequence = 0; // 该会话的下一个期望序列号
@@ -101,6 +103,21 @@ public class Main extends Service {
}
}
// ================= 设备信息类 =================
private static class DeviceInfo {
String sn;
String power;
int status; // 0: 离线 1: 在线 2: 游玩中
String playing;
DeviceInfo(String sn, String power, int status, String playing) {
this.sn = sn;
this.power = power;
this.status = status;
this.playing = playing;
}
}
// ================= 服务生命周期 =================
@Override
public IBinder onBind(Intent intent) {
@@ -432,7 +449,7 @@ public class Main extends Service {
Log.i(TAG, "执行获取所有包信息");
getInstalledPackages();
String escapedPackageNames = packageNames.replace("\"", "\\\""); // 转义引号
String jsonData = "{\"intent\":\"PackageInfos\",\"data\":\"" + escapedPackageNames + "\"}";
String jsonData = "{\"intent\":\"packageInfos\",\"data\":\"" + escapedPackageNames + "\"}";
sendReliable(senderAddress, 8888, jsonData);
} else if ("playing".equals(intent)) {
String name = jsonMsg.optString("name");
@@ -454,7 +471,7 @@ public class Main extends Service {
Log.i(TAG, "执行获取所有包信息");
getInstalledPackages();
String escapedPackageNames = packageNames.replace("\"", "\\\""); // 转义引号
String jsonData = "{\"intent\":\"PackageInfos\",\"data\":\"" + escapedPackageNames + "\"}";
String jsonData = "{\"intent\":\"packageInfos\",\"data\":\"" + escapedPackageNames + "\"}";
sendReliable(senderAddress, 8888, jsonData);
} else {
Log.w(TAG, "未知的简单指令: " + message);
@@ -486,6 +503,26 @@ public class Main extends Service {
});
}
// 非可靠发送方法
private void sendUnreliable(InetAddress targetAddress, int targetPort, String message) {
// 不向本机相同端口发送消息
if (isLocalMessage(targetAddress, targetPort)) {
return;
}
networkExecutor.execute(() -> {
try {
byte[] data = message.getBytes();
DatagramPacket packet = new DatagramPacket(
data, data.length, targetAddress, targetPort);
udpSocket.send(packet);
Log.i(TAG, "发送普通消息 内容=" + message);
} catch (Exception e) {
Log.e(TAG, "发送普通消息失败: " + e.getMessage());
}
});
}
// 可靠发送方法
private void sendReliable(InetAddress targetAddress, int targetPort, String message) {
// 不向本机相同端口发送消息
@@ -530,21 +567,13 @@ public class Main extends Service {
}
if ("DISCOVER".equals(message)) {
String sn = Main.sn;
String power = Main.power;
String jsonResponse = String.format("{\"SN\":\"%s\",\"Power\":\"%s\"}", sn, power);
// 更新设备状态为在线
deviceInfo.status = 1;
networkExecutor.execute(() -> {
try {
byte[] response = jsonResponse.getBytes();
DatagramPacket responsePacket = new DatagramPacket(
response, response.length, senderAddress, senderPort);
udpSocket.send(responsePacket);
Log.i(TAG, "发送DISCOVER响应");
} catch (Exception e) {
Log.e(TAG, "发送DISCOVER响应失败: " + e.getMessage());
}
});
// 获取设备信息的JSON表示
String jsonResponse = getDeviceInfoAsJson();
sendUnreliable(senderAddress, senderPort, jsonResponse);
}
}
@@ -621,14 +650,30 @@ public class Main extends Service {
}
}
private static String sn = "未知";
private static String power = "0%";
private String getDeviceInfoAsJson() {
try {
org.json.JSONObject data = new org.json.JSONObject();
data.put("sn", deviceInfo.sn);
data.put("power", deviceInfo.power);
data.put("status", deviceInfo.status);
data.put("playing", deviceInfo.playing);
org.json.JSONObject json = new org.json.JSONObject();
json.put("intent", "updateDeviceInfo");
json.put("data", "\"" + data + "\"");
return json.toString();
} catch (org.json.JSONException e) {
Log.e(TAG, "序列化设备信息失败: " + e.getMessage());
return "{}";
}
}
public static void setSnFromUnity(String sn) {
Main.sn = sn;
deviceInfo.sn = sn;
}
public static void setPowerFromUnity(String power) {
Main.power = power;
deviceInfo.power = power;
}
}