gntp
Version:
Full, native, Growl Notification Transport Protocol (GNTP)implementation.
75 lines (68 loc) • 2.51 kB
JavaScript
/*--------------------------
Client object/class
*/
var constants = require('./constants.js')
, net = require('net')
, events = require('events')
, Message = require('./message.js')
, Application = require('./application.js')
, ApplicationRequest = require('./applicationRequest.js')
, Notification = require('./notification.js')
, NotificationRequest = require('./notificationRequest.js')
function Client () {
this.host = '127.0.0.1';
this.port = 23053;
this.password = '';
this.debug = false;
events.EventEmitter.call(this);
}
Client.prototype = new events.EventEmitter();
module.exports = Client;
Client.prototype.sendMessage = function (request){
var response;
var sock = net.createConnection(this.port,this.host);
var self = this;
var chunkSize = 1024;
var eomLength = 6;
var recvd = 0;
var msgdata = new Buffer(chunkSize);
var message = new Message();
//sock.setTimeout(3000);
sock.on('connect',function () {
var protocol = request.protocolString();
var mime = request.mime();
var mBuff = new Buffer(protocol.length+mime.length+(constants.EndLine.length));
mBuff.write(protocol,0,'utf8');
mime.copy(mBuff,protocol.length,0);
mBuff.write(constants.EndLine,protocol.length+mime.length,'utf8');
sock.write(mBuff);
self.emit('sent');
});
sock.on('data',function (data){
var error
//console.log('Recv:\r\n'+data.toString());
if( !message.parseInfo.complete ){
message.parse_stream(data);
if( message.parseInfo.error ){
self.emit('error',message)
}else if( message.parseInfo.complete ){
//console.log('emitting response!');
self.emit('response',message)
}
}
});
sock.on('error',function (exception) {
//console.log("socket error:"+exception);
message.parseInfo.error = constants.ErrorEnum.NETWORK_FAILURE
self.emit('error',message)
});
sock.on('close',function (had_error) {
//console.log('socket closed.'+(had_error?' with eror':''));
});
sock.on('timeout',function () {
//console.log('socket timeout');
message.parseInfo.error = constants.ErrorEnum.TIMED_OUT
self.emit('error',message)
sock.destroy();
});
};