import { BehaviorSubject } from 'rxjs'; import { ConnectionAttribute, ConnectionRequest, ConnectionState, OutGoingInfo } from '../interfaces/general.interface'; import { GrpcServiceMethod } from './grpc.service.method'; import { BufferService } from './buffer.service'; import { v4 as uuidv4 } from 'uuid' import * as dotenv from 'dotenv' dotenv.config() export class ServerClientManager { private connectionAttributes: ConnectionAttribute[] = [] private request: ConnectionRequest | any private outGoingInfo: OutGoingInfo private grpcService: GrpcServiceMethod = new GrpcServiceMethod() constructor() { this.outGoingInfo = { StreamID: uuidv4(), PublisherID: uuidv4(), SubscriberID: uuidv4() } } public generateConnection(request: ConnectionRequest) { this.request = request let database: string if (request.database) { database = request.database } else { database = request.server.name + request.client.name } /* Inject retransmission here */ let initialReport: ConnectionState = { status: 'BUFFER' } let reportSubject: BehaviorSubject = new BehaviorSubject(initialReport) let retransmission: BufferService = new BufferService(request.server.messageToBePublishedFromApplication, reportSubject, database) let connectionAttribute: ConnectionAttribute = { ConnectionID: { local: '', remote: '' }, outGoing: { MessageToBePublished: retransmission.getMessages(), MessageToBeReceived: null }, inComing: { MessageToBePublished: null, MessageToBeReceived: request.client.messageToBeReceivedFromRemote }, connectionStatus: reportSubject } // connectionAttribute.outGoing.MessageToBePublished?.subscribe(e => console.log((e.message as MessageLog).appData.msgId)) // 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.outGoingInfo) this.connectionAttributes.push(connectionAttribute) console.log(`There is now ${this.connectionAttributes.length} connection Attributes`) } } }