2023-11-24 11:15:26 +08:00
|
|
|
import MainControl from "@/Common/MainControl/MainControl";
|
|
|
|
|
import BusinessTypeSetting, { BusinessEnum } from "@/_BusinessTypeSetting/BusinessTypeSetting";
|
|
|
|
|
import { PlayerData } from "@/define/playerData";
|
2023-11-23 16:33:21 +08:00
|
|
|
import { IGameItems } from "@/types";
|
|
|
|
|
import { ReactNode, createContext, useContext, useState } from "react";
|
|
|
|
|
|
|
|
|
|
type GameItemsProviderProps = {
|
|
|
|
|
children: ReactNode;
|
|
|
|
|
};
|
|
|
|
|
const GameItemsContext = createContext<IGameItems>(undefined);
|
|
|
|
|
|
|
|
|
|
export function useGameItems() {
|
|
|
|
|
return useContext(GameItemsContext);
|
|
|
|
|
}
|
|
|
|
|
export let gameObj: IGameItems = null;
|
|
|
|
|
|
|
|
|
|
export function GameItemsProvider({ children }: GameItemsProviderProps) {
|
|
|
|
|
const [gameId, setGameId] = useState<number>(null);
|
2023-11-24 11:15:26 +08:00
|
|
|
const [player, setPlayer] = useState<PlayerData>({
|
|
|
|
|
token: "",
|
|
|
|
|
});
|
2023-11-23 16:33:21 +08:00
|
|
|
|
|
|
|
|
const game: IGameItems = gameObj = {
|
|
|
|
|
onLoad,
|
|
|
|
|
gameId,
|
2023-11-24 11:15:26 +08:00
|
|
|
setGameId,
|
|
|
|
|
player,
|
|
|
|
|
setPlayer
|
2023-11-23 16:33:21 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
async function onLoad(serverType: BusinessEnum.ServerType) {
|
2023-11-24 11:15:26 +08:00
|
|
|
new MainControl();
|
2023-11-23 16:33:21 +08:00
|
|
|
await Promise.all([
|
2023-11-24 11:15:26 +08:00
|
|
|
// 設定執行環境
|
|
|
|
|
setBusinessType(serverType),
|
2023-11-23 16:33:21 +08:00
|
|
|
|
|
|
|
|
// // 設定LineTools環境
|
|
|
|
|
// await setLineTools(),
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
2023-11-24 11:15:26 +08:00
|
|
|
/** 設定執行環境 */
|
|
|
|
|
function setBusinessType(useServerType: BusinessEnum.ServerType): void {
|
|
|
|
|
// 連線參數自定義
|
|
|
|
|
const queryParameters = new URLSearchParams(location.search);
|
|
|
|
|
const servertype: string = queryParameters.get("servertype") ?? useServerType.toString();
|
|
|
|
|
const host: string = queryParameters.get("host");
|
|
|
|
|
const port: string = queryParameters.get("port");
|
|
|
|
|
const patch: string = queryParameters.get("patch");
|
|
|
|
|
const downloadurl: string = queryParameters.get("downloadurl");
|
|
|
|
|
const liffid: string = queryParameters.get("liffid");
|
|
|
|
|
if (servertype) {
|
|
|
|
|
// 自定預設環境
|
|
|
|
|
BusinessTypeSetting.UseServerType = +servertype;
|
|
|
|
|
BusinessTypeSetting.UseHost = BusinessTypeSetting.GetHostUrl(BusinessTypeSetting.UseServerType);
|
|
|
|
|
BusinessTypeSetting.UsePort = BusinessTypeSetting.GetPortNum(BusinessTypeSetting.UseServerType);
|
|
|
|
|
BusinessTypeSetting.UsePatch = BusinessTypeSetting.GetPatchUrl(BusinessTypeSetting.UseServerType);
|
|
|
|
|
BusinessTypeSetting.UseDownloadUrl = BusinessTypeSetting.GetDownloadUrl(BusinessTypeSetting.UseServerType);
|
|
|
|
|
BusinessTypeSetting.UseLiffID = BusinessTypeSetting.GetLiffID(BusinessTypeSetting.UseServerType);
|
|
|
|
|
BusinessTypeSetting.UseLineID = BusinessTypeSetting.GetLineID(BusinessTypeSetting.UseServerType);
|
|
|
|
|
}
|
|
|
|
|
if (host) {
|
|
|
|
|
// 自定連線1(有自定則無視UseServerType)
|
|
|
|
|
BusinessTypeSetting.UseHost = host;
|
|
|
|
|
}
|
|
|
|
|
if (port) {
|
|
|
|
|
// 自定連線2(有自定則無視UseServerType)
|
|
|
|
|
BusinessTypeSetting.UsePort = +port;
|
|
|
|
|
}
|
|
|
|
|
if (patch) {
|
|
|
|
|
// 自定連資源伺服器(有自定則無視UseServerType)
|
|
|
|
|
BusinessTypeSetting.UsePatch = patch;
|
|
|
|
|
}
|
|
|
|
|
if (downloadurl) {
|
|
|
|
|
// 自定連靜態伺服器(有自定則無視UseServerType)
|
|
|
|
|
BusinessTypeSetting.UseDownloadUrl = downloadurl;
|
|
|
|
|
}
|
|
|
|
|
if (liffid) {
|
|
|
|
|
// 自定連Line Liff(有自定則無視UseServerType)
|
|
|
|
|
BusinessTypeSetting.UseLiffID = liffid;
|
|
|
|
|
}
|
|
|
|
|
return;
|
2023-11-23 16:33:21 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<GameItemsContext.Provider value={game}>
|
|
|
|
|
{children}
|
|
|
|
|
</GameItemsContext.Provider>
|
|
|
|
|
);
|
|
|
|
|
}
|