diff --git a/src/components/header/index.tsx b/src/components/header/index.tsx index 5719898..c2e7ba3 100644 --- a/src/components/header/index.tsx +++ b/src/components/header/index.tsx @@ -32,7 +32,7 @@ export default function Header() { useEffect(() => { - + const cookieLocale = document.cookie.split("; ") .find((row) => row.startsWith("MYNEXTAPP_LOCALE")) ?.split("=")[1]; @@ -43,7 +43,7 @@ export default function Header() { } else { setLocale(cookieLocale) } - + } else { let browserLocale = navigator.language.slice(0, 2); @@ -405,7 +405,8 @@ export default function Header() { value={connectionType} onChange={(e) => setConnectionType(e.target.value)} > - + + @@ -464,12 +465,14 @@ export default function Header() { > {transI18n("connect")} - + {connectionType !== "Native" && ( + + )} diff --git a/src/lib/socket.ts b/src/lib/socket.ts index 392ec93..838dfa4 100644 --- a/src/lib/socket.ts +++ b/src/lib/socket.ts @@ -13,6 +13,16 @@ const notify = (msg: string, type: 'info' | 'success' | 'error' = 'info') => { else toast.info(msg); }; +function safeParse(json: unknown | string) { + try { + return typeof json === "string" ? JSON.parse(json) : json; + } catch (e) { + console.error("JSON parse error:", e, json); + return null; + } +} + + export const connectSocket = (): Socket => { const { host, port, connectionType, setStatus } = useSocketStore.getState(); const { @@ -30,7 +40,10 @@ export const connectSocket = (): Socket => { } = useBattleDataStore.getState(); let url = `${host}:${port}`; - if (connectionType === "FireflyPSLocal") { + if (connectionType === "Native") { + url = "http://localhost:1305" + } + else if (connectionType === "PS") { url = "http://localhost:21000" } @@ -80,17 +93,60 @@ export const connectSocket = (): Socket => { if (isSocketConnected()) onConnect(); - socket.on("OnSetBattleLineup", (json) => onSetBattleLineupService(JSON.parse(json))); - socket.on("OnTurnEnd", (json) => onTurnEndService(JSON.parse(json))); - socket.on("OnUseSkill", (json) => onUseSkillService(JSON.parse(json))); - socket.on("OnKill", (json) => onKillService(JSON.parse(json))); - socket.on("OnDamage", (json) => onDamageService(JSON.parse(json))); - socket.on('OnBattleBegin', (json) => onBattleBegin(JSON.parse(json))); - socket.on('OnTurnBegin', (json) => onTurnBeginService(JSON.parse(json))); - socket.on('OnBattleEnd', (json) => onBattleEndService(JSON.parse(json))); - socket.on('OnUpdateCycle', (json) => onUpdateCycleService(JSON.parse(json))); - socket.on('OnUpdateWave', (json) => OnUpdateWaveService(JSON.parse(json))); - socket.on('OnCreateBattle', (json) => onCreateBattleService(JSON.parse(json))); + socket.on("OnSetBattleLineup", (json) => { + const data = safeParse(json); + if (data) onSetBattleLineupService(data); + }); + + socket.on("OnTurnEnd", (json) => { + const data = safeParse(json); + if (data) onTurnEndService(data); + }); + + socket.on("OnUseSkill", (json) => { + const data = safeParse(json); + if (data) onUseSkillService(data); + }); + + socket.on("OnKill", (json) => { + const data = safeParse(json); + if (data) onKillService(data); + }); + + socket.on("OnDamage", (json) => { + const data = safeParse(json); + if (data) onDamageService(data); + }); + + socket.on("OnBattleBegin", (json) => { + const data = safeParse(json); + if (data) onBattleBegin(data); + }); + + socket.on("OnTurnBegin", (json) => { + const data = safeParse(json); + if (data) onTurnBeginService(data); + }); + + socket.on("OnBattleEnd", (json) => { + const data = safeParse(json); + if (data) onBattleEndService(data); + }); + + socket.on("OnUpdateCycle", (json) => { + const data = safeParse(json); + if (data) onUpdateCycleService(data); + }); + + socket.on("OnUpdateWave", (json) => { + const data = safeParse(json); + if (data) OnUpdateWaveService(data); + }); + + socket.on("OnCreateBattle", (json) => { + const data = safeParse(json); + if (data) onCreateBattleService(data); + }); socket.on("Error", (msg: string) => { console.error("Server Error:", msg); diff --git a/src/stores/socketSettingStore.ts b/src/stores/socketSettingStore.ts index 006061e..209ed4d 100644 --- a/src/stores/socketSettingStore.ts +++ b/src/stores/socketSettingStore.ts @@ -18,7 +18,7 @@ const useSocketStore = create()( host: "http://localhost", port: 3443, status: false, - connectionType: "FireflyPSLocal", + connectionType: "Native", setHost: (host: string) => set({ host }), setConnectionType: (connectionType: string) => set({ connectionType }), setPort: (port: number) => set({ port }),