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.
yarn
In 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-player
yarn bundle-player
downloads the CI-built binary from the NineChronicles repository based on theNineChronicles
git submodule commit hash.- Download may fail if the CI-build hasn't been completed. In this case, you can directly build to
dist
as 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 dev
The 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-devtools
After, run mobx-devtools.
mobx-devtools
Run 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-all
Packaging 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-builder
Logs 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 --staged
Install the following extensions in the Visual Studio Code extensions page(Windows: ⇧⌃X, macOS: ⇧⌘X):