diff --git a/src/app/infra/socket/adapter.ts b/src/app/infra/socket/adapter.ts new file mode 100644 index 000000000..2b30cec63 --- /dev/null +++ b/src/app/infra/socket/adapter.ts @@ -0,0 +1,13 @@ +import { Observable, BehaviorSubject } from 'rxjs'; +import { Result } from 'neverthrow'; +import { HubConnection } from '@microsoft/signalr'; +import { ISignalRInput } from './type'; + +export abstract class ISignalRService { + abstract establishConnection(): Promise>; + abstract sendData(input: ISignalRInput): Promise; + abstract join(): void; + abstract getData(): Observable<{ method: string; data: T }>; + abstract getConnectionState(): Observable; + abstract newConnection(): void; +} \ No newline at end of file diff --git a/src/app/infra/socket/signalR/signal-r.service.ts b/src/app/infra/socket/signalR/signal-r.service.ts index ddc22f9aa..3d51de086 100644 --- a/src/app/infra/socket/signalR/signal-r.service.ts +++ b/src/app/infra/socket/signalR/signal-r.service.ts @@ -9,17 +9,10 @@ import { Result } from 'neverthrow'; import { HubConnection } from '@microsoft/signalr'; import { MessageOutPutDataDTO } from 'src/app/module/chat/data/dto/message/messageOutputDTO'; import { UserTypingDTO } from 'src/app/module/chat/data/dto/typing/typingInputDTO'; +import { ISignalRInput } from '../type'; const { App } = Plugins; -const SignalRInputSchema = z.object({ - method: z.string(), - data: z.object({ - requestId: z.string(), - }).catchall(z.unknown()), // Allows any additional properties with unknown values -}) - -export type ISignalRInput = z.infer; @Injectable({ providedIn: 'root' diff --git a/src/app/infra/socket/signalR/signalR.ts b/src/app/infra/socket/signalR/signalR.ts index e6dff7fef..5e61d19c3 100644 --- a/src/app/infra/socket/signalR/signalR.ts +++ b/src/app/infra/socket/signalR/signalR.ts @@ -4,8 +4,8 @@ import { ok, Result, err } from 'neverthrow'; import { SessionStore } from 'src/app/store/session.service'; import { filter, first } from 'rxjs/operators'; import { v4 as uuidv4 } from 'uuid' -import { ISignalRInput } from './signal-r.service'; import { MessageOutPutDataDTO } from 'src/app/module/chat/data/dto/message/messageOutputDTO'; +import { ISignalRInput } from '../type'; export interface SocketMessage { method: string, diff --git a/src/app/infra/socket/type.ts b/src/app/infra/socket/type.ts new file mode 100644 index 000000000..f8f7e35e3 --- /dev/null +++ b/src/app/infra/socket/type.ts @@ -0,0 +1,10 @@ +import { z } from "zod"; + +const SignalRInputSchema = z.object({ + method: z.string(), + data: z.object({ + requestId: z.string(), + }).catchall(z.unknown()), // Allows any additional properties with unknown values +}) + +export type ISignalRInput = z.infer;