细节修改
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user