Как отправить идентификатор транспорта с устройства на клиент и использовать его для подключения ADB?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как отправить идентификатор транспорта с устройства на клиент и использовать его для подключения ADB?

Сообщение Anonymous »

В настоящее время я работаю над проектом по подключению устройств Android к веб-клиенту через Node.js и WebSocket, Tango ADB. Я могу составить список подключенных устройств с помощью AdbServerClient и получить идентификатор транспорта определенного устройства. Теперь я хочу отправить этот идентификатор транспорта с сервера клиенту через WebSocket, чтобы клиент мог использовать его для установления соединения ADB с устройством. Идентификатор транспорта — это тип данных bigint, поэтому возникает ошибка TypeError: Не знаю, как сериализовать BigInt, в нем отсутствует буква n. Как передать его клиенту? Если есть возможность, можно ли создать adb в клиенте? Пожалуйста!! помогите мне!! диаграмма: клиент(реакция) -->sever(socket)-->sidecar(nodejs)-->устройство

bigint

строка
клиент:
const [loading, setLoading] = useState(false);
const [deviceInfo, setDeviceInfo] = useState([]);
const [transport, setTransport] = useState(null);
const [error, setError] = useState(null);
const socket = io("http://localhost:8080", {
auth: {
token: "user",
},
query: {
deviceId: "user",
},
});

const getDevices = async () => {
setLoading(true);
setError(null);
try {
socket.emit("request", { clientId: "user" });
console.log("socket :>> ", socket);
socket.on("transportAndDeviceToFrontend", (data) => {
console.log("data :>> ", data);
const device = {
...data.device,
transportId: BigInt(data.device.transportId),
};
setDeviceInfo([device]);
setTransport(data.transport);
setLoading(false);
});
console.log("receivedDevices :>> ", devices);
} catch (err) {
setError("Failed to load devices. Please try again.");
console.log(error);
setLoading(false);
}
};

return (


{loading ? "Loading..." : "Get Device Transport"}


{error && {error}}

{deviceInfo.length > 0 && (

Device Information
{deviceInfo.map((device, index) => (

Serial: {device.serial}
Model: {device.model || "N/A"}
Product: {device.product || "N/A"}
Transport ID: {device.transportId.toString()}

))}

)}

{transport && (

{loading ? "Connecting..." : "Connect to Device"}

)}

);

сокет:
@SubscribeMessage('sendTransportAndDevice')
handleDevice(@MessageBody() data: any) {
console.log(`Received device:`, data);
this.server
.to(data.clientId)
.emit('transportAndDeviceToFrontend', {
device: data.device,
transport: data.transportId,
});
}

@SubscribeMessage('request')
sendRequest(@MessageBody() data: any) {
console.log(' :>> ', data);
this.server.to('device').emit('sendRequest', data);
}

коляска:
const main = async () => {
const deviceId = process.env.DEVICE_ID || "123";
const socketUrl = process.env.SOCKET_URL || "ws://localhost:8080";
const socket = io(socketUrl, {
auth: {
token: "device",
},
query: {
deviceId: deviceId,
},
});

socket.on("connect", async () => {
console.log("Connected Socket");
});

socket.on("sendRequest", async (data: any) => {
try {
const devices: AdbServerClient.Device[] = await getTransport();
log("devices :>> ", devices);
if (devices.length > 0) {
const client = new AdbServerClient(
new AdbServerNodeTcpConnector({ host: "127.0.0.1", port: 5037 })
);
const transport = await client.createTransport(devices[0]);
log("transport :>> ", transport);

const originalConnect = transport.connect;
transport.connect = async (service) => {
const adbSocket = await originalConnect.call(transport, service); //connect adb vs device
const writer = adbSocket.writable.getWriter(); // ghi dữ liệu vào adbSocket

adbSocket.readable = adbSocket.readable.pipeThrough(
new TransformStream({
async transform(chunk, controller) {
if (
decodeUtf8(chunk).includes("please input verify password:")
) {
await writer.write(encodeUtf8("adb36987\n"));
return;
}
controller.enqueue(chunk);
},
})
);

adbSocket.writable = new WritableStream({
write(chunk) {
return writer.write(chunk);
},
close() {
return writer.close();
},
abort() {
return writer.abort();
},
});

return adbSocket;
};

const { transportId, ...transportData } = transport;
socket.emit("sendTransportAndDevice", {
clientId: data.clientId,
device: {
...devices[0],
transportId: devices[0].transportId,
},
log: "Connected to device11",
});
log("Connected to device 2");
}
} catch (e) {
console.error("Error creating transport:", e);
socket.emit("error", {
message: "Failed to create transport",
clientId: data.clientId,
});
}
});


Подробнее здесь: https://stackoverflow.com/questions/793 ... connection
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»