Commit a4ed48afbab13c5a7fa057ee10754da75097e9b7

Authored by Adhidarma Hadiwinoto
1 parent 8a941a951d
Exists in master

keepalive_interval var

Showing 1 changed file with 5 additions and 14 deletions Inline Diff

1 var http = require('http'); 1 var http = require('http');
2 var url = require('url'); 2 var url = require('url');
3 var winston = require('winston'); 3 var winston = require('winston');
4 var strftime = require('strftime'); 4 var strftime = require('strftime');
5 var strptime = require('micro-strptime').strptime; 5 var strptime = require('micro-strptime').strptime;
6 var request = require('request'); 6 var request = require('request');
7 var striptags = require('striptags'); 7 var striptags = require('striptags');
8 var fs = require('fs'); 8 var fs = require('fs');
9 var ini = require('ini'); 9 var ini = require('ini');
10 10
11 var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8')); 11 var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8'));
12 12
13 var last_message_hash; 13 var keepalive_interval = 2 * 60 * 1000;
14 14
15 var logger = new (winston.Logger)({ 15 var logger = new (winston.Logger)({
16 transports: [ 16 transports: [
17 new (winston.transports.Console)({ 17 new (winston.transports.Console)({
18 timestamp: function() { 18 timestamp: function() {
19 return strftime('%F %T', new Date()); 19 return strftime('%F %T', new Date());
20 } 20 }
21 }), 21 }),
22 new (winston.transports.DailyRotateFile)({ 22 new (winston.transports.DailyRotateFile)({
23 filename: __dirname + '/logs/log', 23 filename: __dirname + '/logs/log',
24 timestamp: function() { 24 timestamp: function() {
25 return strftime('%F %T', new Date()); 25 return strftime('%F %T', new Date());
26 } 26 }
27 }) 27 })
28 ] 28 ]
29 }); 29 });
30 30
31 31
32 var ym = require('yahoomessenger'); 32 var ym = require('yahoomessenger');
33 ym.newInstance(); 33 ym.newInstance();
34 34
35 function onReady(){ 35 function onReady(){
36 ym.login(config.globals.username, config.globals.password); 36 ym.login(config.globals.username, config.globals.password);
37 } 37 }
38 38
39 function onLoginSuccessful(data) { 39 function onLoginSuccessful(data) {
40 logger.info('Login successful as ' + data.firstname + ' ' + data.lastname + ' (' + data.user_id + ')', {data: data}); 40 logger.info('Login successful as ' + data.firstname + ' ' + data.lastname + ' (' + data.user_id + ')', {data: data});
41 } 41 }
42 42
43 function sendIgnoreResponse(destination, message) { 43 function sendIgnoreResponse(destination, message) {
44 ym.sendPM(destination, "Pesan anda diabaikan, silahkan diulang beberapa saat lagi jika diperlukan: " + message); 44 ym.sendPM(destination, "Pesan anda diabaikan, silahkan diulang beberapa saat lagi jika diperlukan: " + message);
45 } 45 }
46 46
47 function onPm(data) { 47 function onPm(data) {
48 logger.verbose('onPM()', {data: data}); 48 logger.verbose('onPM()', {data: data});
49 49
50 var message = striptags(data.message); 50 var message = striptags(data.message);
51 /*
52 var new_message_hash = data.sender + ': ' + message;
53
54 if (last_message_hash == new_message_hash) {
55 return;
56 }
57 last_message_hash = new_message_hash;
58 */
59
60 var greeting_suffix = "Pesan anda telah diterima dan akan segera diproses:"; 51 var greeting_suffix = "Pesan anda telah diterima dan akan segera diproses:";
61 if (config.globals.greeting_suffix) { 52 if (config.globals.greeting_prefix) {
62 greeting_suffix = config.globals.greeting_suffix; 53 greeting_suffix = config.globals.greeting_prefix;
63 } 54 }
64 55
65 ym.sendPM(data.sender, greeting_suffix + ' ' + message); 56 ym.sendPM(data.sender, greeting_suffix + ' ' + message);
66 57
67 forwardMessageToEvo(data.sender, message, formatTimestamp(data.time)); 58 forwardMessageToEvo(data.sender, message, formatTimestamp(data.time));
68 } 59 }
69 60
70 function onOfflinePM(data) { 61 function onOfflinePM(data) {
71 logger.verbose('onOfflinePM()', {data: data}); 62 logger.verbose('onOfflinePM()', {data: data});
72 sendIgnoreResponse(data.sender, data.message); 63 sendIgnoreResponse(data.sender, data.message);
73 } 64 }
74 65
75 function onBuddyAddRequest(data) { 66 function onBuddyAddRequest(data) {
76 logger.info('onBuddyAddRequest()', {data: data}); 67 logger.info('onBuddyAddRequest()', {data: data});
77 ym.acceptAddBuddy(data.username); 68 ym.acceptAddBuddy(data.username);
78 logger.info('Accept buddy add request: ' + data.username, {data: data}); 69 logger.info('Accept buddy add request: ' + data.username, {data: data});
79 } 70 }
80 71
81 function onHttpIncomingMessage(request, response) { 72 function onHttpIncomingMessage(request, response) {
82 var qs = url.parse(request.url, true).query; 73 var qs = url.parse(request.url, true).query;
83 logger.info("onHttpIncomingMessage()", {qs: qs}); 74 logger.info("onHttpIncomingMessage()", {qs: qs});
84 75
85 var destination = qs.to.replace(config.globals.msisdn_suffix, ''); 76 var destination = qs.to.replace(config.globals.msisdn_suffix, '');
86 logger.info('Sending message to ' + destination + ': ' + qs.msg); 77 logger.info('Sending message to ' + destination + ': ' + qs.msg);
87 ym.sendPM(destination, qs.msg); 78 ym.sendPM(destination, qs.msg);
88 response.end('OK'); 79 response.end('OK');
89 } 80 }
90 81
91 function formatTimestamp(ts) { 82 function formatTimestamp(ts) {
92 var _ts = strptime(ts, '%A %b %d %Y %H:%M:%S GMT%z'); 83 var _ts = strptime(ts, '%A %b %d %Y %H:%M:%S GMT%z');
93 return strftime('%F %T', _ts); 84 return strftime('%F %T', _ts);
94 } 85 }
95 86
96 function forwardMessageToEvo(sender, message, ts) { 87 function forwardMessageToEvo(sender, message, ts) {
97 var msisdn = sender + config.globals.msisdn_suffix; 88 var msisdn = sender + config.globals.msisdn_suffix;
98 var opts = { 89 var opts = {
99 url: config.globals.evo_url, 90 url: config.globals.evo_url,
100 qs: { 91 qs: {
101 msg: message, 92 msg: message,
102 msisdn: msisdn, 93 msisdn: msisdn,
103 smsc: config.globals.smsc, 94 smsc: config.globals.smsc,
104 ts: ts 95 ts: ts
105 } 96 }
106 }; 97 };
107 98
108 logger.info("Forwarding message to evo", {request_opts: opts}); 99 logger.info("Forwarding message to evo", {request_opts: opts});
109 request(opts, function(err, response, body) { 100 request(opts, function(err, response, body) {
110 if (err) { 101 if (err) {
111 logger.warn('Error forwarding to evo: ' + err); 102 logger.warn('Error forwarding to evo: ' + err);
112 return; 103 return;
113 } 104 }
114 }); 105 });
115 } 106 }
116 107
117 function createHttpServer() { 108 function createHttpServer() {
118 logger.verbose('createHttpServer()'); 109 logger.verbose('createHttpServer()');
119 110
120 var httpServer = http.createServer(onHttpIncomingMessage); 111 var httpServer = http.createServer(onHttpIncomingMessage);
121 httpServer.listen(config.globals.listen_port, function(){ 112 httpServer.listen(config.globals.listen_port, function(){
122 logger.info("HTTP server listening on " + config.globals.listen_port); 113 logger.info("HTTP server listening on " + config.globals.listen_port);
123 }); 114 });
124 } 115 }
125 116
126 createHttpServer(); 117 createHttpServer();
127 ym.on('ready', onReady); 118 ym.on('ready', onReady);
128 ym.on('loginSuccessful', onLoginSuccessful); 119 ym.on('loginSuccessful', onLoginSuccessful);
129 ym.on('pm', onPm); 120 ym.on('pm', onPm);
130 ym.on('buddyAddRequest', onBuddyAddRequest); 121 ym.on('buddyAddRequest', onBuddyAddRequest);
131 122
132
133 setInterval(function() { 123 setInterval(function() {
124 logger.info('Sending keepalive packet');
134 ym.keepAlive(); 125 ym.keepAlive();
135 }, 5 * 60 * 1000); 126 }, keepalive_interval);