From a584d0a7e3536c962f08300526f6436a22d363a4 Mon Sep 17 00:00:00 2001 From: yamadapc <tacla.yamada@gmail.com> Date: Sun, 18 Jun 2017 11:50:56 -0300 Subject: [PATCH] Split transports into different files --- src/api/transports/base.js | 33 ++++++++ src/api/transports/http.js | 33 ++++++++ src/api/transports/index.js | 7 ++ src/api/{transports.js => transports/ws.js} | 85 +++------------------ 4 files changed, 83 insertions(+), 75 deletions(-) create mode 100644 src/api/transports/base.js create mode 100644 src/api/transports/http.js create mode 100644 src/api/transports/index.js rename src/api/{transports.js => transports/ws.js} (75%) diff --git a/src/api/transports/base.js b/src/api/transports/base.js new file mode 100644 index 0000000..db881a2 --- /dev/null +++ b/src/api/transports/base.js @@ -0,0 +1,33 @@ +import Promise from 'bluebird'; +import EventEmitter from 'events'; +import each from 'lodash/each'; + +export default class Transport extends EventEmitter { + constructor(options = {}) { + super(options); + this.options = options; + this.id = 0; + } + + setOptions(options) { + each(options, (value, key) => this.options.set(key, value)); + this.stop(); + } + + listenTo(target, eventName, callback) { + if (target.addEventListener) target.addEventListener(eventName, callback); + else target.on(eventName, callback); + + return () => { + if (target.removeEventListener) + target.removeEventListener(eventName, callback); + else target.removeListener(eventName, callback); + }; + } + + send() {} + start() {} + stop() {} +} + +Promise.promisifyAll(Transport.prototype); diff --git a/src/api/transports/http.js b/src/api/transports/http.js new file mode 100644 index 0000000..35f813c --- /dev/null +++ b/src/api/transports/http.js @@ -0,0 +1,33 @@ +import fetch from 'isomorphic-fetch'; +import newDebug from 'debug'; + +import Transport from './base'; + +const debug = newDebug('steem:http'); + +export default class HttpTransport extends Transport { + send(api, data, callback) { + debug('Steem::send', api, data); + const id = data.id || this.id++; + const payload = { + id, + method: 'call', + params: [api, data.method, data.params], + }; + fetch(this.options.get('uri'), { + method: 'POST', + body: JSON.stringify(payload), + }) + .then(res => { + return res.json(); + }) + .then(json => { + const err = json.error || ''; + const result = json.result || ''; + callback(err, result); + }) + .catch(err => { + callback(err, ''); + }); + } +} diff --git a/src/api/transports/index.js b/src/api/transports/index.js new file mode 100644 index 0000000..4c88c0c --- /dev/null +++ b/src/api/transports/index.js @@ -0,0 +1,7 @@ +import HttpTransport from './http'; +import WsTransport from './ws'; + +export default { + http: HttpTransport, + ws: WsTransport, +}; diff --git a/src/api/transports.js b/src/api/transports/ws.js similarity index 75% rename from src/api/transports.js rename to src/api/transports/ws.js index 7c57b20..8589f00 100644 --- a/src/api/transports.js +++ b/src/api/transports/ws.js @@ -1,72 +1,9 @@ import Promise from 'bluebird'; import defaults from 'lodash/defaults'; -import {camelCase} from '../util'; -import fetch from 'isomorphic-fetch'; import isNode from 'detect-node'; -import EventEmitter from 'events'; import newDebug from 'debug'; -import each from 'lodash/each'; -const debugSetup = newDebug('steem:setup'); -const debugWs = newDebug('steem:ws'); -const expectedResponseMs = process.env.EXPECTED_RESPONSE_MS || 2000; - -class Transport extends EventEmitter { - constructor(options = {}) { - super(options); - this.options = options; - this.id = 0; - } - - setOptions(options) { - each(options, (value, key) => this.options.set(key, value)); - this.stop(); - } - - listenTo(target, eventName, callback) { - if (target.addEventListener) target.addEventListener(eventName, callback); - else target.on(eventName, callback); - - return () => { - if (target.removeEventListener) - target.removeEventListener(eventName, callback); - else target.removeListener(eventName, callback); - }; - } - - send() {} - start() {} - stop() {} -} - -Promise.promisifyAll(Transport.prototype); - -export class HttpTransport extends Transport { - send(api, data, callback) { - debugSetup('Steem::send', api, data); - const id = data.id || this.id++; - const payload = { - id, - method: 'call', - params: [api, data.method, data.params], - }; - fetch(this.options.get('uri'), { - method: 'POST', - body: JSON.stringify(payload), - }) - .then(res => { - return res.json(); - }) - .then(json => { - const err = json.error || ''; - const result = json.result || ''; - callback(err, result); - }) - .catch(err => { - callback(err, ''); - }); - } -} +import Transport from './base'; let WebSocket; if (isNode) { @@ -77,6 +14,9 @@ if (isNode) { throw new Error("Couldn't decide on a `WebSocket` class"); } +const debug = newDebug('steem:ws'); +const expectedResponseMs = process.env.EXPECTED_RESPONSE_MS || 2000; + const DEFAULTS = { apiIds: { database_api: 0, @@ -115,14 +55,14 @@ export class WsTransport extends Transport { this.ws = new WebSocket(url); const releaseOpen = this.listenTo(this.ws, 'open', () => { - debugWs('Opened WS connection with', url); + debug('Opened WS connection with', url); this.isOpen = true; releaseOpen(); resolve(); }); const releaseClose = this.listenTo(this.ws, 'close', () => { - debugWs('Closed WS connection with', url); + debug('Closed WS connection with', url); this.isOpen = false; delete this.ws; this.stop(); @@ -137,12 +77,12 @@ export class WsTransport extends Transport { }); const releaseMessage = this.listenTo(this.ws, 'message', message => { - debugWs('Received message', message.data); + debug('Received message', message.data); const id = JSON.parse(message.data).id; const msToRespond = Date.now() - this.requestsTime[id]; delete this.requestsTime[id]; if (msToRespond > expectedResponseMs) { - debugWs( + debug( `Message received in ${msToRespond}ms, it's over the expected response time of ${expectedResponseMs}ms`, message.data, ); @@ -164,7 +104,7 @@ export class WsTransport extends Transport { } stop() { - debugSetup('Stopping...'); + debug('Stopping...'); if (this.ws) this.ws.close(); this.apiIdsP = {}; delete this.startP; @@ -264,7 +204,7 @@ export class WsTransport extends Transport { resolve(message.result); }); - debugWs('Sending message', payload); + debug('Sending message', payload); this.requestsTime[id] = Date.now(); this.inFlight += 1; @@ -276,8 +216,3 @@ export class WsTransport extends Transport { return this.currentP; } } - -export default { - http: HttpTransport, - ws: WsTransport, -}; -- GitLab