Skip to content

Commit

Permalink
feat: async init and connect
Browse files Browse the repository at this point in the history
  • Loading branch information
DIY0R committed Dec 13, 2024
1 parent 604bc66 commit e9ecf84
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 16 deletions.
5 changes: 4 additions & 1 deletion index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
const Messaging = require('./lib/messaging');
const constants = require('./lib/constants');

module.exports = { ClapPeer: Messaging, ...constants };
module.exports = {
ClapPeer: (...params) => new Messaging(...params),
...constants,
};
33 changes: 23 additions & 10 deletions lib/connection.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,22 @@ const { EVENTS, ERRORS } = require('./constants');

class Connection extends EventEmitter {
#connections = new Map();

constructor(port, targetNode) {
_fulfill = null;
_reject = null;
_started = false;
port = 0;
constructor() {
super();
this.#start(port, targetNode);
}

connect(targetNode) {
const socket = new net.Socket();
socket.connect(targetNode, () => this.#handleConnection(socket));
return new Promise(resolve => {
const socket = new net.Socket();
socket.connect(targetNode, () => {
this.#handleConnection(socket);
resolve();
});
});
}

#handleConnection(socket) {
Expand All @@ -37,9 +44,10 @@ class Connection extends EventEmitter {

close() {
for (let [connectionId, socket] of this.#connections) {
socket.close();
if (!socket.destroyed) socket.destroy();
this.#deleteConnection(connectionId);
}
this.#connections.clear();
}

#deleteConnection(connectionId) {
Expand All @@ -56,10 +64,15 @@ class Connection extends EventEmitter {
this._onMessage(connectionId, message);
}

#start(port, targetNode = null) {
const server = net.createServer(this.#handleConnection.bind(this));
server.listen(port, '0.0.0.0');
if (targetNode) this.connect(targetNode);
_serverStart(port, targetNode = null) {
return new Promise((resolve, reject) => {
const server = net.createServer(this.#handleConnection.bind(this));
server.listen(port, '0.0.0.0', () => {
this.port = server.address().port;
targetNode ? this.connect(targetNode).then(resolve, reject) : resolve();
});
server.on('error', error => reject(error));
});
}

#errorHandler(error) {
Expand Down
4 changes: 2 additions & 2 deletions lib/cryptoRsa.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ class CryptoRSA extends Connection {
#responseEmitter = new EventEmitter();
_nodePublicKeys = new Map();

constructor(port, targetNode) {
super(port, targetNode);
constructor() {
super();
this.#init();
}

Expand Down
8 changes: 5 additions & 3 deletions lib/messaging.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ class Messaging extends CryptoRSA {
neighbors = new Map();

constructor(port, nodePrefix, targetNode) {
super(port, targetNode);
this.#init(nodePrefix);
super();
return this.#init(nodePrefix, port, targetNode);
}

async publish(targetNode, message) {
Expand Down Expand Up @@ -124,9 +124,11 @@ class Messaging extends CryptoRSA {
return ttl < 1 || this.#seenMessages.has(messageId);
}

#init(nodePrefix) {
async #init(nodePrefix, port, targetNode) {
if (nodePrefix) this.#NODE_ID = nodePrefix + '-' + uuid();
this.#cleanSeenMessages();
await this._serverStart(port, targetNode);
return this;
}

#addSeenMessage(messageId) {
Expand Down

0 comments on commit e9ecf84

Please sign in to comment.