Commit 69b0f005 authored by Chunchi Che's avatar Chunchi Che

Merge branch 'feat/service/rerange' into 'main'

rerange service

See merge request mycard/Neos!6
parents 9b927ea0 3c093e3c
Pipeline #17313 passed with stage
in 54 seconds
import { ygopro } from "../api/idl/ocgcore";
import { store } from "../store";
import { setJoined } from "../reducers/joinSlice";
import { postChat } from "../reducers/chatSlice";
import {
player0Enter,
player1Enter,
player0Update,
player1Update,
player0Leave,
player1Leave,
hostChange,
observerIncrement,
observerChange,
updateIsHost,
} from "../reducers/playerSlice";
const READY_STATE = "ready";
const NO_READY_STATE = "not ready";
import handleHsPlayerChange from "./room/hsPlayerChange";
import handleTypeChange from "./room/typeChange";
import handleHsPlayerEnter from "./room/hsPlayerEnter";
import handleJoinGame from "./room/joinGame";
import handleChat from "./room/chat";
import handleHsWatchChange from "./room/hsWatchChange";
export default function handleSocketMessage(e: MessageEvent) {
const pb = ygopro.YgoStocMsg.deserializeBinary(e.data);
const dispatch = store.dispatch;
switch (pb.msg) {
case "stoc_join_game": {
const msg = pb.stoc_join_game;
// todo
handleJoinGame(pb);
dispatch(setJoined());
break;
}
case "stoc_chat": {
const chat = pb.stoc_chat;
handleChat(pb);
dispatch(postChat(chat.msg));
break;
}
case "stoc_hs_player_change": {
const change = pb.stoc_hs_player_change;
if (change.pos > 1) {
console.log("Currently only supported 2v2 mode.");
} else {
switch (change.state) {
case ygopro.StocHsPlayerChange.State.UNKNOWN: {
console.log("Unknown HsPlayerChange State");
break;
}
case ygopro.StocHsPlayerChange.State.MOVE: {
console.log(
"Player " + change.pos + " moved to " + change.moved_pos
);
let src = change.pos;
let dst = change.moved_pos;
// todo
// if (src === 0 && dst === 1) {
// setPlayer1(player0);
// setPlayer0({});
// } else if (src === 1 && dst === 0) {
// setPlayer0(player1);
// setPlayer1({});
// }
break;
}
case ygopro.StocHsPlayerChange.State.READY: {
change.pos == 0
? dispatch(player0Update(READY_STATE))
: dispatch(player1Update(READY_STATE));
break;
}
case ygopro.StocHsPlayerChange.State.NO_READY: {
change.pos == 0
? dispatch(player0Update(NO_READY_STATE))
: dispatch(player1Update(NO_READY_STATE));
break;
}
case ygopro.StocHsPlayerChange.State.LEAVE: {
change.pos == 0 ? dispatch(player0Leave) : dispatch(player1Leave);
break;
}
case ygopro.StocHsPlayerChange.State.TO_OBSERVER: {
change.pos == 0 ? dispatch(player0Leave) : dispatch(player1Leave);
dispatch(observerIncrement());
break;
}
default: {
break;
}
}
}
handleHsPlayerChange(pb);
break;
}
case "stoc_hs_watch_change": {
const count = pb.stoc_hs_watch_change.count;
dispatch(observerChange(count));
handleHsWatchChange(pb);
break;
}
case "stoc_hs_player_enter": {
const name = pb.stoc_hs_player_enter.name;
const pos = pb.stoc_hs_player_enter.pos;
if (pos > 1) {
console.log("Currently only supported 2v2 mode.");
} else {
pos == 0 ? dispatch(player0Enter(name)) : dispatch(player1Enter(name));
}
handleHsPlayerEnter(pb);
break;
}
case "stoc_type_change": {
const selfType = pb.stoc_type_change.self_type;
const assertHost = pb.stoc_type_change.is_host;
dispatch(updateIsHost(assertHost));
if (assertHost) {
switch (selfType) {
case ygopro.StocTypeChange.SelfType.PLAYER1: {
dispatch(hostChange(0));
dispatch(player0Update(NO_READY_STATE));
break;
}
case ygopro.StocTypeChange.SelfType.PLAYER2: {
dispatch(hostChange(0));
dispatch(player1Update(NO_READY_STATE));
break;
}
default: {
break;
}
}
}
handleTypeChange(pb);
break;
}
......
import { ygopro } from "../../api/idl/ocgcore";
import { postChat } from "../../reducers/chatSlice";
import { store } from "../../store";
export default function handleChat(pb: ygopro.YgoStocMsg) {
const dispatch = store.dispatch;
const chat = pb.stoc_chat;
dispatch(postChat(chat.msg));
}
import { ygopro } from "../../api/idl/ocgcore";
import { store } from "../../store";
import {
player0Update,
player1Update,
player0Leave,
player1Leave,
observerIncrement,
} from "../../reducers/playerSlice";
const READY_STATE = "ready";
const NO_READY_STATE = "not ready";
export default function handleHsPlayerChange(pb: ygopro.YgoStocMsg) {
const dispatch = store.dispatch;
const change = pb.stoc_hs_player_change;
if (change.pos > 1) {
console.log("Currently only supported 2v2 mode.");
} else {
switch (change.state) {
case ygopro.StocHsPlayerChange.State.UNKNOWN: {
console.log("Unknown HsPlayerChange State");
break;
}
case ygopro.StocHsPlayerChange.State.MOVE: {
console.log("Player " + change.pos + " moved to " + change.moved_pos);
let src = change.pos;
let dst = change.moved_pos;
console.log("Currently unsupport Move type of StocHsPlayerChange.");
// todo
// if (src === 0 && dst === 1) {
// setPlayer1(player0);
// setPlayer0({});
// } else if (src === 1 && dst === 0) {
// setPlayer0(player1);
// setPlayer1({});
// }
break;
}
case ygopro.StocHsPlayerChange.State.READY: {
change.pos == 0
? dispatch(player0Update(READY_STATE))
: dispatch(player1Update(READY_STATE));
break;
}
case ygopro.StocHsPlayerChange.State.NO_READY: {
change.pos == 0
? dispatch(player0Update(NO_READY_STATE))
: dispatch(player1Update(NO_READY_STATE));
break;
}
case ygopro.StocHsPlayerChange.State.LEAVE: {
change.pos == 0 ? dispatch(player0Leave) : dispatch(player1Leave);
break;
}
case ygopro.StocHsPlayerChange.State.TO_OBSERVER: {
change.pos == 0 ? dispatch(player0Leave) : dispatch(player1Leave);
dispatch(observerIncrement());
break;
}
default: {
break;
}
}
}
}
import { ygopro } from "../../api/idl/ocgcore";
import { store } from "../../store";
import { player0Enter, player1Enter } from "../../reducers/playerSlice";
export default function handleHsPlayerEnter(pb: ygopro.YgoStocMsg) {
const dispatch = store.dispatch;
const name = pb.stoc_hs_player_enter.name;
const pos = pb.stoc_hs_player_enter.pos;
if (pos > 1) {
console.log("Currently only supported 2v2 mode.");
} else {
pos == 0 ? dispatch(player0Enter(name)) : dispatch(player1Enter(name));
}
}
import { ygopro } from "../../api/idl/ocgcore";
import { observerChange } from "../../reducers/playerSlice";
import { store } from "../../store";
export default function handleHsWatchChange(pb: ygopro.YgoStocMsg) {
const dispatch = store.dispatch;
const count = pb.stoc_hs_watch_change.count;
dispatch(observerChange(count));
}
import { ygopro } from "../../api/idl/ocgcore";
import { store } from "../../store";
import { setJoined } from "../../reducers/joinSlice";
export default function handleJoinGame(pb: ygopro.YgoStocMsg) {
const dispatch = store.dispatch;
const msg = pb.stoc_join_game;
// todo
dispatch(setJoined());
}
import { ygopro } from "../../api/idl/ocgcore";
import {
player0Update,
player1Update,
hostChange,
updateIsHost,
} from "../../reducers/playerSlice";
import { store } from "../../store";
const NO_READY_STATE = "not ready";
export default function handleTypeChange(pb: ygopro.YgoStocMsg) {
const dispatch = store.dispatch;
const selfType = pb.stoc_type_change.self_type;
const assertHost = pb.stoc_type_change.is_host;
dispatch(updateIsHost(assertHost));
if (assertHost) {
switch (selfType) {
case ygopro.StocTypeChange.SelfType.PLAYER1: {
dispatch(hostChange(0));
dispatch(player0Update(NO_READY_STATE));
break;
}
case ygopro.StocTypeChange.SelfType.PLAYER2: {
dispatch(hostChange(0));
dispatch(player1Update(NO_READY_STATE));
break;
}
default: {
break;
}
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment