server-client.service.ts 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { BehaviorSubject, Subject } from 'rxjs';
  2. import { ColorCode, Message, ReportStatus, ConnectionAttribute, ConnectionRequest } from '../interfaces/general.interface';
  3. import { GrpcServiceMethod } from './grpc.service.method';
  4. import { FisRetransmissionService } from './fis.retransmission.service';
  5. export class ServerClientManager {
  6. private connectionAttributes: ConnectionAttribute[] = []
  7. private request: ConnectionRequest | any
  8. constructor(private grpcService: GrpcServiceMethod) {
  9. }
  10. public restartServerInDuration(time: number) {
  11. console.log(this.request)
  12. console.log(this.connectionAttributes)
  13. this.grpcService.shutDownServer().then((msg: string) => {
  14. console.log(msg)
  15. setTimeout(() => {
  16. this.generateConnection(this.request)
  17. }, time * 1000)
  18. })
  19. }
  20. public generateConnection(request: ConnectionRequest) {
  21. this.request = request
  22. let database: string
  23. if (request.database) {
  24. database = request.database
  25. } else {
  26. database = request.server.name + request.client.name
  27. }
  28. let initialReport: ReportStatus = { code: ColorCode.YELLOW, message: 'Initialization of the subject' }
  29. let reportSubject: BehaviorSubject<ReportStatus> = new BehaviorSubject(initialReport)
  30. let retransmission: FisRetransmissionService = new FisRetransmissionService(database, reportSubject)
  31. let messageToBePublished: Subject<Message> = retransmission.handleMessage(request.server.messageToBePublishedfromApplication) ?? request.server.messageToBePublishedfromApplication
  32. let connectionAttribute: ConnectionAttribute = {
  33. ConnectionID: {
  34. local: '',
  35. remote: ''
  36. },
  37. outGoing: {
  38. MessageToBePublished: messageToBePublished,
  39. MessageToBeReceived: null
  40. },
  41. inComing: {
  42. MessageToBePublished: null,
  43. MessageToBeReceived: request.client.messageToBeReceivedFromRemote
  44. },
  45. connectionStatus: reportSubject // this is not related to report status for the retrasmission service
  46. }
  47. // This is default connection
  48. if (!request.server.connectionType) {
  49. request.server.connectionType = 'GRPC'
  50. }
  51. // For each connection type:
  52. if (request.server.connectionType == 'GRPC') {
  53. this.grpcService.create(request, connectionAttribute)
  54. this.connectionAttributes.push(connectionAttribute)
  55. }
  56. }
  57. }