remote: add reconnect and disable WIP mediaobject converter (#637)

This commit is contained in:
Brett Jia
2023-03-18 14:19:48 -04:00
committed by GitHub
parent aefe4b6849
commit 6b1794d32f
2 changed files with 20 additions and 12 deletions

View File

@@ -19,23 +19,23 @@
},
"../../packages/client": {
"name": "@scrypted/client",
"version": "1.1.39",
"version": "1.1.43",
"license": "ISC",
"dependencies": {
"@scrypted/types": "^0.2.65",
"@scrypted/types": "^0.2.76",
"axios": "^0.25.0",
"engine.io-client": "^6.2.2",
"engine.io-client": "^6.4.0",
"rimraf": "^3.0.2"
},
"devDependencies": {
"@types/ip": "^1.1.0",
"@types/node": "^17.0.17",
"typescript": "^4.7.4"
"@types/node": "^18.14.2",
"typescript": "^4.9.5"
}
},
"../../sdk": {
"name": "@scrypted/sdk",
"version": "0.2.70",
"version": "0.2.85",
"license": "ISC",
"dependencies": {
"@babel/preset-typescript": "^7.18.6",

View File

@@ -55,13 +55,17 @@ class ScryptedRemoteInstance extends ScryptedDeviceBase implements DeviceProvide
},
});
fromMimeType: string = ""
toMimeType: string = ""
constructor(nativeId: string) {
super(nativeId);
this.clearTryDiscoverDevices();
this.fromMimeType = 'x-scrypted-remote/x-media-object-' + this.id;
this.toMimeType = ScryptedMimeTypes.MediaObject;
this.toMimeType = '*';
sdk.mediaManager.addConverter(this);
}
@@ -193,9 +197,11 @@ class ScryptedRemoteInstance extends ScryptedDeviceBase implements DeviceProvide
});
this.client.onClose = () => {
this.console.log('client killed')
this.console.log('client killed, reconnecting in 60s');
setTimeout(async () => await this.clearTryDiscoverDevices(), 60000);
}
/* bjia56: since the MediaObject conversion isn't completely implemented, disable this for now
const { rpcPeer } = this.client;
const map = new WeakMap<RemoteMediaObject, MediaObject>();
rpcPeer.nameDeserializerMap.set('MediaObject', {
@@ -215,11 +221,13 @@ class ScryptedRemoteInstance extends ScryptedDeviceBase implements DeviceProvide
return rmo;
},
});
*/
this.console.log(`Connected to remote Scrypted server. Remote server version: ${this.client.serverVersion}`)
}
async convert(data: RemoteMediaObject, fromMimeType: string, toMimeType: string, options?: MediaObjectOptions): Promise<any> {
if (toMimeType === 'x-scrypted-remote/x-media-object')
if (toMimeType.startsWith('x-scrypted-remote/x-media-object'))
return data;
let ret = await this.client.mediaManager.convertMediaObject(data, toMimeType);
if (toMimeType === ScryptedMimeTypes.FFmpegInput) {
@@ -298,9 +306,9 @@ class ScryptedRemoteInstance extends ScryptedDeviceBase implements DeviceProvide
// first register the top level devices, then register the remaining
// devices by provider id
await deviceManager.onDevicesChanged(<DeviceManifest>{
devices: providerDeviceMap.get(this.nativeId),
providerNativeId: this.nativeId,
// top level devices are discovered one by one to avoid clobbering
providerDeviceMap.get(this.nativeId).map(async device => {
await deviceManager.onDeviceDiscovered(device);
});
for (let [providerNativeId, devices] of providerDeviceMap) {
await deviceManager.onDevicesChanged(<DeviceManifest>{