diff --git a/lib/service.js b/lib/service.js index 7f0acf6..4b7560b 100644 --- a/lib/service.js +++ b/lib/service.js @@ -1,6 +1,7 @@ 'use strict' const axios = require('axios'); +const EventEmitter = require('events') class Service { constructor(name, baseUrl) { @@ -15,30 +16,42 @@ class Service { } class ServicePool { - constructor(numMaxServices, servicesInfo){ - this.numMaxServices = numMaxServices - const services = Objects.keys(servicesInfo) + constructor(servicesInfos){ + this.emitter = EventEmmiter() + this.servicesInfos = servicesInfos + this._eventRelease = 'releaseService' + this.emitter.on(this._eventRelease, this.scaleDownServices(serviceName)) - services.forEach((service) => { - let s = new Service(service, servicesInfo[service]) + const services = Objects.keys(servicesInfos) + services.forEach((service) => { this.serviceList[service] = [] + + let s = new Service(service, servicesInfos[service]) this.servicesList[service].push(s) }) } acquire(serviceName) { - if(this.serviceList[serviceName].length === 0 ){ - // TODO: Create new + if(this.serviceList[serviceName].length === 0){ + if(this.servicesInfos[serviceName] !== undefined) { + let s = new Service(serviceName, servicesInfos[service]) + this.servicesList[service].push(s) + } } return this.serviceList[serviceName].pop() } release(service) { this.serviceList[service.name].push(service) - // TODO: emit event + this.emmiter.emit(this._eventRelease, service.name) } + scaleDownServices(serviceName) { + if(this.serviceList[serviceName].length > 1) { + delete this.serviceList[serviceName].pop() + } + } } module.exports = {