2019-10-16 08:31:03 +00:00
|
|
|
import { ChatMessage, LocalClient, PeerClient, PeerMetadata, PeerServer, RoomInfo } from "@/network";
|
2019-09-17 13:22:43 +00:00
|
|
|
import Peer from "peerjs";
|
|
|
|
|
2019-10-16 08:31:03 +00:00
|
|
|
export type ConnectionStatus =
|
|
|
|
| "connecting"
|
|
|
|
| "connected"
|
|
|
|
| "disconnected"
|
|
|
|
| "error";
|
2019-09-17 13:22:43 +00:00
|
|
|
|
|
|
|
export interface SharedNetworkState {
|
|
|
|
chatLog: ChatMessage[];
|
2019-10-16 08:31:03 +00:00
|
|
|
serverID: string | null;
|
|
|
|
players: string[];
|
2019-09-17 13:22:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface NoNetworkState extends SharedNetworkState {
|
|
|
|
peerType: "none";
|
2019-10-16 08:31:03 +00:00
|
|
|
connectionStatus: null;
|
|
|
|
connectionError?: Error;
|
|
|
|
peer: null;
|
|
|
|
server: null;
|
|
|
|
local: null;
|
2019-09-17 13:22:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface ClientNetworkState extends SharedNetworkState {
|
|
|
|
peerType: "client";
|
2019-10-16 08:31:03 +00:00
|
|
|
connectionStatus: ConnectionStatus;
|
2019-09-17 13:22:43 +00:00
|
|
|
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;
|
|
|
|
}
|