UNPKG

endive-rpc

Version:
131 lines (111 loc) 3.3 kB
var EventEmitter = require( 'events' ).EventEmitter; var hash = require( 'hashish' ); var util = require( 'util' ); var utils = require( './util/util') var net = require( 'net' ); var LocalInterface = require( './interface/localInterface' ); var Server = require( './server/server' ); var ClientManager = require( './client/clientManager' ); function erpc() { EventEmitter.call( this ); var self = this; self.isStart = false; self.handler = { getConnectionId: function( host , port , socket ) { return util.format( '%s:%d' , host , port ); } , onAcceptedConnection: function( connection ) { } }; self.server = self.options.serverInfo != null ? new Server( self.options.serverInfo , self.handler ) : null; self.clientManager = self.options.clientInfoList != null ? new ClientManager( self.options.clientInfoList , this ) : null; }; util.inherits( erpc , EventEmitter ); module.exports = erpc; erpc.prototype.setHandler = function( handler ) { if( handler == null ) return; var self = this; // getConnectionId ( host , port , socket ) hash( handler ).forEach( function( fname , key ) { self.handler[key] = fname; }); }; erpc.prototype.start = function() { if ( this.isStart ) return; if ( this.clientManager != null ) { this.clientManager.start(); } if ( this.server != null ) { this.server.listen(); } this.isStart = true; }; erpc.prototype.stop = function() { if ( this.isStart == false ) return; if ( this.clientManager != null ) { this.clientManager.stop(); } if ( this.server != null ) { this.server.close(); } this.isStart = false; }; erpc.prototype.getClient = function( id ) { if ( this.clientManager == null ) return; return this.clientManager.getClient( id ); }; erpc.prototype.connect = function( host , port , id , functions , ownerListener ) { var clientInfo = { host: host , port: port , id: id || null , ownerListener: ownerListener || null , localFunctions: functions || this.functions }; if ( this.clientManager == null ) { this.clientManager = new ClientManager( [ clientInfo ] , this ); if ( this.isStart ) { this.clientManager.start(); } } else { this.clientManager.addClientInfo( clientInfo ); } if ( this.isStart == false ) { this.start(); } return this; }; erpc.prototype.listen = function( port , id , functions , handler ) { var serverInfo = { port: port , id: id , functions: functions || this.functions , ownerListener: this }; this.setHandler( handler ); if( this.server == null ) { this.server = new Server( serverInfo , this.handler ); if ( this.isStart ) { this.server.start(); } } else { throw new Error( 'Error: already started to listen.' ); } if ( this.isStart == false ) { this.start(); } return this; };