123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338 |
- 'use strict';
- const Defaults = require('../entities/Defaults.js'),
- Client = require('../dao/client.js'),
- Server = require('../dao/socketServer.js'),
- util = require('util');
- class IPC{
- constructor(){
- Object.defineProperties(
- this,
- {
- config : {
- enumerable:true,
- writable:true,
- value:new Defaults
- },
- connectTo : {
- enumerable:true,
- writable:false,
- value:connect
- },
- connectToNet: {
- enumerable:true,
- writable:false,
- value:connectNet
- },
- disconnect : {
- enumerable:true,
- writable:false,
- value:disconnect
- },
- serve : {
- enumerable:true,
- writable:false,
- value:serve
- },
- serveNet : {
- enumerable:true,
- writable:false,
- value:serveNet
- },
- of : {
- enumerable:true,
- writable:true,
- value:{}
- },
- server : {
- enumerable:true,
- writable:true,
- configurable:true,
- value:false
- },
- log : {
- enumerable:true,
- writable:false,
- value:log
- }
- }
- );
- }
- }
- function log(...args){
- if(this.config.silent){
- return;
- }
- for(let i=0, count=args.length; i<count; i++){
- if(typeof args[i] != 'object'){
- continue;
- }
- args[i]=util.inspect(
- args[i],
- {
- depth:this.config.logDepth,
- colors:this.config.logInColor
- }
- );
- }
- this.config.logger(
- args.join(' ')
- );
- }
- function disconnect(id){
- if(!this.of[id]){
- return;
- }
- this.of[id].explicitlyDisconnected=true;
- this.of[id].off('*','*');
- if(this.of[id].socket){
- if(this.of[id].socket.destroy){
- this.of[id].socket.destroy();
- }
- }
- delete this.of[id];
- }
- function serve(path,callback){
- if(typeof path=='function'){
- callback=path;
- path=false;
- }
- if(!path){
- this.log(
- 'Server path not specified, so defaulting to',
- 'ipc.config.socketRoot + ipc.config.appspace + ipc.config.id',
- this.config.socketRoot+this.config.appspace+this.config.id
- );
- path=this.config.socketRoot+this.config.appspace+this.config.id;
- }
- if(!callback){
- callback=emptyCallback;
- }
- this.server=new Server(
- path,
- this.config,
- log
- );
- this.server.on(
- 'start',
- callback
- );
- }
- function emptyCallback(){
- //Do Nothing
- }
- function serveNet(host,port,UDPType,callback){
- if(typeof host=='number'){
- callback=UDPType;
- UDPType=port;
- port=host;
- host=false;
- }
- if(typeof host=='function'){
- callback=host;
- UDPType=false;
- host=false;
- port=false;
- }
- if(!host){
- this.log(
- 'Server host not specified, so defaulting to',
- 'ipc.config.networkHost',
- this.config.networkHost
- );
- host=this.config.networkHost;
- }
- if(host.toLowerCase()=='udp4' || host.toLowerCase()=='udp6'){
- callback=port;
- UDPType=host.toLowerCase();
- port=false;
- host=this.config.networkHost;
- }
- if(typeof port=='string'){
- callback=UDPType;
- UDPType=port;
- port=false;
- }
- if(typeof port=='function'){
- callback=port;
- UDPType=false;
- port=false;
- }
- if(!port){
- this.log(
- 'Server port not specified, so defaulting to',
- 'ipc.config.networkPort',
- this.config.networkPort
- );
- port=this.config.networkPort;
- }
- if(typeof UDPType=='function'){
- callback=UDPType;
- UDPType=false;
- }
- if(!callback){
- callback=emptyCallback;
- }
- this.server=new Server(
- host,
- this.config,
- log,
- port
- );
- if(UDPType){
- this.server[UDPType]=true;
- if(UDPType === "udp4" && host === "::1") {
- // bind udp4 socket to an ipv4 address
- this.server.path = "127.0.0.1";
- }
- }
- this.server.on(
- 'start',
- callback
- );
- }
- function connect(id,path,callback){
- if(typeof path == 'function'){
- callback=path;
- path=false;
- }
- if(!callback){
- callback=emptyCallback;
- }
- if(!id){
- this.log(
- 'Service id required',
- 'Requested service connection without specifying service id. Aborting connection attempt'
- );
- return;
- }
- if(!path){
- this.log(
- 'Service path not specified, so defaulting to',
- 'ipc.config.socketRoot + ipc.config.appspace + id',
- (this.config.socketRoot+this.config.appspace+id).data
- );
- path=this.config.socketRoot+this.config.appspace+id;
- }
- if(this.of[id]){
- if(!this.of[id].socket.destroyed){
- this.log(
- 'Already Connected to',
- id,
- '- So executing success without connection'
- );
- callback();
- return;
- }
- this.of[id].socket.destroy();
- }
- this.of[id] = new Client(this.config,this.log);
- this.of[id].id = id;
- this.of[id].path = path;
- this.of[id].connect();
- callback(this);
- }
- function connectNet(id,host,port,callback){
- if(!id){
- this.log(
- 'Service id required',
- 'Requested service connection without specifying service id. Aborting connection attempt'
- );
- return;
- }
- if(typeof host=='number'){
- callback=port;
- port=host;
- host=false;
- }
- if(typeof host=='function'){
- callback=host;
- host=false;
- port=false;
- }
- if(!host){
- this.log(
- 'Server host not specified, so defaulting to',
- 'ipc.config.networkHost',
- this.config.networkHost
- );
- host=this.config.networkHost;
- }
- if(typeof port=='function'){
- callback=port;
- port=false;
- }
- if(!port){
- this.log(
- 'Server port not specified, so defaulting to',
- 'ipc.config.networkPort',
- this.config.networkPort
- );
- port=this.config.networkPort;
- }
- if(typeof callback == 'string'){
- UDPType=callback;
- callback=false;
- }
- if(!callback){
- callback=emptyCallback;
- }
- if(this.of[id]){
- if(!this.of[id].socket.destroyed){
- this.log(
- 'Already Connected to',
- id,
- '- So executing success without connection'
- );
- callback();
- return;
- }
- this.of[id].socket.destroy();
- }
- this.of[id] = new Client(this.config,this.log);
- this.of[id].id = id;
- (this.of[id].socket)? this.of[id].socket.id=id:null;
- this.of[id].path = host;
- this.of[id].port = port;
- this.of[id].connect();
- callback(this);
- }
- module.exports=IPC;
|