From 29a360eb6635af3c10c8ae8e77e83f888b7b33ac Mon Sep 17 00:00:00 2001 From: Adhidarma Hadiwinoto <me@adhisimon.org> Date: Thu, 11 Aug 2016 09:57:05 +0700 Subject: [PATCH] delay dan isOnline --- config.ini | 9 +++++++++ index.js | 68 +++++++++++++++++++++++++++++++++++++------------------------- 2 files changed, 50 insertions(+), 27 deletions(-) create mode 100644 config.ini diff --git a/config.ini b/config.ini new file mode 100644 index 0000000..3c9f85a --- /dev/null +++ b/config.ini @@ -0,0 +1,9 @@ +[globals] +smsc=YAHOOIN0 +username=jkt_trx02 +password=payungselandi5880 +evo_url=http://ip-evo:9192/report/im_direct.jsp +listen_port=24232 +msisdn_suffix=@yahoo.com +greeting_prefix=Pesan anda telah diterima dan akan segera diproses: +log_level=verbose diff --git a/index.js b/index.js index 322944e..3127b3f 100644 --- a/index.js +++ b/index.js @@ -1,3 +1,4 @@ +var ym = require('yahoomessenger'); var http = require('http'); var url = require('url'); var winston = require('winston'); @@ -15,6 +16,7 @@ var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8')); var keepalive_interval = 60 * 1000; var last_message_hash = ''; var log_level = 'info'; +var isOnline = false; if (config.globals.log_level) { log_level = config.globals.log_level; @@ -38,21 +40,28 @@ var logger = new (winston.Logger)({ ] }); - -var ym = require('yahoomessenger'); -ym.newInstance(); - function onReady(){ ym.login(config.globals.username, config.globals.password); } function onLoginSuccessful(data) { logger.info('Login successful as ' + data.firstname + ' ' + data.lastname + ' (' + data.user_id + ')', {data: data}); + isOnline = true; } function sendMessage(destination, message) { - logger.info('Sending YM message', {from: config.globals.username, to: destination, message: message}); - ym.sendPM(destination, message); + if (isOnline) { + logger.info('Sending YM message', {from: config.globals.username, to: destination, message: message}); + ym.sendPM(destination, message); + } + else { + logger.warn('YM is not online yet, retrying to send message in 2 secs', {to: destination, msg: message}); + setTimeout( + sendMessage, + 2000, + destination, message + ) + } } function sendIgnoreResponse(destination, message) { @@ -62,21 +71,21 @@ function sendIgnoreResponse(destination, message) { function onPm(data) { logger.info('Incoming message via YM', {data: data}); var message = striptags(data.message); - + var message_hash = data.sender + ': ' + data.message; if (message_hash == last_message_hash) { logger.warn('Ignoring duplicate message', {data: data}); return; } last_message_hash = message_hash; - + var greeting_prefix = "Pesan anda telah diterima dan akan segera diproses:"; if (config.globals.greeting_prefix) { greeting_prefix = config.globals.greeting_prefix; } ym.sendPM(data.sender, greeting_prefix + ' ' + message); - + forwardMessageToEvo(data.sender, message, formatTimestamp(data.time)); } @@ -94,12 +103,12 @@ function onBuddyAddRequest(data) { function onHttpIncomingMessage(request, response) { var qs = url.parse(request.url, true).query; logger.verbose("onHttpIncomingMessage()", {qs: qs}); - + // abaikan balikan ping if (qs.to == config.globals.ping_ym_id) { return; } - + var destination = qs.to.replace(config.globals.msisdn_suffix, ''); logger.info('Sending YM message from ' + config.globals.username + ' to ' + destination + ': ' + qs.msg); sendMessage(destination, qs.msg); @@ -125,43 +134,43 @@ function forwardMessageToEvo(sender, message, ts) { ts: ts } }; - + logger.verbose("Forwarding message to evo", {request_opts: opts}); request(opts, function(err, response, body) { if (err) { logger.warn('Error forwarding to evo: ' + err); return; } - + if (response.statusCode != 200) { logger.warn('HTTP Status from evo: ' + response.statusCode, {status: response.statusCode, body: body}); return; } - + logger.verbose('Got response from evo', {body: body}); - + xmlparser(body, function(xmlerr, parsedResponse) { if (xmlerr) { logger.verbose('Evo response not in xml format'); return; } - - return; - + + return; + logger.info('Evo response in xml format', {response: parsedResponse}); if (parsedResponse.response.text) { sendMessage(sender, parsedResponse.response.text[0].trim()); } }); - - + + }); - - + + // kirim ping 1 detik setelah pesan agar segera diproses if (config.globals.send_ping_to_evo == '1') { setTimeout(function() { - + var pingOpts = { url: config.globals.evo_url, qs: { @@ -171,9 +180,9 @@ function forwardMessageToEvo(sender, message, ts) { ts: strftime('%F %T') } }; - + logger.verbose('Sending ping message', {opts: pingOpts}); - + request(pingOpts, function(err, response, body) { if (err) { logger.warn('Error send PING to evo: ' + err); @@ -186,7 +195,7 @@ function forwardMessageToEvo(sender, message, ts) { function createHttpServer() { logger.verbose('createHttpServer()'); - + var httpServer = http.createServer(onHttpIncomingMessage); httpServer.listen(config.globals.listen_port, function(){ logger.info("HTTP server listening on " + config.globals.listen_port); @@ -199,7 +208,12 @@ ym.on('loginSuccessful', onLoginSuccessful); ym.on('pm', onPm); ym.on('buddyAddRequest', onBuddyAddRequest); -setInterval(function() { +setTimeout(function() { + ym.newInstance, + 3000 +}) + +setInterval(function() { logger.verbose('Sending keepalive packet'); ym.keepAlive(); }, keepalive_interval); -- 1.9.0