mirror of
https://github.com/fluencelabs/dweb-transports
synced 2025-04-25 06:42:17 +00:00
IPFS: Dont stop it if we didn't start it
This commit is contained in:
parent
3731663451
commit
5ef753c328
@ -129,3 +129,4 @@ See [Dweb document index](./DOCUMENTINDEX.md) for a list of the repos that make
|
|||||||
* 0.1.33: Bug fixes; support for gatewayUrls (for dweb-mirror)
|
* 0.1.33: Bug fixes; support for gatewayUrls (for dweb-mirror)
|
||||||
* 0.1.35: package update (note wont work with latest versions of yjs or uglify)
|
* 0.1.35: package update (note wont work with latest versions of yjs or uglify)
|
||||||
* 0.1.36: Made httptools accessable at Transports.httptools so it doesnt have to be separately 'require'd
|
* 0.1.36: Made httptools accessable at Transports.httptools so it doesnt have to be separately 'require'd
|
||||||
|
* unreleased: IPFS - dont stop it if we didnt start it (were stopping via API)
|
||||||
|
@ -72,9 +72,11 @@ class TransportIPFS extends Transport {
|
|||||||
ipfs.version((err, data) => {
|
ipfs.version((err, data) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
debug("IPFS via %s present but unresponsive: %o", s, data);
|
debug("IPFS via %s present but unresponsive: %o", s, data);
|
||||||
|
this.ipfstype = "FAILED";
|
||||||
cb(err);
|
cb(err);
|
||||||
} else {
|
} else {
|
||||||
debug("IPFS available via %s: %o", s, data);
|
debug("IPFS available via %s: %o", s, data);
|
||||||
|
this.ipfstype = s;
|
||||||
cb(null, ipfs);
|
cb(null, ipfs);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -99,6 +101,7 @@ class TransportIPFS extends Transport {
|
|||||||
cb(err);
|
cb(err);
|
||||||
}) // This only works in the client version, not on API
|
}) // This only works in the client version, not on API
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
this._ipfsversion(ipfs, "API", cb); // Note wastes an extra ipfs.version call but that's cheap
|
this._ipfsversion(ipfs, "API", cb); // Note wastes an extra ipfs.version call but that's cheap
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -140,37 +143,47 @@ class TransportIPFS extends Transport {
|
|||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
async p_setup1(cb) {
|
p_setup1(cbstatus, cb) {
|
||||||
// cb is function for updating status, it must be ale to be called multiple times.
|
/* Start IPFS connection
|
||||||
try {
|
cbstatus function(this), for updating status, it must be ale to be called multiple times.
|
||||||
|
returns this via cb(err,res) or promise
|
||||||
|
errors Multiple are possible, including websocket errors
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (cb) { try { f.call(this, cb) } catch(err) { cb(err)}} else { return new Promise((resolve, reject) => { try { f.call(this, (err, res) => { if (err) {reject(err)} else {resolve(res)} })} catch(err) {reject(err)}})} // Promisify pattern v2
|
||||||
|
function f(cb) {
|
||||||
// Logged by Transports
|
// Logged by Transports
|
||||||
this.status = Transport.STATUS_STARTING; // Should display, but probably not refreshed in most case
|
this.status = Transport.STATUS_STARTING; // Should display, but probably not refreshed in most case
|
||||||
if (cb) cb(this);
|
if (cbstatus) cbstatus(this);
|
||||||
|
this.IPFSAutoConnect((err, ipfs) => { // Various errors possible inc websocket
|
||||||
this.ipfs = await new Promise((resolve, reject) => {
|
if (err) {
|
||||||
this.IPFSAutoConnect((err, data) => {
|
debug("Failed to connect");
|
||||||
if (err) { reject(err); } else { resolve(data); } // Various errors possible inc websocket
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
this.status = Transport.STATUS_CONNECTED; // p_status doesnt work on HTTP API - errors should be caught below anyway. await this.p_status();
|
|
||||||
} catch(err) {
|
|
||||||
// Logged by Transports
|
|
||||||
console.error(this.name, "failed to connect", err);
|
|
||||||
this.status = Transport.STATUS_FAILED;
|
this.status = Transport.STATUS_FAILED;
|
||||||
// Dont throw an error, allow other transports to complete setup
|
} else {
|
||||||
|
this.ipfs = ipfs;
|
||||||
|
this.status = Transport.STATUS_CONNECTED;
|
||||||
|
}
|
||||||
|
if (cbstatus) cbstatus(this);
|
||||||
|
cb(err, this); // May or may not be err
|
||||||
|
})
|
||||||
}
|
}
|
||||||
if (cb) cb(this);
|
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
p_stop(refreshstatus) {
|
p_stop(refreshstatus) {
|
||||||
return new Promise((resolve, reject) =>
|
return new Promise((resolve, reject) => {
|
||||||
|
if (this.ipfstype === "client") {
|
||||||
this.ipfs.stop((err, res) => {
|
this.ipfs.stop((err, res) => {
|
||||||
this.status = Transport.STATUS_FAILED;
|
this.status = Transport.STATUS_FAILED;
|
||||||
if (refreshstatus) refreshstatus(this);
|
if (refreshstatus) refreshstatus(this);
|
||||||
if (err) { reject(err); } else { resolve(res); }
|
if (err) { reject(err); } else { resolve(res); }
|
||||||
}));
|
});
|
||||||
|
} else {
|
||||||
|
// We didn't start it, don't try and stop it
|
||||||
|
this.status = Transport.STATUS_FAILED;
|
||||||
|
if (refreshstatus) refreshstatus(this);
|
||||||
|
resolve(this);
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
async p_status() {
|
async p_status() {
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user