forked from maxicus/ib-tws-api
-
Notifications
You must be signed in to change notification settings - Fork 0
/
income-fieldset-handler.js
90 lines (55 loc) · 1.97 KB
/
income-fieldset-handler.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import util from 'util';
const debuglog = util.debuglog('ib-tws-api');
import IncomeMessageType from './const-income-message-type.js';
import IncomeFieldsetHandlerByType from './income-fieldset-handlers/index.js';
import IncomeFieldsetHandlerBus from './income-fieldset-handler-bus.js';
class IncomeFieldsetHandler {
constructor(p = {}) {
this._bus = new IncomeFieldsetHandlerBus(p.timeoutMs, p.eventEmitter);
}
setServerVersion(v) {
this._bus.serverVersion = v;
}
processMessageFieldsetBeforeServerVersion(fields) {
debuglog('processMessageFieldsetBeforeServerVersion');
if (fields.length == 2) {
// first message sent after handshake
this._processByType(IncomeMessageType._SERVER_VERSION, fields);
}
}
processMessageFieldset(fields) {
this._processByType(parseInt(fields[0]), fields);
}
_processByType(messageTypeId, fields) {
debuglog('processByType. processing message ' + messageTypeId);
if (!IncomeFieldsetHandlerByType[messageTypeId]) {
debuglog('unknown message type ID ' + messageTypeId);
return;
}
IncomeFieldsetHandlerByType[messageTypeId].call(this._bus, fields);
}
awaitMessageType(messageTypeId) {
return new Promise((resolve, reject) => {
this._bus.messageTypeAddAwaitPromise(messageTypeId, resolve, reject);
});
}
awaitRequestId(requestId) {
return new Promise((resolve, reject) => {
this._bus.requestIdAddAwaitPromise(requestId, resolve, reject);
});
}
awaitRequestIdErrorCode(requestId, errorCode) {
return new Promise((resolve, reject) => {
this._bus.requestIdAddAwaitPromiseErrorCode(requestId, errorCode, resolve, reject);
});
}
requestIdEmitter(requestId, stopFunctor) {
let eventEmitter = this._bus.requestIdEmitter(requestId, stopFunctor);
eventEmitter.stop = () => {
this._bus.requestIdDelete(requestId);
stopFunctor();
};
return eventEmitter;
}
}
export default IncomeFieldsetHandler;