Commit 3a28f93e6cc1a833aaac65493d12bfda437071b5

Authored by Adhidarma Hadiwinoto
1 parent c23c2f52f1
Exists in master

Add empty line

Showing 1 changed file with 1 additions and 0 deletions Inline Diff

1 const MODULE_NAME = 'TRANSPORT'; 1 const MODULE_NAME = 'TRANSPORT';
2 const SLEEP_BEFORE_TERMINATE_ON_ERROR_MS = 5 * 1000; 2 const SLEEP_BEFORE_TERMINATE_ON_ERROR_MS = 5 * 1000;
3 3
4 const bot = require('simple-xmpp'); 4 const bot = require('simple-xmpp');
5 const config = require('komodo-sdk/config'); 5 const config = require('komodo-sdk/config');
6 const logger = require('tektrans-logger'); 6 const logger = require('tektrans-logger');
7 const messagingService = require('komodo-center-messaging-client-lib'); 7 const messagingService = require('komodo-center-messaging-client-lib');
8 const uniqid = require('uniqid'); 8 const uniqid = require('uniqid');
9 9
10 const customPing = require('./custom-ping'); 10 const customPing = require('./custom-ping');
11 const killOnIdle = require('./kill-on-idle'); 11 const killOnIdle = require('./kill-on-idle');
12 12
13 let isReady; 13 let isReady;
14 14
15 bot.on('online', (data) => { 15 bot.on('online', (data) => {
16 logger.info(`XMPP transport connected, JID: ${data.jid.user}`); 16 logger.info(`XMPP transport connected, JID: ${data.jid.user}`);
17 17
18 if (config.custom_ping) { 18 if (config.custom_ping) {
19 customPing.setBot(bot); 19 customPing.setBot(bot);
20 } 20 }
21 21
22 bot.getRoster(); 22 bot.getRoster();
23 23
24 setTimeout( 24 setTimeout(
25 () => { 25 () => {
26 isReady = true; 26 isReady = true;
27 27
28 logger.verbose('Transport is ready'); 28 logger.verbose('Transport is ready');
29 29
30 if (messagingService.onOnline) { 30 if (messagingService.onOnline) {
31 messagingService.onOnline({ 31 messagingService.onOnline({
32 me: config.username, 32 me: config.username,
33 }); 33 });
34 } 34 }
35 35
36 if (!killOnIdle.getDisabled()) { 36 if (!killOnIdle.getDisabled()) {
37 killOnIdle.init(); 37 killOnIdle.init();
38 } 38 }
39 }, 39 },
40 40
41 config.warming_up_ms || (30 * 1000), 41 config.warming_up_ms || (30 * 1000),
42 ); 42 );
43 }); 43 });
44 44
45 bot.on('chat', (partner, msg) => { 45 bot.on('chat', (partner, msg) => {
46 if (!msg || !msg.trim()) { 46 if (!msg || !msg.trim()) {
47 return; 47 return;
48 } 48 }
49 49
50 if (partner === config.username.replace(/\/.*$/, '')) { 50 if (partner === config.username.replace(/\/.*$/, '')) {
51 return; 51 return;
52 } 52 }
53 53
54 killOnIdle.touch(); 54 killOnIdle.touch();
55 55
56 const xid = uniqid(); 56 const xid = uniqid();
57 57
58 if (!isReady) { 58 if (!isReady) {
59 if (!customPing.isPingMessage(msg) && !customPing.isPongMessage(msg)) { 59 if (!customPing.isPingMessage(msg) && !customPing.isPongMessage(msg)) {
60 logger.warn('Warming up is not finished yet, ignoring message', { 60 logger.warn('Warming up is not finished yet, ignoring message', {
61 xid, me: config.username, partner, msg, 61 xid, me: config.username, partner, msg,
62 }); 62 });
63 } 63 }
64 return; 64 return;
65 } 65 }
66 66
67 if (customPing.isPongMessage(msg)) { 67 if (customPing.isPongMessage(msg)) {
68 if (config.custom_ping && config.custom_ping.verbose) { 68 if (config.custom_ping && config.custom_ping.verbose) {
69 logger.verbose(`${MODULE_NAME} 70CDD087: Got PONG message`, { 69 logger.verbose(`${MODULE_NAME} 70CDD087: Got PONG message`, {
70 xid, 70 xid,
71 partner, 71 partner,
72 msg, 72 msg,
73 }); 73 });
74 } 74 }
75 return; 75 return;
76 } 76 }
77 77
78 if (customPing.isPingMessage(msg)) { 78 if (customPing.isPingMessage(msg)) {
79 if (customPing.isAllowedPartner(partner)) { 79 if (customPing.isAllowedPartner(partner)) {
80 if (config.custom_ping && config.custom_ping.verbose) { 80 if (config.custom_ping && config.custom_ping.verbose) {
81 logger.verbose(`${MODULE_NAME} ED8C8786: Processing PING message`, { 81 logger.verbose(`${MODULE_NAME} ED8C8786: Processing PING message`, {
82 xid, 82 xid,
83 partner, 83 partner,
84 msg, 84 msg,
85 }); 85 });
86 } 86 }
87 87
88 customPing.sendPong(xid, partner, msg); 88 customPing.sendPong(xid, partner, msg);
89 } 89 }
90
90 return; 91 return;
91 } 92 }
92 93
93 logger.info('Incoming message via XMPP transport', { 94 logger.info('Incoming message via XMPP transport', {
94 xid, me: config.username, partner, msg, 95 xid, me: config.username, partner, msg,
95 }); 96 });
96 97
97 if (messagingService && messagingService.onIncomingMessage) { 98 if (messagingService && messagingService.onIncomingMessage) {
98 messagingService.onIncomingMessage( 99 messagingService.onIncomingMessage(
99 { 100 {
100 me: config.username, 101 me: config.username,
101 partner, 102 partner,
102 msg: msg.trim(), 103 msg: msg.trim(),
103 xid, 104 xid,
104 }, 105 },
105 ); 106 );
106 } 107 }
107 }); 108 });
108 109
109 bot.on('error', (err) => { 110 bot.on('error', (err) => {
110 const xid = uniqid(); 111 const xid = uniqid();
111 112
112 logger.warn(`${MODULE_NAME} F2E53C12: Error detected.`, { 113 logger.warn(`${MODULE_NAME} F2E53C12: Error detected.`, {
113 xid, 114 xid,
114 eCode: err.code, 115 eCode: err.code,
115 eMessage: err.message, 116 eMessage: err.message,
116 }); 117 });
117 118
118 if (!config.do_not_terminate_on_error) { 119 if (!config.do_not_terminate_on_error) {
119 logger.warn(`${MODULE_NAME} BA6C0C55: Terminating on error`, { 120 logger.warn(`${MODULE_NAME} BA6C0C55: Terminating on error`, {
120 xid, 121 xid,
121 millisecondSleepBeforeTerminate: SLEEP_BEFORE_TERMINATE_ON_ERROR_MS, 122 millisecondSleepBeforeTerminate: SLEEP_BEFORE_TERMINATE_ON_ERROR_MS,
122 }); 123 });
123 124
124 setTimeout(() => { 125 setTimeout(() => {
125 process.exit(1); 126 process.exit(1);
126 }, SLEEP_BEFORE_TERMINATE_ON_ERROR_MS); 127 }, SLEEP_BEFORE_TERMINATE_ON_ERROR_MS);
127 } 128 }
128 }); 129 });
129 130
130 function send(partner, msg) { 131 function send(partner, msg) {
131 logger.verbose('Sending message via XMPP transport', { 132 logger.verbose('Sending message via XMPP transport', {
132 transport: 'xmpp', me: config.username, partner, msg, 133 transport: 'xmpp', me: config.username, partner, msg,
133 }); 134 });
134 bot.send(partner, msg); 135 bot.send(partner, msg);
135 } 136 }
136 137
137 bot.on('subscribe', (from) => { 138 bot.on('subscribe', (from) => {
138 logger.verbose(`Incoming subscribe request from ${from}`); 139 logger.verbose(`Incoming subscribe request from ${from}`);
139 bot.acceptSubscription(from); 140 bot.acceptSubscription(from);
140 bot.subscribe(from); 141 bot.subscribe(from);
141 }); 142 });
142 143
143 function ping() { 144 function ping() {
144 if (isReady) bot.send(config.username, 'PING!'); 145 if (isReady) bot.send(config.username, 'PING!');
145 } 146 }
146 147
147 function init() { 148 function init() {
148 messagingService.setTransport(exports); 149 messagingService.setTransport(exports);
149 150
150 bot.connect({ 151 bot.connect({
151 jid: config.username, 152 jid: config.username,
152 password: config.password, 153 password: config.password,
153 host: config.xmpp_host, 154 host: config.xmpp_host,
154 }); 155 });
155 156
156 setInterval( 157 setInterval(
157 ping, 158 ping,
158 config.ping_interval_ms || 60000, 159 config.ping_interval_ms || 60000,
159 ); 160 );
160 } 161 }
161 162
162 init(); 163 init();
163 164
164 exports.init = init; 165 exports.init = init;
165 exports.send = send; 166 exports.send = send;
166 167