2.0.x fixes
This commit is contained in:
@@ -39,21 +39,21 @@ export default class connection {
|
||||
this.host_or_ip,
|
||||
(err) => {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
console.error(err);
|
||||
return reject(err);
|
||||
}
|
||||
|
||||
this.reject = reject;
|
||||
this.resolve = resolve;
|
||||
|
||||
this.connected = true;
|
||||
this.setup_socket();
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (err) {
|
||||
return Promise.reject(new Error(`'connect()' failed: ${err}`));
|
||||
}
|
||||
|
||||
this.connected = true;
|
||||
this.setup_socket();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,6 +88,7 @@ export default class connection {
|
||||
};
|
||||
};
|
||||
|
||||
this.buffer = null;
|
||||
const response = new packet(this.password);
|
||||
response.buffer = new Uint8Array(packet_data);
|
||||
response
|
||||
@@ -100,7 +101,7 @@ export default class connection {
|
||||
}
|
||||
})
|
||||
.catch((e) => {
|
||||
console.log(e);
|
||||
console.error(e);
|
||||
const { reject } = complete();
|
||||
if (reject) {
|
||||
reject(e);
|
||||
@@ -118,7 +119,7 @@ export default class connection {
|
||||
cleanup();
|
||||
|
||||
this.connected = false;
|
||||
console.log(e);
|
||||
console.error(e);
|
||||
if (reject) {
|
||||
reject(e);
|
||||
}
|
||||
@@ -132,7 +133,7 @@ export default class connection {
|
||||
cleanup();
|
||||
|
||||
this.connected = false;
|
||||
console.log('socket closed');
|
||||
console.warn('socket closed');
|
||||
if (reject) {
|
||||
reject(new Error('socket closed'));
|
||||
}
|
||||
@@ -149,7 +150,7 @@ export default class connection {
|
||||
this.connected = false;
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -160,7 +161,7 @@ export default class connection {
|
||||
packet.encode_top_utf8(constants.instance_id);
|
||||
packet.encode_top_ui32(0); // Service flags
|
||||
packet.encode_top_utf8(constants.get_version());
|
||||
packet.encode_top_utf8(nonce);
|
||||
packet.encode_top_utf8(this.nonce);
|
||||
await packet.encrypt();
|
||||
packet.encode_top_ui32(packet.buffer.length);
|
||||
return new Promise((resolve, reject) => {
|
||||
|
||||
@@ -1,69 +0,0 @@
|
||||
import Pool from 'socket-pool';
|
||||
|
||||
import connection from './connection';
|
||||
|
||||
export default class connection_pool {
|
||||
constructor(pool_size, host_or_ip, port, password) {
|
||||
this.host_or_ip = host_or_ip;
|
||||
this.port = port;
|
||||
this.password = password;
|
||||
if (pool_size > 1) {
|
||||
this.pool = new Pool({
|
||||
connect: { host: host_or_ip, port: port },
|
||||
connectTimeout: 5000,
|
||||
pool: { max: pool_size, min: 2 },
|
||||
});
|
||||
} else {
|
||||
throw new Error("'pool_size' must be > 1");
|
||||
}
|
||||
}
|
||||
|
||||
host_or_ip = '';
|
||||
next_thread_id = 1;
|
||||
password = '';
|
||||
port = 20000;
|
||||
pool;
|
||||
shutdown = false;
|
||||
|
||||
async disconnect() {
|
||||
await this.pool._pool.drain();
|
||||
await this.pool._pool.clear();
|
||||
this.pool = null;
|
||||
this.shutdown = true;
|
||||
}
|
||||
|
||||
async send(method_name, packet, optional_thread_id) {
|
||||
try {
|
||||
const socket = await this.pool.acquire();
|
||||
if (!socket.thread_id) {
|
||||
socket.thread_id = this.next_thread_id++;
|
||||
}
|
||||
|
||||
const cleanup = () => {
|
||||
try {
|
||||
socket.release();
|
||||
} catch (err) {
|
||||
console.log(`'release()' failed: ${err}`);
|
||||
}
|
||||
};
|
||||
|
||||
try {
|
||||
const result = await new connection(
|
||||
this.host_or_ip,
|
||||
this.port,
|
||||
this.password,
|
||||
socket
|
||||
).send(method_name, packet, optional_thread_id || socket.thread_id);
|
||||
cleanup();
|
||||
return result;
|
||||
} catch (err) {
|
||||
cleanup();
|
||||
return Promise.reject(
|
||||
new Error(`'send(${method_name})' failed: ${err}`)
|
||||
);
|
||||
}
|
||||
} catch (err) {
|
||||
return Promise.reject(new Error(`'acquire()' socket failed: ${err}`));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
import { randomBytes } from 'crypto';
|
||||
import { Int64BE, Uint64BE } from 'int64-buffer';
|
||||
import crypto from 'crypto';
|
||||
import blake2 from 'blake2';
|
||||
import { TextEncoder } from 'text-encoding';
|
||||
import { getCustomEncryption } from '../utils/constants';
|
||||
import {
|
||||
@@ -156,7 +156,7 @@ export default class packet {
|
||||
|
||||
decrypt = async () => {
|
||||
try {
|
||||
let hash = crypto.createHash('sha256');
|
||||
let hash = blake2.createHash('blake2b', { digestLength: 32 });
|
||||
hash = hash.update(new TextEncoder().encode(this.token));
|
||||
|
||||
const key = Uint8Array.from(hash.digest());
|
||||
@@ -282,7 +282,7 @@ export default class packet {
|
||||
|
||||
encrypt = async (nonce) => {
|
||||
try {
|
||||
let hash = crypto.createHash('sha256');
|
||||
let hash = blake2.createHash('blake2b', { digestLength: 32 });
|
||||
hash = hash.update(new TextEncoder().encode(this.token));
|
||||
|
||||
const key = Uint8Array.from(hash.digest());
|
||||
|
||||
Reference in New Issue
Block a user