import { BehaviorSubject, Subject } from 'rxjs'; import { ColorCode, Message, ReportStatus, ConnectionAttribute, ConnectionRequest } from '../interfaces/general.interface'; import { GrpcServiceMethod } from './grpc.service.method'; import { FisRetransmissionService } from './fis.retransmission.service'; export class ServerClientManager { private connectionAttributes: ConnectionAttribute[] = [] private request: ConnectionRequest | any constructor(private grpcService: GrpcServiceMethod) { } public restartServerInDuration(time: number) { console.log(this.request) console.log(this.connectionAttributes) this.grpcService.shutDownServer().then((msg: string) => { console.log(msg) setTimeout(() => { this.generateConnection(this.request) }, time * 1000) }) } public generateConnection(request: ConnectionRequest) { this.request = request let database: string if (request.database) { database = request.database } else { database = request.server.name + request.client.name } let initialReport: ReportStatus = { code: ColorCode.YELLOW, message: 'Initialization of the subject' } let reportSubject: BehaviorSubject = new BehaviorSubject(initialReport) let retransmission: FisRetransmissionService = new FisRetransmissionService(database, reportSubject) let messageToBePublished: Subject = retransmission.handleMessage(request.server.messageToBePublishedfromApplication) ?? request.server.messageToBePublishedfromApplication let connectionAttribute: ConnectionAttribute = { ConnectionID: { local: '', remote: '' }, outGoing: { MessageToBePublished: messageToBePublished, MessageToBeReceived: null }, inComing: { MessageToBePublished: null, MessageToBeReceived: request.client.messageToBeReceivedFromRemote }, connectionStatus: reportSubject // this is not related to report status for the retrasmission service } // This is default connection if (!request.server.connectionType) { request.server.connectionType = 'GRPC' } // For each connection type: if (request.server.connectionType == 'GRPC') { this.grpcService.create(request, connectionAttribute) this.connectionAttributes.push(connectionAttribute) } } }