import {
  CollaborationMessage,
  NewMessageCallback,
  TransportService,
} from "../types/collaborative/transport_service";
import { UID } from "../types/misc";

export class LocalTransportService implements TransportService<CollaborationMessage> {
  private listeners: { id: UID; callback: NewMessageCallback }[] = [];

  async sendMessage(message: CollaborationMessage) {
    for (const { callback } of this.listeners) {
      callback(message);
    }
  }
  onNewMessage(id: UID, callback: NewMessageCallback<CollaborationMessage>) {
    this.listeners.push({ id, callback });
  }

  leave(id: UID) {
    this.listeners = this.listeners.filter((listener) => listener.id !== id);
  }
}
