Skip to content

Commit 50e43d2

Browse files
committed
connect error handling
1 parent ecd87fe commit 50e43d2

4 files changed

Lines changed: 43 additions & 16 deletions

File tree

example/subscribe.js

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,23 @@ const ElectrumClient = require('..')
22
const sleep = (ms) => new Promise((resolve,_) => setTimeout(() => resolve(), ms))
33

44
const main = async () => {
5-
const ecl = new ElectrumClient(995, 'btc.smsys.me', 'tls')
6-
ecl.subscribe.on('server.peers.subscribe', console.log)
7-
ecl.subscribe.on('blockchain.numblocks.subscribe', console.log)
8-
ecl.subscribe.on('blockchain.headers.subscribe', console.log)
9-
await ecl.connect()
10-
const p1 = await ecl.serverPeers_subscribe()
11-
const p2 = await ecl.blockchainHeaders_subscribe()
12-
const p3 = await ecl.blockchainNumblocks_subscribe()
13-
while(true){
14-
await sleep(1000)
5+
try{
6+
const ecl = new ElectrumClient(995, 'btc.smsys.me', 'tls')
7+
ecl.subscribe.on('server.peers.subscribe', console.log)
8+
ecl.subscribe.on('blockchain.numblocks.subscribe', console.log)
9+
ecl.subscribe.on('blockchain.headers.subscribe', console.log)
10+
await ecl.connect()
11+
const p1 = await ecl.serverPeers_subscribe()
12+
const p2 = await ecl.blockchainHeaders_subscribe()
13+
const p3 = await ecl.blockchainNumblocks_subscribe()
14+
while(true){
15+
await sleep(1000)
16+
let version = await ecl.server_version("2.7.11", "1.0")
17+
}
18+
await ecl.close()
19+
}catch(e){
20+
console.log("error")
21+
console.log(e)
1522
}
16-
await ecl.close()
1723
}
1824
main()

lib/client.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,37 @@ class Client{
1414
this.mp = new util.MessageParser((body, n) => {
1515
this.onMessage(body, n)
1616
})
17+
this.status = 0
1718
}
1819

1920
connect(){
21+
if(this.status) {
22+
return Promise.resolve()
23+
}
24+
this.status = 1
2025
return new Promise((resolve, reject) => {
26+
const errorHandler = (e) => reject(e)
2127
this.conn.connect(this.port, this.host, () => {
28+
this.conn.removeListener('error', errorHandler)
2229
resolve()
2330
})
31+
this.conn.on('error', errorHandler)
2432
})
2533
}
2634

2735
close(){
36+
if(!this.status) {
37+
return
38+
}
2839
this.conn.end()
2940
this.conn.destroy()
41+
this.status = 0
3042
}
3143

3244
request(method, params){
45+
if(!this.status) {
46+
return Promise.reject(new Error('ESOCKET'))
47+
}
3348
return new Promise((resolve, reject) => {
3449
const id = ++this.id;
3550
const content = util.makeRequest(method, params, id);
@@ -82,6 +97,9 @@ class Client{
8297
onEnd(){
8398
}
8499

100+
onError(e){
101+
}
102+
85103
}
86104

87105
module.exports = Client

lib/init_socket.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,17 @@ const initSocket = (self, protocol, options) => {
2121
conn.on('connect', () => {
2222
self.onConnect()
2323
})
24-
conn.on('close', () => {
25-
self.onClose()
24+
conn.on('close', (e) => {
25+
self.onClose(e)
2626
})
2727
conn.on('data', (chunk) => {
2828
self.onRecv(chunk)
2929
})
30-
conn.on('end', () => {
31-
self.onEnd()
30+
conn.on('end', (e) => {
31+
self.onEnd(e)
32+
})
33+
conn.on('error', (e) => {
34+
self.onError(e)
3235
})
3336
return conn
3437
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "electrum-client",
3-
"version": "0.0.3",
3+
"version": "0.0.4",
44
"description": "Electrum protocol client for node.js",
55
"main": "index.js",
66
"scripts": {

0 commit comments

Comments
 (0)