Browse Source

Merge pull request #1 from synonymdev/tcp-socket

Replace @photon-sdk/react-native-tcp with react-native-tcp-socket
get-transaction-merkle
Corey 4 years ago
committed by GitHub
parent
commit
2ad24c99d7
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 19
      helpers/index.js
  2. 6
      lib/client.js
  3. 4
      lib/electrum_client.js
  4. 12
      lib/init_socket.js
  5. 16185
      package-lock.json
  6. 9
      package.json

19
helpers/index.js

@ -78,7 +78,7 @@ const pingServer = ({ id = Math.random() } = {}) => {
//peers = A list of peers acquired from default electrum servers using the getPeers method.
//customPeers = A list of peers added by the user to connect to by default in lieu of the default peer list.
const start = ({ id = Math.random(), network = "", peers = [], customPeers = []} = {}) => {
const start = ({ id = Math.random(), network = "", peers = [], customPeers = [], net, tls} = {}) => {
const method = "connectToPeer";
return new Promise(async (resolve) => {
try {
@ -99,11 +99,12 @@ const start = ({ id = Math.random(), network = "", peers = [], customPeers = []}
//Attempt to connect to specified peer
let connectionResponse = { error: true, data: "" };
if (customPeersLength > 0) {
const { host = "", port = "", protocol = "ssl" } = customPeers[0];
connectionResponse = await connectToPeer({ host, port, protocol, network });
const { host = "", protocol = "ssl" } = customPeers[0];
const port = customPeers[0][protocol];
connectionResponse = await connectToPeer({ host, port, protocol, network, net, tls });
} else {
//Attempt to connect to random peer if none specified
connectionResponse = await connectToRandomPeer(network, peers);
connectionResponse = await connectToRandomPeer(network, peers, 'ssl', net, tls);
}
resolve({
...connectionResponse,
@ -119,7 +120,7 @@ const start = ({ id = Math.random(), network = "", peers = [], customPeers = []}
});
};
const connectToPeer = ({ port = 50002, host = "", protocol = "ssl", network = "bitcoin" } = {}) => {
const connectToPeer = ({ port = 50002, host = "", protocol = "ssl", network = "bitcoin", net, tls } = {}) => {
return new Promise(async (resolve) => {
try {
clients.network = network;
@ -134,8 +135,8 @@ const connectToPeer = ({ port = 50002, host = "", protocol = "ssl", network = "b
}
}
if (needToConnect) {
clients.mainClient[network] = new ElectrumClient(port, host, protocol);
connectionResponse = await promiseTimeout(1000, clients.mainClient[network].connect());
clients.mainClient[network] = new ElectrumClient(port, host, protocol, net, tls);
connectionResponse = await promiseTimeout(_getTimeout(), clients.mainClient[network].connect());
if (connectionResponse.error) {
return resolve(connectionResponse);
}
@ -166,7 +167,7 @@ const connectToPeer = ({ port = 50002, host = "", protocol = "ssl", network = "b
});
};
const connectToRandomPeer = async (network, peers = [], protocol = "ssl") => {
const connectToRandomPeer = async (network, peers = [], protocol = "ssl", net, tls) => {
//Peers can be found in peers.json.
//Additional Peers can be located here in servers.json & servers_testnet.json for reference: https://github.com/spesmilo/electrum/tree/master/electrum
let hasPeers = false;
@ -202,7 +203,7 @@ const connectToRandomPeer = async (network, peers = [], protocol = "ssl") => {
host = peer.host;
protocol = peer.protocol;
}
const connectionResponse = await connectToPeer({ port, host, protocol, network });
const connectionResponse = await connectToPeer({ port, host, protocol, network, net, tls });
if (connectionResponse.error === false && connectionResponse.data) {
return {
error: connectionResponse.error,

6
lib/client.js

@ -5,13 +5,15 @@ const initSocket = require('./init_socket');
const connectSocket = require('./connect_socket');
class Client {
constructor(port, host, protocol = 'tcp', options = void 0) {
constructor(port, host, protocol = 'tcp', net, tls) {
this.net = net;
this.tls = tls;
this.id = 0;
this.port = port;
this.host = host;
this.callback_message_queue = {};
this.subscribe = new EventEmitter();
this.conn = initSocket(this, protocol, options);
this.conn = initSocket(this, protocol);
this.mp = new util.MessageParser((body, n) => {
this.onMessage(body, n);
});

4
lib/electrum_client.js

@ -1,8 +1,8 @@
const Client = require("./client")
class ElectrumClient extends Client{
constructor(port, host, protocol, options){
super(port, host, protocol, options);
constructor(port, host, protocol, net, tls){
super(port, host, protocol, net, tls);
}
onClose(){
super.onClose()

12
lib/init_socket.js

@ -1,23 +1,21 @@
'use strict'
const net = require('net');
const tls = require('tls');
const TlsSocketWrapper = require('./TlsSocketWrapper.js');
const TIMEOUT = 5000
const getSocket = (protocol, options) => {
const getSocket = (self, protocol, options) => {
switch(protocol){
case 'tcp':
return new net.Socket();
return new self.net.Socket();
case 'tls':
case 'ssl':
if (!tls) throw new Error('tls package could not be loaded');
return new TlsSocketWrapper({ tls, verbose: false });
if (!self.tls) throw new Error('tls package could not be loaded');
return new TlsSocketWrapper({ tls: self.tls, verbose: false });
}
throw new Error('unknown protocol')
}
const initSocket = (self, protocol, options) => {
const conn = getSocket(protocol, options);
const conn = getSocket(self, protocol, options);
conn.setTimeout(TIMEOUT)
conn.setEncoding('utf8')
conn.setKeepAlive(true, 0)

16185
package-lock.json

File diff suppressed because it is too large

9
package.json

@ -17,11 +17,9 @@
"mocha": "^8.2.0"
},
"peerDependencies": {
"@photon-sdk/react-native-tcp": "^6.0.0"
"react-native-tcp-socket": "^5.2.0"
},
"react-native": {
"net": "@photon-sdk/react-native-tcp",
"tls": "@photon-sdk/react-native-tcp/tls",
"crypto": "react-native-crypto",
"_stream_transform": "readable-stream/transform",
"_stream_readable": "readable-stream/readable",
@ -32,8 +30,6 @@
"vm": "vm-browserify"
},
"browser": {
"net": "@photon-sdk/react-native-tcp",
"tls": "@photon-sdk/react-native-tcp/tls",
"crypto": "react-native-crypto",
"_stream_transform": "readable-stream/transform",
"_stream_readable": "readable-stream/readable",
@ -55,6 +51,5 @@
"bugs": {
"url": "https://github.com/synonymdev/rn-electrum-client/issues"
},
"homepage": "https://github.com/synonymdev/rn-electrum-client#readme",
"dependencies": {}
"homepage": "https://github.com/synonymdev/rn-electrum-client#readme"
}

Loading…
Cancel
Save