rework for sse

This commit is contained in:
2024-05-27 23:41:31 +02:00
parent 89c03fe650
commit 2ae7313797
8 changed files with 66 additions and 372 deletions
-47
View File
@@ -1,47 +0,0 @@
import type { IContainer, IFireGemsStack, IInteractibleContainer, IMarket, IMarketStack, IPlayableContainer, IPlayerBoard, IPlayerDiscard, IPlayerHand, IPlayerStack } from "../generic/containers.js"
import type { ICard } from "../generic/index.js"
export interface ICContainer<T> extends IContainer<T> {
onCardsAppend: (cards: Array<ICard>) => void
onDraw: (cards: Array<ICard>) => void
onRemoveCards: (cards: Array<ICard>) => void
onShuffle: () => void
}
export interface ICInteractibleContainer extends IInteractibleContainer {
onSacrifice: (card: ICard) => void
}
export interface ICPlayableContainer extends IPlayableContainer {
onDiscard: (card: ICard) => void
}
export interface ICMarketStack extends IMarketStack {
}
export interface ICMarket extends IMarket {
onBuy: (card: ICard) => void
onBuyInHand: (card: ICard) => void
onBuyInStack: (card: ICard) => void
}
export interface ICFireGemsStack extends IFireGemsStack {
}
export interface ICPlayerStack extends IPlayerStack {
}
export interface ICPlayerDiscard extends IPlayerDiscard {
onPutOnStack: (card: ICard) => void
}
export interface ICPlayerHand extends IPlayerHand {
onPutAllOnBoard: () => void
}
export interface ICPlayerBoard extends IPlayerBoard {
onStunChampion: (card: ICard) => void
}
-61
View File
@@ -1,61 +0,0 @@
import type { ICard, IEffect, IGame, ILobby, IPlayer, ITeam, ITurn, IUser } from "../generic/index.js"
import type { ISLobby } from "../server/index.js"
export interface ICEffect extends IEffect {
}
export interface ICCard extends ICard {
}
export interface ICTurn extends ITurn {
onCardLock: (card: ICard) => void
}
export interface ICPlayer extends IPlayer {
onReadyStateChange: (ready: boolean) => void
}
export interface ICTeam extends ITeam {
damage: (amount: number) => void
join: () => void
onTakeDamage: (amount: number) => void
onPlayerAdd: (player: IPlayer) => void
onPlayerRemove: (player: IPlayer) => void
onStartTurn: () => void
onEndTurn: () => void
onDie: () => void
}
export interface ICGame extends IGame {
join: () => void
kick: (player: IPlayer) => void
leave: () => void
start: () => void
request_join: () => void
request_kick: (player: ICPlayer) => void
request_leave: () => void
request_start: () => void
request_changeRules: () => void
request_gameEnd: () => void
onRulesChange: () => void
onAddTeam: (team: ITeam) => void
onRemoveTeam: (team: ITeam) => void
onGameStart: () => void
onGameEnd: () => void
}
export interface ICUser extends IUser {
}
export interface ICLobby extends ILobby {
request_createGame: () => Promise<ReturnType<ISLobby["request_createGame"]>>
// request_login: () => Promise<ReturnType<ISLobby["request_login"]>>
onAddGame: (args: ReturnType<ISLobby["createGame"]>) => void
onRemoveGame: (args: ReturnType<ISLobby["removeGame"]>) => void
}
+6
View File
@@ -0,0 +1,6 @@
export enum ContainerVisibility {
NONE = "none",
ONLY_LAST = "only_last",
ALL = "all",
PROTECTED = "protected"
}
-55
View File
@@ -1,55 +0,0 @@
import type { ICard, IGame, IGameObject, IPlayer } from "./index.js"
export enum ContainerVisibility {
NONE = "none",
ONLY_LAST = "only_last",
ALL = "all",
PROTECTED = "protected"
}
export interface IContainer<T> extends IGameObject {
owner: T
readonly visibility: ContainerVisibility
}
export interface IInteractibleContainer extends IContainer<IPlayer> {
readonly visibility: ContainerVisibility.ALL | ContainerVisibility.PROTECTED
request_sacrifice: (card: ICard) => void
}
export interface IPlayableContainer extends IInteractibleContainer {
request_discard: (card: ICard) => void
}
export interface IMarketStack extends IContainer<IGame> {
readonly visibility: ContainerVisibility.NONE
}
export interface IMarket extends IContainer<IGame> {
readonly visibility: ContainerVisibility.ALL
request_buy: (card: ICard) => void
request_buyInHand: (card: ICard) => void
request_buyInStack: (card: ICard) => void
}
export interface IFireGemsStack extends IMarket {
}
export interface IPlayerStack extends IContainer<IPlayer> {
readonly visibility: ContainerVisibility.NONE
}
export interface IPlayerDiscard extends IInteractibleContainer {
readonly visibility: ContainerVisibility.ALL
request_putOnStack: (card: ICard) => void
}
export interface IPlayerHand extends IPlayableContainer {
readonly visibility: ContainerVisibility.PROTECTED
}
export interface IPlayerBoard extends IPlayableContainer {
readonly visibility: ContainerVisibility.ALL
request_stunChampion: (card: ICard) => void
}
-94
View File
@@ -1,94 +0,0 @@
import type { IFireGemsStack, IMarket, IMarketStack, IPlayerBoard, IPlayerDiscard, IPlayerHand } from "./containers.js"
export const ClientQueryType = {
ACTION: "action",
SUBSCRIBE: "subscribe",
UNSUBSCRIBE: "unsubscribe",
LOGIN: "login"
} as const
export const ServerQueryType = {
CREATE: "create",
ERROR: "error",
ADD: "add",
REMOVE: "remove",
} as const
export type ClientMessageType = typeof ClientQueryType[keyof typeof ClientQueryType]
export type ServerMessageType = typeof ServerQueryType[keyof typeof ServerQueryType]
export interface ClientMessage {
uuid: string
type: ClientMessageType
target: string
method: string
args: { [key: string]: string }
}
export interface ServerMessage {
type: ServerMessageType
answer_to?: ClientMessage["uuid"]
args: { [key: string]: any }
}
export interface IGameObject {
uuid: string
}
export interface IEffect extends IGameObject {
request_use: () => void
}
export interface ICard extends IGameObject {
}
export interface ITurn extends IGameObject {
readonly effectsAvailables: Array<IEffect>
readonly cardsLocked: Set<ICard>
discardMarkers: number
fuckUMarkers: number
damageReserve: number
goldReserve: number
currentDiscardEffect: IEffect
request_lockCard: (card: ICard) => void
}
export interface IPlayer extends IGameObject {
readonly board: IPlayerBoard
readonly hand: IPlayerHand
readonly discard: IPlayerDiscard
ready: boolean
username: string
user: IUser
request_setReady: (value: boolean) => void
}
export interface ITeam extends IGameObject {
readonly players: Set<IPlayer>
color: string
health: number
request_damage: (amount: number) => void
request_join: (player: IPlayer) => void
}
export interface IGame extends IGameObject {
readonly marketStack: IMarketStack
readonly market: IMarket
readonly fireGems: IFireGemsStack
readonly owner: IPlayer
currentTurn?: ITeam
started: boolean
changeRules: () => void
end: () => void
}
export interface IUser extends IGameObject {
}
export interface ILobby extends IGameObject {
}
+60
View File
@@ -0,0 +1,60 @@
export interface ClientMessage {
uuid: string
target: string
method: string
args: { [key: string]: string }
}
export interface LobbyEvents {
'newGame': (author: IUser, game: IGameListing) => void;
}
type TeamEvents = {
team_addPlayer: { gameObject: string, data: IPlayer },
test: { bite: number, data: IPlayer }
}
type TE = {
[T in keyof TeamEvents]: { event: T } & TeamEvents[T]
}
type ChildEvents = TE
export interface GameEvents {
"createTeam": (author: IUser, team: ITeam) => void
"removeTeam": (author: IUser, team: ITeam) => void
"createPlayer": (author: IUser, player: IPlayer) => void
"removePlayer": (author: IUser, player: IPlayer, reason: string) => void
"childEvent": (event: ChildEvents[keyof ChildEvents]) => void
}
export interface IGameObject {
readonly uuid: string
}
export interface IUser {
readonly username: string
readonly image: string
}
export interface IPlayer extends IGameObject {
}
export interface ITeam extends IGameObject {
}
export interface IGameListing extends IGameObject {
readonly players: IUser[]
readonly started: boolean
readonly owner: string
readonly rules: {}
}
-47
View File
@@ -1,47 +0,0 @@
import type { IContainer, IFireGemsStack, IInteractibleContainer, IMarket, IMarketStack, IPlayableContainer, IPlayerBoard, IPlayerDiscard, IPlayerHand, IPlayerStack } from "../generic/containers.js"
import type { ISCard } from "./index.js"
export interface ISContainer<T> extends IContainer<T> {
appendCards: (cards: Array<ISCard>) => void
draw: (amount: number) => Array<ISCard>
removeCards: (cards: Array<ISCard>) => void
shuffle: () => void
}
export interface ISInteractibleContainer extends IInteractibleContainer {
sacrifice: (card: ISCard) => void
}
export interface ISPlayableContainer extends IPlayableContainer {
discard: (card: ISCard) => void
}
export interface ISMarketStack extends IMarketStack {
}
export interface ISMarket extends IMarket {
buy: (card: ISCard) => void
buyInHand: (card: ISCard) => void
buyInStack: (card: ISCard) => void
}
export interface ISFireGemsStack extends IFireGemsStack {
}
export interface ISPlayerStack extends IPlayerStack {
}
export interface ISPlayerDiscard extends IPlayerDiscard {
putOnStack: (card: ISCard) => void
}
export interface ISPlayerHand extends IPlayerHand {
putAllOnBoard: () => void
}
export interface ISPlayerBoard extends IPlayerBoard {
stunChampion: (card: ISCard) => void
}
-68
View File
@@ -1,68 +0,0 @@
import type { ICard, IEffect, IGame, ILobby, IPlayer, ITeam, ITurn, IUser, ServerMessage } from "../generic/index.js"
import { WebSocket } from "ws"
export interface ISClientProvider {
socket: WebSocket
send: (message: ServerMessage) => void
}
export interface ISQuery {
readonly provider: ISClientProvider
readonly args: { [key: string]: string } | string
readonly method?: string
readonly target: string
accept: (message: Omit<ServerMessage, "answer_to">) => void
cancel: (message: Omit<ServerMessage, "answer_to">) => void
error: (message: string) => void
}
export interface ISEffect extends IEffect {
use: () => void
}
export interface ISCard extends ICard {
}
export interface ISTurn extends ITurn {
lockCard: (card: ICard) => void
}
export interface ISPlayer extends IPlayer {
setReady: (ready: boolean) => void
}
export interface ISTeam extends ITeam {
damage: (amount: number) => void
addPlayer: (player: IPlayer) => void
removePlayer: (player: IPlayer) => void
startTurn: () => void
endTurn: () => void
die: () => void
}
export interface ISGame extends IGame {
addTeam: (team: ISTeam) => void
removeTeam: (team: ISTeam) => void
start: () => void
request_join: (query: ISQuery) => void
request_kick: (query: ISQuery) => void
request_leave: (query: ISQuery) => void
request_start: (query: ISQuery) => void
request_changeRules: (query: ISQuery) => void
request_gameEnd: (query: ISQuery) => void
}
export interface ISUser extends IUser {
}
export interface ISLobby extends ILobby {
createGame: () => string
removeGame: (game: ISGame) => void
request_createGame: (query: ISQuery) => void
// request_login: (query: ISQuery) => void
}