58 lines
1.2 KiB
TypeScript
58 lines
1.2 KiB
TypeScript
import { ChatMessage, LocalClient, PeerClient, PeerMetadata, PeerServer, RoomInfo } from "@/network";
|
|
import Peer from "peerjs";
|
|
|
|
export type ConnectionStatus =
|
|
| "connecting"
|
|
| "connected"
|
|
| "disconnected"
|
|
| "error";
|
|
|
|
export interface SharedNetworkState {
|
|
chatLog: ChatMessage[];
|
|
serverID: string | null;
|
|
players: string[];
|
|
}
|
|
|
|
export interface NoNetworkState extends SharedNetworkState {
|
|
peerType: "none";
|
|
connectionStatus: null;
|
|
connectionError?: Error;
|
|
peer: null;
|
|
server: null;
|
|
local: null;
|
|
}
|
|
|
|
export interface ClientNetworkState extends SharedNetworkState {
|
|
peerType: "client";
|
|
connectionStatus: ConnectionStatus;
|
|
connectionError?: Error;
|
|
peer: PeerClient;
|
|
}
|
|
|
|
export interface ServerNetworkState extends SharedNetworkState {
|
|
peerType: "server";
|
|
server: PeerServer;
|
|
local: LocalClient;
|
|
}
|
|
|
|
export type NetworkState =
|
|
| NoNetworkState
|
|
| ClientNetworkState
|
|
| ServerNetworkState;
|
|
|
|
export interface StartServerOptions {
|
|
roomInfo: RoomInfo;
|
|
playerInfo: PeerMetadata;
|
|
|
|
// Testing utils
|
|
_customPeer?: Peer;
|
|
}
|
|
|
|
export interface ConnectOptions {
|
|
serverID: string;
|
|
playerInfo: PeerMetadata;
|
|
|
|
// Testing utils
|
|
_customPeer?: Peer;
|
|
}
|