var net = require('net'), eventParser = require('../lib/eventParser.js'), pubsub = require('event-pubsub'); function init(config,log){ var client={ config : config, socket : false, connect : connect, emit : emit, log : log } new pubsub(client); return client; } function emit(type,data){ this.log('dispatching event to '.debug, this.id.variable, this.path.variable,' : ', type.data,',', data); if(!data) data=false; this.socket.write( eventParser.format( { type:type, data:data } ) ); }; function connect(){ //init client object for scope persistance especially inside of socket events. var client=this; if(client.socket){ if(client.socket.destroyed){ client.log('Requested to connect or reconnect to a destroyed socket. Not attempting because socket distroyed'.notice); return; } } client.log('requested connection to '.debug, client.id.variable, client.path.variable); if(!this.path){ client.log('\n\n######\nerror: '.error, client.id .info,' client has not specified socket path it wishes to connect to.'.error); return; } if(!client.port){ client.log('Connecting client on Unix Socket :'.debug, client.path.variable); client.socket = net.connect( { path:client.path } ); }else{ client.log('Connecting client via TCP to'.debug, client.path.variable ,client.port); client.socket = net.connect( { port:client.port, host:client.path } ); } client.socket.setEncoding(this.config.encoding); client.socket.on( 'error', function(err){ client.log('\n\n######\nerror: '.error, err); } ); client.socket.on( 'connect', function(){ client.trigger('connect'); } ); client.socket.on( 'close', function(){ client.log('connection closed'.notice ,client.id.variable , client.path.variable); setTimeout( ( function(client){ return function(){ client.connect(); } } )(client), client.config.retry ); client.trigger('disconnect'); } ); client.socket.on( 'data', function(data) { client.log('## recieved events ##'.rainbow); var events = eventParser.parse(data); var eCount = events.length; for(var i=0; i