This is an electron based multi-platform launcher to run Nine Chronicles. The basic structure is as follows:
./src
| +-- resources
| +-- styles
| +-- views
| | +-- MainView.tsx
| | +-- LoginView.tsx
| | +-- LobbyView.tsx
| +-- main-process.ts
| +-- App.tsx
First, install all dependencies required for development.
yarnIn addition, there are two binaries required:
- 9C Headless (Standalone): can be built with
yarn build-headless(.NET Core SDK required) - 9C Unity Player (9c.exe/9c.app): can be downloaded with
yarn bundle-playeryarn bundle-playerdownloads the CI-built binary from the NineChronicles repository based on theNineChroniclesgit submodule commit hash.- Download may fail if the CI-build hasn't been completed. In this case, you can directly build to
distas the output directory with Unity Editor.
Place the two binaries in the exact path as visualized below:
./src
./dist
| +-- 9c.(exe|app) // 9C Unity Player
| +-- publish // 9C Headless (Standalone)
| | +-- Libpalnet.dll
| | +-- Grpc.Core.dll
| | +-- ...
| | +-- NineChronicles.Standalone.Executable(.exe)
After, run the following command.
yarn dev위 명령은 내부적으로 알아서 NineChronicles.Headless 서버도 함께 실행합니다.
별도로 띄워둔 NineChronicles.Headless 서버에 붙이고 싶을 경우, NC_RPC_SERVER_HOST,
NC_RPC_SERVER_PORT, NC_GRAPHQL_SERVER_HOST, NC_GRAPHQL_SERVER_PORT
환경 변수를 활용할 수 있습니다. (넷 중 하나만 설정되어도 커스텀 RPC 서버 모드로 동작합니다.)
NC_RPC_SERVER_HOST=127.0.0.1 \
NC_RPC_SERVER_PORT=23142 \
NC_GRAPHQL_SERVER_HOST=127.0.0.1 \
NC_GRAPHQL_SERVER_PORT=23061 \
yarn devThe basic frontend has webpack-hot-reload, which automatically reflects code changes.
Developing the renderer process does not require electron relaunch. However, when there's a change in the main process, electron relaunch is required.
mobx-devtools can be used in this project. First, install a standalone mobx-devtools.
yarn global add mobx-devtoolsAfter, run mobx-devtools.
mobx-devtoolsRun yarn server & yarn start. The global state will appear on mobx-devtools.
yarn
yarn build # development build
yarn build-headless # 9C Headless (Standalone) build (.NET Core SDK required)
yarn bundle-player # 9C Unity Player download
APV_SIGN_KEY=... APV_NO=... yarn sign-apv # APV sign (planet command required)
yarn build-prod # production build# generate/sign a new APV with the given private key and pack
APV_SIGN_KEY=... yarn pack-all
# generate/sign a specific APV with the given private key and pack
APV_SIGN_KEY=... APV_NO=1234 yarn pack-all
# pack with the given APV
APV=... yarn pack-all
# pack without APV (for reusing the APV of the latest release)
yarn pack-allPackaging requires the following environment variables. If both the APV and APV_SIGN_KEY are ommited,
APV(App Protocol Version) signing will not take place.
APV: APV token (Libplanet.Net.AppProtocolVersion.Token). If an APV is provided, the other environment variables will be ignored and the build and packaged app will be configured to use thatAPV.APV_SIGN_KEY: Hexadecimal string of the private key used for APV signingAPV_NO: APV number (Libplanet.Net.AppProtocolVersion.Version). When ommited, packaging will automatically use download.nine-chronicles.com's latest version number plus 1.
For replacing the configuration content of config.json in the already packed Windows.zip or macOS.tar.gz, it's convenient to use the scripts/extract-config.sh and scripts/replace-config.sh scripts.
# extract config.json content from package (supports Windows.zip and macOS.tar.gz)
scripts/extract-config.sh path/Windows.zip > config.json
# replace config.json content in package (supports Windows.zip and macOS.tar.gz)
scripts/replace-config.sh path/Windows.zip < config.json# Windows (nsis)
# macOS (dmg, zip)
yarn pack-all:electron-builderLogs are saved in the following paths:
- on macOS: ~/Library/Logs/{app name}/{process type}.log
- on Windows: %USERPROFILE%\AppData\Roaming\{app name}\logs{process type}.log
npx pretty-quick --stagedInstall the following extensions in the Visual Studio Code extensions page(Windows: ⇧⌃X, macOS: ⇧⌘X):