interface.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. import { BehaviorSubject, Observable, Subject, Unsubscribable } from "rxjs"
  2. import { RetransmissionService } from "../utils/retransmission.service"
  3. import { WrappedMessage } from "../utils/message.ordering"
  4. import { ActorInterface, ActorProfile } from "./actor.interface"
  5. /* EVENT BUS */
  6. export interface GeneralEvent {
  7. id: string,
  8. type: EventType,
  9. event: EventMessage,
  10. date: Date,
  11. transmission?: Transmission,
  12. adapters?: AdapterInterface[],
  13. message?: TransportMessage
  14. }
  15. /* MANAGEMENT */
  16. export interface MessageTransmissionManagerInterface<T> extends ActorInterface<T> {
  17. }
  18. export interface AdapterManagerInterface<T> extends ActorInterface<T> {
  19. }
  20. /* TRANSMISSION COMPONENTS */
  21. export interface MessageTransmissionInterface {
  22. }
  23. export interface MessageReceiverInterface extends MessageTransmissionInterface {
  24. getIncoming(): Observable<any>
  25. }
  26. export interface MessageTransmitterInterface extends MessageTransmissionInterface {
  27. emit(message: any): void
  28. }
  29. export interface MessageRequestResponseInterface extends MessageTransmissionInterface {
  30. send(message: any): Observable<any>
  31. }
  32. /* ADAPTER COMPONENTS */
  33. export interface AdapterInterface {
  34. role: TransmissionRole
  35. transport: Transport
  36. }
  37. export interface TransmitterAdapterInterface extends AdapterInterface {
  38. emit(message: WrappedMessage): void
  39. }
  40. export interface ReceiverAdapterInterface extends AdapterInterface {
  41. subscribe(): Observable<any>
  42. }
  43. /* Utils */
  44. export interface TransmissionProfile {
  45. id: string,
  46. name: string,
  47. dateCreated: Date
  48. }
  49. export interface TransmitterProfile extends TransmissionProfile {
  50. }
  51. export interface ReceiverProfile extends TransmissionProfile {
  52. }
  53. export interface RequestResponseProfile extends TransmissionProfile {
  54. }
  55. export interface TransportMessage {
  56. id: string,
  57. dateCreated: Date,
  58. transport: Transport,
  59. target?: string,
  60. payload: any
  61. }
  62. export interface FisMessage {
  63. header: {
  64. messageID: string,
  65. messageName: `NotificationMessage` | `ResponseMessage` | `RequestMessage`
  66. },
  67. data: any
  68. }
  69. export interface Transmission {
  70. clientId: string,
  71. transmitter: MessageTransmitterInterface,
  72. receiver: MessageReceiverInterface,
  73. requestResponse: MessageRequestResponseInterface,
  74. event: Observable<GeneralEvent>
  75. }
  76. export type Transport = 'Websocket' | 'Http' | 'TCP'
  77. export enum AdapterTransmissionRole {
  78. Transmitter,
  79. Receiver,
  80. RequestResponse
  81. }
  82. export type EventType = `General Event` | 'Transport Event' | 'Transmission Event' | 'Adapter Event'
  83. export type TransmissionRole = `Transmitter` | 'Receiver' | 'RequestResponse'
  84. export type EventMessage = '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' | 'New Transport' | 'New Transmission'
  85. export type ConnectionState = 'ONLINE' | 'OFFLINE'
  86. export interface TransportService {
  87. getInfo(): Transport
  88. emit(message: TransportMessage): void
  89. subscribe(): Observable<GeneralEvent> //all messages and whatever event will go through this, easier to implemnet across different transport protocol
  90. }
  91. export interface Info {
  92. transport: Transport
  93. }
  94. export interface ClientObject {
  95. id: string,
  96. dateCreated: Date,
  97. connectionState: BehaviorSubject<ConnectionState>
  98. }
  99. export interface AdapterProfile {
  100. id: string,
  101. transportType: Transport,
  102. }
  103. export interface TransportSet {
  104. transport: Transport,
  105. port: number
  106. }
  107. export interface TransportProfileMessage {
  108. clientId: string,
  109. message?: string,
  110. payload?: any
  111. }