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