Fix some bugs, write some comments
This commit is contained in:
parent
046821f0ac
commit
19f2003fbf
7 changed files with 55 additions and 9 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,4 +1,6 @@
|
||||||
/target
|
/target
|
||||||
|
config/
|
||||||
|
|
||||||
|
|
||||||
# Created by https://www.toptal.com/developers/gitignore/api/rust,git
|
# Created by https://www.toptal.com/developers/gitignore/api/rust,git
|
||||||
# Edit at https://www.toptal.com/developers/gitignore?templates=rust,git
|
# Edit at https://www.toptal.com/developers/gitignore?templates=rust,git
|
||||||
|
|
11
package-lock.json
generated
11
package-lock.json
generated
|
@ -9,6 +9,7 @@
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@ltd/j-toml": "^1.24.0",
|
||||||
"applause-cli": "^1.7.0",
|
"applause-cli": "^1.7.0",
|
||||||
"jpake": "^1.0.1",
|
"jpake": "^1.0.1",
|
||||||
"log": "^6.2.0",
|
"log": "^6.2.0",
|
||||||
|
@ -20,6 +21,11 @@
|
||||||
"tweetnacl": "^1.0.3"
|
"tweetnacl": "^1.0.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@ltd/j-toml": {
|
||||||
|
"version": "1.24.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@ltd/j-toml/-/j-toml-1.24.0.tgz",
|
||||||
|
"integrity": "sha512-XWEvSNLJ2YeCvlNDd/DQfTMldJqBZWX8+RKgPMY2i3MShqsB9XvtY2UfHqcuPb+eRrNO1WR7w4xlNfzCzop+Ig=="
|
||||||
|
},
|
||||||
"node_modules/@types/crypto-js": {
|
"node_modules/@types/crypto-js": {
|
||||||
"version": "4.0.2",
|
"version": "4.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.0.2.tgz",
|
||||||
|
@ -481,6 +487,11 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@ltd/j-toml": {
|
||||||
|
"version": "1.24.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@ltd/j-toml/-/j-toml-1.24.0.tgz",
|
||||||
|
"integrity": "sha512-XWEvSNLJ2YeCvlNDd/DQfTMldJqBZWX8+RKgPMY2i3MShqsB9XvtY2UfHqcuPb+eRrNO1WR7w4xlNfzCzop+Ig=="
|
||||||
|
},
|
||||||
"@types/crypto-js": {
|
"@types/crypto-js": {
|
||||||
"version": "4.0.2",
|
"version": "4.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.0.2.tgz",
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/sbrl/systemquery#readme",
|
"homepage": "https://github.com/sbrl/systemquery#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@ltd/j-toml": "^1.24.0",
|
||||||
"applause-cli": "^1.7.0",
|
"applause-cli": "^1.7.0",
|
||||||
"jpake": "^1.0.1",
|
"jpake": "^1.0.1",
|
||||||
"log": "^6.2.0",
|
"log": "^6.2.0",
|
||||||
|
|
|
@ -3,9 +3,11 @@
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
|
|
||||||
import log from 'log'; const l = log.get("Agent");
|
import log from 'log'; const l = log.get("agent");
|
||||||
import systeminfo from 'systeminformation';
|
import systeminfo from 'systeminformation';
|
||||||
|
|
||||||
|
import settings from '../../settings.mjs';
|
||||||
|
|
||||||
import PeerServer from './PeerServer.mjs';
|
import PeerServer from './PeerServer.mjs';
|
||||||
import hash from '../crypto/hash.mjs';
|
import hash from '../crypto/hash.mjs';
|
||||||
import parse_peer_name from '../parse/peer_name.mjs';
|
import parse_peer_name from '../parse/peer_name.mjs';
|
||||||
|
@ -18,7 +20,12 @@ class Agent {
|
||||||
async find_secret() {
|
async find_secret() {
|
||||||
if(this.config.secret_join_filepath !== "CHANGE_ME"
|
if(this.config.secret_join_filepath !== "CHANGE_ME"
|
||||||
&& fs.existsSync(this.config.secret_join_filepath))
|
&& fs.existsSync(this.config.secret_join_filepath))
|
||||||
return await fs.promises.readFile(this.config.secret_join_filepath, "utf-8");
|
return await fs.promises.readFile(
|
||||||
|
path.resolve(
|
||||||
|
path.dirname(settings.cli.config),
|
||||||
|
this.config.secret_join_filepath
|
||||||
|
),
|
||||||
|
"utf-8");
|
||||||
|
|
||||||
if(this.config.secret_join !== "CHANGE_ME")
|
if(this.config.secret_join !== "CHANGE_ME")
|
||||||
return this.config.secret_join;
|
return this.config.secret_join;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
import { EventEmitter, once } from 'events';
|
import { EventEmitter, once } from 'events';
|
||||||
|
|
||||||
import log from 'log'; const l = log.get("Peer");
|
import log from 'log'; const l = log.get("peer");
|
||||||
|
|
||||||
import Connection from '../transport/Connection.mjs';
|
import Connection from '../transport/Connection.mjs';
|
||||||
|
|
||||||
|
@ -52,7 +52,8 @@ class Peer extends EventEmitter {
|
||||||
async __accept(connection) {
|
async __accept(connection) {
|
||||||
this.connection = connection;
|
this.connection = connection;
|
||||||
const [ msg ] = await once(this.connection, "message-hello");
|
const [ msg ] = await once(this.connection, "message-hello");
|
||||||
this.__handle_hello(msg);
|
if(!this.__handle_hello(msg))
|
||||||
|
await this.destroy();
|
||||||
|
|
||||||
this.emit("connect");
|
this.emit("connect");
|
||||||
}
|
}
|
||||||
|
@ -64,15 +65,27 @@ class Peer extends EventEmitter {
|
||||||
async __initiate() {
|
async __initiate() {
|
||||||
await this.__send_hello();
|
await this.__send_hello();
|
||||||
const [ msg ] = await once(this.connection, "message-hello");
|
const [ msg ] = await once(this.connection, "message-hello");
|
||||||
this.__handle_hello(msg);
|
if(!this.__handle_hello(msg))
|
||||||
|
await this.destroy();
|
||||||
this.emit("connect");
|
this.emit("connect");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles a given hello messaage from this peer.
|
||||||
|
* @param {Object} msg The hello message to process.
|
||||||
|
* @return {boolean} Whether the peer should stay connected or not.
|
||||||
|
*/
|
||||||
__handle_hello(msg) {
|
__handle_hello(msg) {
|
||||||
this.id = msg.id;
|
this.id = msg.id;
|
||||||
this.known_peers = msg.peers;
|
this.known_peers = msg.peers;
|
||||||
|
if(msg.id === this.server.our_id) return false;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends a hello message to this peer.
|
||||||
|
* @return {Promise} A Promise that resolves when the sending of the message is complete.
|
||||||
|
*/
|
||||||
async __send_hello() {
|
async __send_hello() {
|
||||||
await this.send("hello", {
|
await this.send("hello", {
|
||||||
id: this.server.our_id,
|
id: this.server.our_id,
|
||||||
|
@ -80,12 +93,24 @@ class Peer extends EventEmitter {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends a message to this peer.
|
||||||
|
* @param {string} event_name The event name to attach to the message.
|
||||||
|
* @param {Object} msg The message to send. Can be of any type, but an Object is recommended for increased flexibility later down the line.
|
||||||
|
* @return {Promise} A Promise that resolves whent he message has been sent.
|
||||||
|
*/
|
||||||
async send(event_name, msg) {
|
async send(event_name, msg) {
|
||||||
await this.connection.send(event_name, msg);
|
await this.connection.send(event_name, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the connection to this peer.
|
||||||
|
* Once called, in order to reinstate the connection it's best to
|
||||||
|
* instantiate a new Peer class instance.
|
||||||
|
* @return {Promise} A Promise that resolves once the connection is closed.
|
||||||
|
*/
|
||||||
async destroy() {
|
async destroy() {
|
||||||
await this.connection.destroy();
|
await this.connection.destroy();
|
||||||
this.emit("destroy");
|
this.emit("destroy");
|
||||||
|
@ -93,14 +118,14 @@ class Peer extends EventEmitter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Peer.Initiate = function(server, address, port) {
|
Peer.Initiate = async function(server, address, port) {
|
||||||
const conn = await Connection.Create(server.secret_join, address, port);
|
const conn = await Connection.Create(server.secret_join, address, port);
|
||||||
const peer = new Peer(server, conn);
|
const peer = new Peer(server, conn);
|
||||||
await peer.__initiate();
|
await peer.__initiate();
|
||||||
return peer;
|
return peer;
|
||||||
}
|
}
|
||||||
|
|
||||||
Peer.Accept = function(server, connection) {
|
Peer.Accept = async function(server, connection) {
|
||||||
const peer = new Peer(server);
|
const peer = new Peer(server);
|
||||||
await peer.__accept(connection);
|
await peer.__accept(connection);
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import { EventEmitter, once } from 'events';
|
||||||
import net from 'net';
|
import net from 'net';
|
||||||
|
|
||||||
import p_retry from 'p-retry';
|
import p_retry from 'p-retry';
|
||||||
import log from 'log'; const l = l.get("PeerServer");
|
import log from 'log'; const l = log.get("peerserver");
|
||||||
|
|
||||||
import Connection from '../transport/Connection.mjs';
|
import Connection from '../transport/Connection.mjs';
|
||||||
import ErrorWrapper from '../core/ErrorWrapper.mjs';
|
import ErrorWrapper from '../core/ErrorWrapper.mjs';
|
||||||
|
|
|
@ -11,4 +11,4 @@ class ErrorWrapper extends Error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export ErrorWrapper;
|
export default ErrorWrapper;
|
||||||
|
|
Loading…
Reference in a new issue