细节修改

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;
}
}

View File

@@ -19,7 +19,7 @@ MonoBehaviour:
width: 2560
height: 989
m_ShowMode: 4
m_Title: "\u9879\u76EE"
m_Title: "\u63A7\u5236\u53F0"
m_RootView: {fileID: 2}
m_MinSize: {x: 875, y: 300}
m_MaxSize: {x: 10000, y: 10000}
@@ -145,7 +145,7 @@ MonoBehaviour:
m_MinSize: {x: 300, y: 100}
m_MaxSize: {x: 24288, y: 16192}
vertical: 1
controlID: 51
controlID: 75
draggingID: 0
--- !u!114 &7
MonoBehaviour:
@@ -265,7 +265,7 @@ MonoBehaviour:
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
m_Name: ProjectBrowser
m_Name: ConsoleWindow
m_EditorClassIdentifier:
m_Children: []
m_Position:
@@ -274,16 +274,16 @@ MonoBehaviour:
y: 513
width: 2010
height: 426
m_MinSize: {x: 231, y: 271}
m_MaxSize: {x: 10001, y: 10021}
m_ActualView: {fileID: 19}
m_MinSize: {x: 101, y: 121}
m_MaxSize: {x: 4001, y: 4021}
m_ActualView: {fileID: 20}
m_Panes:
- {fileID: 19}
- {fileID: 20}
- {fileID: 21}
- {fileID: 22}
m_Selected: 0
m_LastSelected: 1
m_Selected: 1
m_LastSelected: 0
--- !u!114 &12
MonoBehaviour:
m_ObjectHideFlags: 52
@@ -447,7 +447,7 @@ MonoBehaviour:
m_SceneHierarchy:
m_TreeViewState:
scrollPos: {x: 0, y: 0}
m_SelectedIDs: d4580000
m_SelectedIDs:
m_LastClickedID: 0
m_ExpandedIDs: 12fbffff
m_RenameOverlay:
@@ -4439,7 +4439,7 @@ MonoBehaviour:
m_ListAreaState:
m_SelectedInstanceIDs:
m_LastClickedInstanceID: 0
m_HadKeyboardFocusLastEvent: 1
m_HadKeyboardFocusLastEvent: 0
m_ExpandedInstanceIDs: c623000040c000003ccd00005ccc0000f8cb0000d0cb0000e4cb000098cc000048cc000020cc000084cc0000fccc0000e8cc000034cc000028cd0000d4cc0000accc00003ec70000c8c600003ee1000078e0000002e1000004ef000090ef0000dae00000f6ee000054be0000bebe000048be00000a9500008ec90000b0c6000034d50000d4ab0000d2ab0000c4ab0000f8e2000078b500006aba000016ba000066080100a02b0100a22b010042e30000b8e30000e0e30000c0e40000c4bf0000d2e100000000000016c2000090200100ca8b0100c08b01004c920000
m_RenameOverlay:
m_UserAcceptedRename: 0