connector.interface.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import { BehaviorSubject, Observable, Subject } from "rxjs"
  2. import { Bus, FisMessage, ReceiverProfile, TransmissionProfile, TransmitterProfile } from "./transport.interface"
  3. import { WrappedMessage } from "../utils/message.ordering"
  4. import { AdapterSet } from "./general.interface"
  5. export type TYPE = {
  6. adapterProfile: AdapterProfile,
  7. transmitterProfile: TransmitterProfile,
  8. receiverProfile: ReceiverProfile,
  9. requestResponseProfile: TransmissionProfile
  10. }
  11. export interface AdapterProfile {
  12. id: string,
  13. transportType: Transport,
  14. }
  15. export interface AdapterManager {
  16. getAdapter(clientId: string, transportService: TransportService): AdapterSet | null
  17. }
  18. export interface AdaptorBase {
  19. connector: TransportService // this one will refer to the actual tranpsort service like websocket and so on
  20. connectorProfile: AdapterProfile
  21. connectionStateBus: Subject<ConnectionState>
  22. adaptorTransmissionRole: AdaptorTransmissionRole
  23. event: Subject<TransportEvent>
  24. subscribeConnectionState(): Observable<ConnectionState>
  25. publishConnectionState(): void
  26. connect(): void
  27. disconnect(): void
  28. getInfo(): AdapterProfile
  29. setAdapterProfile(id: string, transportType: Transport): void
  30. }
  31. export interface TransmitterAdapter extends AdaptorBase {
  32. emit(message: WrappedMessage): void
  33. }
  34. export interface ReceiverAdapter extends AdaptorBase {
  35. getMessageBus(bus: Bus): Observable<any>
  36. }
  37. export interface RequestResponseAdapter extends TransmitterAdapter, ReceiverAdapter {
  38. send(message: WrappedMessage): Observable<FisMessage>
  39. }
  40. export type ConnectionState = 'ONLINE' | 'OFFLINE'
  41. export enum AdaptorTransmissionRole {
  42. Transmitter,
  43. Receiver,
  44. RequestResponse
  45. }
  46. export enum Transport {
  47. Websocket = `Websocket`,
  48. Grpc = `Grpc`,
  49. Http = `Http`,
  50. TCP = 'TCP'
  51. }
  52. // TO be used for transmission at the trasport level
  53. export interface TransportMessage {
  54. id: string,
  55. dateCreated: Date,
  56. transport: Transport,
  57. target?: string,
  58. payload: any
  59. }
  60. export interface TransportEvent {
  61. id: string,
  62. event: Event,
  63. data: any
  64. }
  65. export type Event = 'Server Started' | 'New Client' | 'Client Connected' | 'Client Re-connected' | 'Client Disconnected' | `Server Disconnected` | 'New Message' | `Notification` | `New Server` | `Server Connected` | `New Transport` | 'New Adapter' | 'Re-Flush'
  66. export interface TransportService {
  67. getInfo(): Transport
  68. emit(message: TransportMessage): void
  69. subscribe(): Observable<TransportEvent> //all messages and whatever event will go through this, easier to implemnet across different transport protocol
  70. }
  71. export interface Info {
  72. transport: Transport
  73. }
  74. export interface ClientObject {
  75. id: string,
  76. dateCreated: Date,
  77. connectionState: BehaviorSubject<ConnectionState>
  78. }