cyberia 3.1.3 → 3.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +0 -2
- package/.github/workflows/engine-cyberia.cd.yml +10 -8
- package/.github/workflows/engine-cyberia.ci.yml +12 -29
- package/.github/workflows/ghpkg.ci.yml +4 -4
- package/.github/workflows/npmpkg.ci.yml +28 -11
- package/.github/workflows/publish.ci.yml +21 -2
- package/.github/workflows/pwa-microservices-template-page.cd.yml +4 -5
- package/.github/workflows/pwa-microservices-template-test.ci.yml +3 -3
- package/.github/workflows/release.cd.yml +14 -10
- package/CHANGELOG.md +783 -1
- package/CLI-HELP.md +95 -18
- package/Dockerfile +0 -2
- package/README.md +290 -220
- package/bin/build.js +24 -7
- package/bin/cyberia.js +2838 -252
- package/bin/deploy.js +747 -125
- package/bin/file.js +9 -0
- package/bin/index.js +2838 -252
- package/bin/vs.js +1 -1
- package/conf.js +99 -65
- package/deployment.yaml +18 -164
- package/hardhat/hardhat.config.js +13 -13
- package/hardhat/ignition/modules/ObjectLayerToken.js +1 -1
- package/hardhat/package-lock.json +2559 -5864
- package/hardhat/package.json +14 -23
- package/hardhat/scripts/deployObjectLayerToken.js +1 -1
- package/hardhat/test/ObjectLayerToken.js +4 -2
- package/hardhat/types/ethers-contracts/ObjectLayerToken.ts +690 -0
- package/hardhat/types/ethers-contracts/common.ts +92 -0
- package/hardhat/types/ethers-contracts/factories/ObjectLayerToken__factory.ts +1055 -0
- package/hardhat/types/ethers-contracts/factories/index.ts +4 -0
- package/hardhat/types/ethers-contracts/hardhat.d.ts +47 -0
- package/hardhat/types/ethers-contracts/index.ts +6 -0
- package/jsconfig.json +1 -1
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +6 -5
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +6 -5
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +18 -164
- package/manifests/deployment/dd-cyberia-development/proxy.yaml +7 -79
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -6
- package/manifests/deployment/dd-test-development/deployment.yaml +112 -28
- package/manifests/deployment/dd-test-development/proxy.yaml +46 -1
- package/manifests/deployment/playwright/deployment.yaml +1 -1
- package/nodemon.json +1 -1
- package/package.json +39 -24
- package/proxy.yaml +7 -79
- package/scripts/k3s-node-setup.sh +2 -2
- package/scripts/nat-iptables.sh +103 -18
- package/scripts/rhel-grpc-setup.sh +56 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +58 -14
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +23 -14
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +5 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +148 -20
- package/src/api/core/core.controller.js +10 -10
- package/src/api/core/core.service.js +10 -10
- package/src/api/crypto/crypto.controller.js +8 -8
- package/src/api/crypto/crypto.service.js +8 -8
- package/src/api/cyberia-action/cyberia-action.controller.js +74 -0
- package/src/api/cyberia-action/cyberia-action.model.js +87 -0
- package/src/api/cyberia-action/cyberia-action.router.js +27 -0
- package/src/api/cyberia-action/cyberia-action.service.js +42 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +93 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +36 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +29 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +51 -0
- package/src/api/cyberia-entity/cyberia-entity.controller.js +74 -0
- package/src/api/cyberia-entity/cyberia-entity.model.js +24 -0
- package/src/api/cyberia-entity/cyberia-entity.router.js +27 -0
- package/src/api/cyberia-entity/cyberia-entity.service.js +42 -0
- package/src/api/cyberia-instance/cyberia-fallback-world.js +178 -0
- package/src/api/cyberia-instance/cyberia-instance.controller.js +92 -0
- package/src/api/cyberia-instance/cyberia-instance.model.js +87 -0
- package/src/api/cyberia-instance/cyberia-instance.router.js +63 -0
- package/src/api/cyberia-instance/cyberia-instance.service.js +156 -0
- package/src/api/cyberia-instance/cyberia-portal-connector.js +260 -0
- package/src/api/cyberia-instance/cyberia-world-generator.js +505 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +74 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +574 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +231 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +27 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +46 -0
- package/src/api/cyberia-map/cyberia-map.controller.js +79 -0
- package/src/api/cyberia-map/cyberia-map.model.js +30 -0
- package/src/api/cyberia-map/cyberia-map.router.js +40 -0
- package/src/api/cyberia-map/cyberia-map.service.js +74 -0
- package/src/api/cyberia-quest/cyberia-quest.controller.js +74 -0
- package/src/api/cyberia-quest/cyberia-quest.model.js +67 -0
- package/src/api/cyberia-quest/cyberia-quest.router.js +27 -0
- package/src/api/cyberia-quest/cyberia-quest.service.js +42 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +74 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +49 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +27 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +42 -0
- package/src/api/default/default.controller.js +10 -10
- package/src/api/default/default.service.js +10 -10
- package/src/api/document/document.controller.js +12 -12
- package/src/api/document/document.model.js +10 -16
- package/src/api/file/file.controller.js +8 -8
- package/src/api/file/file.model.js +10 -10
- package/src/api/file/file.ref.json +18 -0
- package/src/api/file/file.service.js +36 -36
- package/src/api/instance/instance.controller.js +10 -10
- package/src/api/instance/instance.model.js +4 -10
- package/src/api/instance/instance.service.js +10 -10
- package/src/api/ipfs/ipfs.controller.js +15 -36
- package/src/api/ipfs/ipfs.model.js +47 -47
- package/src/api/ipfs/ipfs.router.js +8 -13
- package/src/api/ipfs/ipfs.service.js +67 -129
- package/src/api/object-layer/object-layer.controller.js +12 -12
- package/src/api/object-layer/object-layer.model.js +4 -17
- package/src/api/object-layer/object-layer.router.js +30 -0
- package/src/api/object-layer/object-layer.service.js +126 -43
- package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +10 -10
- package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +6 -16
- package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +18 -14
- package/src/api/test/test.controller.js +8 -8
- package/src/api/test/test.service.js +8 -8
- package/src/api/user/guest.service.js +99 -0
- package/src/api/user/user.controller.js +6 -6
- package/src/api/user/user.model.js +8 -13
- package/src/api/user/user.service.js +11 -27
- package/src/cli/cluster.js +68 -21
- package/src/cli/db.js +753 -825
- package/src/cli/deploy.js +215 -125
- package/src/cli/env.js +29 -0
- package/src/cli/fs.js +82 -8
- package/src/cli/image.js +43 -1
- package/src/cli/index.js +74 -3
- package/src/cli/kubectl.js +211 -0
- package/src/cli/release.js +340 -0
- package/src/cli/repository.js +475 -74
- package/src/cli/run.js +582 -43
- package/src/cli/secrets.js +73 -0
- package/src/cli/ssh.js +1 -1
- package/src/cli/static.js +43 -115
- package/src/cli/test.js +3 -3
- package/src/client/Cryptokoyn.index.js +18 -22
- package/src/client/CyberiaPortal.index.js +19 -24
- package/src/client/Default.index.js +21 -34
- package/src/client/Itemledger.index.js +20 -27
- package/src/client/Underpost.index.js +19 -24
- package/src/client/components/core/404.js +4 -4
- package/src/client/components/core/500.js +4 -4
- package/src/client/components/core/Account.js +73 -60
- package/src/client/components/core/AgGrid.js +23 -33
- package/src/client/components/core/Alert.js +12 -13
- package/src/client/components/core/AppStore.js +69 -0
- package/src/client/components/core/Auth.js +35 -37
- package/src/client/components/core/Badge.js +7 -13
- package/src/client/components/core/BtnIcon.js +15 -17
- package/src/client/components/core/CalendarCore.js +43 -64
- package/src/client/components/core/Chat.js +13 -15
- package/src/client/components/core/ClientEvents.js +87 -0
- package/src/client/components/core/ColorPaletteElement.js +309 -0
- package/src/client/components/core/Content.js +17 -14
- package/src/client/components/core/Css.js +15 -71
- package/src/client/components/core/CssCore.js +12 -16
- package/src/client/components/core/D3Chart.js +4 -4
- package/src/client/components/core/Docs.js +64 -91
- package/src/client/components/core/DropDown.js +194 -96
- package/src/client/components/core/EventBus.js +92 -0
- package/src/client/components/core/EventsUI.js +14 -17
- package/src/client/components/core/FileExplorer.js +96 -228
- package/src/client/components/core/FullScreen.js +47 -75
- package/src/client/components/core/Input.js +24 -69
- package/src/client/components/core/Keyboard.js +26 -19
- package/src/client/components/core/KeyboardAvoidance.js +145 -0
- package/src/client/components/core/LoadingAnimation.js +25 -31
- package/src/client/components/core/LogIn.js +43 -43
- package/src/client/components/core/LogOut.js +25 -16
- package/src/client/components/core/Modal.js +462 -179
- package/src/client/components/core/NotificationManager.js +14 -18
- package/src/client/components/core/Panel.js +54 -51
- package/src/client/components/core/PanelForm.js +44 -144
- package/src/client/components/core/Polyhedron.js +110 -214
- package/src/client/components/core/PublicProfile.js +39 -32
- package/src/client/components/core/Recover.js +48 -44
- package/src/client/components/core/Responsive.js +88 -32
- package/src/client/components/core/RichText.js +9 -18
- package/src/client/components/core/Router.js +24 -3
- package/src/client/components/core/SearchBox.js +37 -37
- package/src/client/components/core/SignUp.js +39 -30
- package/src/client/components/core/SocketIo.js +112 -30
- package/src/client/components/core/SocketIoHandler.js +75 -0
- package/src/client/components/core/Stream.js +143 -95
- package/src/client/components/core/ToggleSwitch.js +8 -20
- package/src/client/components/core/ToolTip.js +5 -17
- package/src/client/components/core/Translate.js +56 -59
- package/src/client/components/core/Validator.js +26 -16
- package/src/client/components/core/Wallet.js +15 -26
- package/src/client/components/core/Webhook.js +40 -7
- package/src/client/components/core/Worker.js +163 -27
- package/src/client/components/core/windowGetDimensions.js +7 -7
- package/src/client/components/cryptokoyn/{MenuCryptokoyn.js → AppShellCryptokoyn.js} +59 -59
- package/src/client/components/cryptokoyn/AppStoreCryptokoyn.js +5 -0
- package/src/client/components/cryptokoyn/CssCryptokoyn.js +15 -15
- package/src/client/components/cryptokoyn/LogInCryptokoyn.js +9 -7
- package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +8 -6
- package/src/client/components/cryptokoyn/RouterCryptokoyn.js +37 -0
- package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +4 -4
- package/src/client/components/cryptokoyn/SignUpCryptokoyn.js +6 -4
- package/src/client/components/cryptokoyn/SocketIoCryptokoyn.js +3 -51
- package/src/client/components/cyberia/InstanceEngineCyberia.js +781 -0
- package/src/client/components/cyberia/MapEngineCyberia.js +1836 -2
- package/src/client/components/cyberia/ObjectLayerEngine.js +19 -0
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +1220 -99
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +252 -316
- package/src/client/components/cyberia-portal/{MenuCyberiaPortal.js → AppShellCyberiaPortal.js} +136 -103
- package/src/client/components/cyberia-portal/AppStoreCyberiaPortal.js +5 -0
- package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +462 -32
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +15 -15
- package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +9 -7
- package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +8 -6
- package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +4 -4
- package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +60 -0
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +4 -4
- package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/SocketIoCyberiaPortal.js +3 -49
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +8 -4
- package/src/client/components/default/{MenuDefault.js → AppShellDefault.js} +91 -91
- package/src/client/components/default/AppStoreDefault.js +5 -0
- package/src/client/components/default/CssDefault.js +12 -12
- package/src/client/components/default/LogInDefault.js +9 -7
- package/src/client/components/default/LogOutDefault.js +8 -6
- package/src/client/components/default/RouterDefault.js +47 -0
- package/src/client/components/default/SettingsDefault.js +4 -4
- package/src/client/components/default/SignUpDefault.js +6 -4
- package/src/client/components/default/SocketIoDefault.js +3 -51
- package/src/client/components/default/TranslateDefault.js +3 -3
- package/src/client/components/itemledger/{MenuItemledger.js → AppShellItemledger.js} +59 -59
- package/src/client/components/itemledger/AppStoreItemledger.js +5 -0
- package/src/client/components/itemledger/CssItemledger.js +15 -15
- package/src/client/components/itemledger/LogInItemledger.js +9 -7
- package/src/client/components/itemledger/LogOutItemledger.js +8 -6
- package/src/client/components/itemledger/RouterItemledger.js +38 -0
- package/src/client/components/itemledger/SettingsItemledger.js +4 -4
- package/src/client/components/itemledger/SignUpItemledger.js +6 -4
- package/src/client/components/itemledger/SocketIoItemledger.js +3 -51
- package/src/client/components/itemledger/TranslateItemledger.js +3 -3
- package/src/client/components/underpost/{MenuUnderpost.js → AppShellUnderpost.js} +92 -92
- package/src/client/components/underpost/AppStoreUnderpost.js +5 -0
- package/src/client/components/underpost/CssUnderpost.js +14 -14
- package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +4 -4
- package/src/client/components/underpost/DocumentSearchProvider.js +1 -1
- package/src/client/components/underpost/LabGalleryUnderpost.js +12 -15
- package/src/client/components/underpost/LogInUnderpost.js +9 -7
- package/src/client/components/underpost/LogOutUnderpost.js +8 -6
- package/src/client/components/underpost/RouterUnderpost.js +45 -0
- package/src/client/components/underpost/SettingsUnderpost.js +4 -4
- package/src/client/components/underpost/SignUpUnderpost.js +6 -4
- package/src/client/components/underpost/SocketIoUnderpost.js +3 -51
- package/src/client/components/underpost/TranslateUnderpost.js +4 -4
- package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +235 -0
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +443 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +417 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +313 -0
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +260 -0
- package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +241 -0
- package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +300 -0
- package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +279 -0
- package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +206 -0
- package/src/client/public/cyberia-docs/ROADMAP.md +240 -0
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +732 -0
- package/src/client/services/atlas-sprite-sheet/atlas-sprite-sheet.service.js +14 -20
- package/src/client/services/core/core.service.js +35 -55
- package/src/client/services/crypto/crypto.service.js +8 -13
- package/src/client/services/cyberia-action/cyberia-action.service.js +99 -0
- package/src/client/services/cyberia-dialogue/cyberia-dialogue.service.js +99 -0
- package/src/client/services/cyberia-entity/cyberia-entity.management.js +57 -0
- package/src/client/services/cyberia-entity/cyberia-entity.service.js +99 -0
- package/src/client/services/cyberia-instance/cyberia-instance.management.js +194 -0
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +116 -0
- package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +99 -0
- package/src/client/services/cyberia-map/cyberia-map.management.js +193 -0
- package/src/client/services/cyberia-map/cyberia-map.service.js +120 -0
- package/src/client/services/cyberia-quest/cyberia-quest.service.js +99 -0
- package/src/client/services/cyberia-quest-progress/cyberia-quest-progress.service.js +99 -0
- package/src/client/services/default/default.management.js +159 -267
- package/src/client/services/default/default.service.js +10 -16
- package/src/client/services/document/document.service.js +14 -19
- package/src/client/services/file/file.service.js +8 -13
- package/src/client/services/instance/instance.management.js +6 -6
- package/src/client/services/instance/instance.service.js +10 -15
- package/src/client/services/ipfs/ipfs.service.js +14 -40
- package/src/client/services/object-layer/object-layer.management.js +14 -14
- package/src/client/services/object-layer/object-layer.service.js +39 -24
- package/src/client/services/object-layer-render-frames/object-layer-render-frames.service.js +10 -16
- package/src/client/services/test/test.service.js +8 -13
- package/src/client/services/user/guest.service.js +86 -0
- package/src/client/services/user/user.management.js +6 -6
- package/src/client/services/user/user.service.js +14 -20
- package/src/client/ssr/body/404.js +3 -3
- package/src/client/ssr/body/500.js +3 -3
- package/src/client/ssr/body/CacheControl.js +5 -2
- package/src/client/ssr/body/DefaultSplashScreen.js +19 -12
- package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +13 -6
- package/src/client/ssr/head/PwaItemledger.js +197 -60
- package/src/client/ssr/mailer/DefaultRecoverEmail.js +19 -20
- package/src/client/ssr/mailer/DefaultVerifyEmail.js +15 -16
- package/src/client/ssr/offline/Maintenance.js +12 -11
- package/src/client/ssr/offline/NoNetworkConnection.js +3 -3
- package/src/client/ssr/pages/CyberiaServerMetrics.js +1 -1
- package/src/client/ssr/pages/Test.js +2 -2
- package/src/client/sw/core.sw.js +212 -0
- package/src/grpc/cyberia/grpc-server.js +642 -0
- package/src/index.js +24 -1
- package/src/runtime/cyberia-client/Dockerfile +80 -0
- package/src/runtime/cyberia-server/Dockerfile +37 -0
- package/src/runtime/express/Dockerfile +5 -1
- package/src/runtime/express/Express.js +18 -1
- package/src/runtime/lampp/Dockerfile +17 -5
- package/src/runtime/lampp/Lampp.js +27 -4
- package/src/runtime/wp/Dockerfile +62 -0
- package/src/runtime/wp/Wp.js +639 -0
- package/src/server/atlas-sprite-sheet-generator.js +4 -2
- package/src/server/auth.js +24 -1
- package/src/server/backup.js +37 -9
- package/src/server/client-build-docs.js +52 -46
- package/src/server/client-build.js +356 -82
- package/src/server/client-formatted.js +140 -57
- package/src/server/conf.js +29 -13
- package/src/server/cron.js +25 -23
- package/src/server/data-query.js +32 -20
- package/src/server/dns.js +24 -1
- package/src/server/ipfs-client.js +253 -89
- package/src/server/object-layer.js +150 -114
- package/src/server/peer.js +8 -0
- package/src/server/process.js +13 -27
- package/src/server/runtime.js +25 -1
- package/src/server/semantic-layer-generator-floor.js +319 -0
- package/src/server/semantic-layer-generator-resource.js +259 -0
- package/src/server/semantic-layer-generator-skin.js +1164 -0
- package/src/server/semantic-layer-generator.js +211 -542
- package/src/server/shape-generator.js +108 -0
- package/src/server/start.js +19 -5
- package/src/server/valkey.js +141 -235
- package/src/ws/IoInterface.js +1 -10
- package/src/ws/IoServer.js +14 -33
- package/src/ws/core/channels/core.ws.chat.js +65 -20
- package/src/ws/core/channels/core.ws.mailer.js +113 -32
- package/src/ws/core/channels/core.ws.stream.js +90 -31
- package/src/ws/core/core.ws.connection.js +12 -33
- package/src/ws/core/core.ws.emit.js +10 -26
- package/src/ws/core/core.ws.server.js +25 -58
- package/src/ws/default/channels/default.ws.main.js +53 -12
- package/src/ws/default/default.ws.connection.js +26 -13
- package/src/ws/default/default.ws.server.js +30 -12
- package/tsconfig.docs.json +15 -0
- package/typedoc.dd-cyberia.json +29 -0
- package/typedoc.json +29 -0
- package/WHITE-PAPER.md +0 -1540
- package/hardhat/README.md +0 -531
- package/hardhat/WHITE-PAPER.md +0 -1540
- package/jsdoc.dd-cyberia.json +0 -59
- package/jsdoc.json +0 -59
- package/src/api/object-layer/README.md +0 -347
- package/src/client/components/core/ColorPalette.js +0 -5267
- package/src/client/components/core/JoyStick.js +0 -80
- package/src/client/components/cryptokoyn/CommonCryptokoyn.js +0 -29
- package/src/client/components/cryptokoyn/ElementsCryptokoyn.js +0 -38
- package/src/client/components/cryptokoyn/RoutesCryptokoyn.js +0 -39
- package/src/client/components/cyberia-portal/ElementsCyberiaPortal.js +0 -38
- package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +0 -58
- package/src/client/components/cyberia-portal/ServerCyberiaPortal.js +0 -136
- package/src/client/components/default/ElementsDefault.js +0 -38
- package/src/client/components/default/RoutesDefault.js +0 -49
- package/src/client/components/itemledger/CommonItemledger.js +0 -29
- package/src/client/components/itemledger/ElementsItemledger.js +0 -38
- package/src/client/components/itemledger/RoutesItemledger.js +0 -40
- package/src/client/components/underpost/CommonUnderpost.js +0 -29
- package/src/client/components/underpost/ElementsUnderpost.js +0 -38
- package/src/client/components/underpost/RoutesUnderpost.js +0 -47
- package/src/client/sw/default.sw.js +0 -127
- package/src/client/sw/template.sw.js +0 -84
- package/src/ws/core/management/core.ws.chat.js +0 -8
- package/src/ws/core/management/core.ws.mailer.js +0 -16
- package/src/ws/core/management/core.ws.stream.js +0 -8
- package/src/ws/default/management/default.ws.main.js +0 -8
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
# Cyberia Online — System Architecture
|
|
2
|
+
|
|
3
|
+
**Version:** 3.0.3 | **Status:** Current
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
Cyberia Online is a real-time tap-based sandbox MMORPG built on three independent service layers communicating through well-defined binary and gRPC protocols. The system separates concerns across:
|
|
10
|
+
|
|
11
|
+
1. **Engine-Cyberia** (Node.js) — data persistence, gRPC data service, REST API, CI/CD tooling.
|
|
12
|
+
2. **cyberia-server** (Go) — real-time multiplayer game logic, binary WebSocket AOI protocol.
|
|
13
|
+
3. **cyberia-client** (C/WASM) — game rendering client compiled to WebAssembly.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## High-Level System Diagram
|
|
18
|
+
|
|
19
|
+
```mermaid
|
|
20
|
+
graph TB
|
|
21
|
+
subgraph Client["cyberia-client (C/WASM)"]
|
|
22
|
+
SDL["SDL2 + OpenGL ES2\nRendering Pipeline"]
|
|
23
|
+
BinDecoder["Binary AOI Decoder"]
|
|
24
|
+
OLEngine["Object Layer Engine\nAtlas Sprite Compositor"]
|
|
25
|
+
Input["Tap/Click Input Handler"]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
subgraph GoServer["cyberia-server (Go)"]
|
|
29
|
+
WS["WebSocket Server :8081\nBinary AOI Protocol"]
|
|
30
|
+
AOI["Area of Interest (AOI)\nSpatial Filtering"]
|
|
31
|
+
PathFinding["A* Pathfinding\n(Bot Navigation)"]
|
|
32
|
+
Skills["Skill Dispatcher\nProjectile · Doppelganger"]
|
|
33
|
+
Economy["Economy Module\nFountain & Sink"]
|
|
34
|
+
gRPCClient["gRPC Client\nWorld Builder"]
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
subgraph Engine["engine-cyberia (Node.js)"]
|
|
38
|
+
Express["Express REST API\n:4005–4014"]
|
|
39
|
+
gRPCServer["gRPC Server :50051\nCyberiaDataService"]
|
|
40
|
+
MongoDB["MongoDB\nMongoose ORM"]
|
|
41
|
+
Valkey["Valkey\n(Redis-compatible)"]
|
|
42
|
+
IPFS["IPFS Cluster + Kubo\nAsset Pinning"]
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
subgraph Blockchain["Hyperledger Besu :8545"]
|
|
46
|
+
OLT["ObjectLayerToken\nERC-1155 Contract"]
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
Client <-->|"WS binary messages\n(little-endian)"| GoServer
|
|
50
|
+
Client <-->|"REST: atlas PNG\nmetadata JSON"| Engine
|
|
51
|
+
GoServer <-->|"gRPC :50051\nGetFullInstance\nGetObjectLayerBatch\nGetMapData · Ping"| Engine
|
|
52
|
+
Engine <-->|"ethers.js\nEIP-712 + ERC-1155"| Blockchain
|
|
53
|
+
Engine <-->|"IPFS API"| IPFS
|
|
54
|
+
Engine <-->|"mongoose"| MongoDB
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Component Details
|
|
60
|
+
|
|
61
|
+
### Engine-Cyberia (Node.js)
|
|
62
|
+
|
|
63
|
+
The authoritative backend providing all persistent game data through two transport layers:
|
|
64
|
+
|
|
65
|
+
**REST APIs (Express):**
|
|
66
|
+
|
|
67
|
+
| API | Description |
|
|
68
|
+
| ---------------------------- | --------------------------------------------------- |
|
|
69
|
+
| `object-layer` | CRUD for ObjectLayer documents (AtomicPrefab) |
|
|
70
|
+
| `object-layer-render-frames` | Atlas frame matrix and color palette documents |
|
|
71
|
+
| `atlas-sprite-sheet` | Consolidated atlas PNG + metadata |
|
|
72
|
+
| `cyberia-instance` | Instance graph (maps + portal topology) |
|
|
73
|
+
| `cyberia-map` | Map grid, entity placements, metadata |
|
|
74
|
+
| `cyberia-entity` | Entity definitions |
|
|
75
|
+
| `cyberia-instance-conf` | Instance configuration (skills, economy, equipment) |
|
|
76
|
+
| `cyberia-quest` | Quest definitions |
|
|
77
|
+
| `cyberia-quest-progress` | Per-player quest progress |
|
|
78
|
+
| `cyberia-action` | NPC action definitions |
|
|
79
|
+
| `cyberia-dialogue` | Dialogue lines |
|
|
80
|
+
|
|
81
|
+
**gRPC Service (`CyberiaDataService`):**
|
|
82
|
+
|
|
83
|
+
| RPC | Description |
|
|
84
|
+
| ------------------------------- | ---------------------------------------------------------------- |
|
|
85
|
+
| `GetFullInstance(instanceCode)` | Instance graph + maps + entities + ObjectLayers + InstanceConfig |
|
|
86
|
+
| `GetMapData(mapCode)` | Single map grid and entity data |
|
|
87
|
+
| `GetObjectLayerBatch()` | Stream all ObjectLayers (cache warm-up) |
|
|
88
|
+
| `GetObjectLayer(itemId)` | Single ObjectLayer by item ID |
|
|
89
|
+
| `GetObjectLayerManifest()` | All `itemId + sha256` pairs (hot-reload diff) |
|
|
90
|
+
| `Ping()` | Engine liveness check |
|
|
91
|
+
|
|
92
|
+
**Fallback Instance:** When `GetFullInstance` is called with an unknown instance code, the Engine returns a minimal playable fallback (1 empty 64×64 map, no bots, no ObjectLayers) instead of `NOT_FOUND`.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
### cyberia-server (Go)
|
|
97
|
+
|
|
98
|
+
Real-time multiplayer game server. Consumes gRPC data at startup, then runs independently:
|
|
99
|
+
|
|
100
|
+
```mermaid
|
|
101
|
+
graph LR
|
|
102
|
+
A["gRPC\nGetFullInstance"] --> B["BuildWorldFromInstance\ninstance_loader.go"]
|
|
103
|
+
B --> C["Maps + Portals\n+ Entity Registry"]
|
|
104
|
+
C --> D["Game Loop\nserver.go"]
|
|
105
|
+
D --> E["AOI Ticks\naoi_binary.go"]
|
|
106
|
+
E --> F["Binary WS Messages\nto C clients"]
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**Key source files:**
|
|
110
|
+
|
|
111
|
+
| File | Responsibility |
|
|
112
|
+
| ----------------------- | ----------------------------------------------------- |
|
|
113
|
+
| `server.go` | WebSocket lifecycle, game loop, player registry |
|
|
114
|
+
| `aoi_binary.go` | Binary AOI wire format encoder/decoder |
|
|
115
|
+
| `object_layer.go` | ObjectLayer Go types mirroring the MongoDB schema |
|
|
116
|
+
| `collision.go` | Grid collision detection, portal transitions |
|
|
117
|
+
| `pathfinding.go` | A\* pathfinding for bot navigation |
|
|
118
|
+
| `skill.go` | Skill entry points: tap action trigger, on-kill hooks |
|
|
119
|
+
| `skill_dispatcher.go` | Skill registry: `InitSkills`, `DispatchSkill` |
|
|
120
|
+
| `skill_projectile.go` | Projectile skill handler |
|
|
121
|
+
| `skill_doppelganger.go` | Doppelganger skill handler |
|
|
122
|
+
| `economy.go` | Fountain & Sink coin economy |
|
|
123
|
+
| `frozen_state.go` | FrozenInteractionState (modal protection) |
|
|
124
|
+
| `entity_status.go` | Entity Status Indicator (ESI) computation |
|
|
125
|
+
| `life_regen.go` | HP regeneration loop |
|
|
126
|
+
| `ai.go` | Bot AI behavior (hostile/passive) |
|
|
127
|
+
| `stats.go` | Stat aggregation and sum-stats limit enforcement |
|
|
128
|
+
| `instance_loader.go` | World reconstruction from gRPC data |
|
|
129
|
+
| `handlers.go` | WebSocket message handlers |
|
|
130
|
+
| `grpcclient/` | gRPC client implementation |
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
### cyberia-client (C/WASM)
|
|
135
|
+
|
|
136
|
+
Game client compiled to WebAssembly with Emscripten. Runs in the browser.
|
|
137
|
+
|
|
138
|
+
**Key source files:**
|
|
139
|
+
|
|
140
|
+
| File | Responsibility |
|
|
141
|
+
| ---------------------------- | --------------------------------------- |
|
|
142
|
+
| `main.c` | Entry point, game loop |
|
|
143
|
+
| `game_render.c` | Main rendering pipeline |
|
|
144
|
+
| `game_state.c` | Client-side game state management |
|
|
145
|
+
| `network.c` | WebSocket connection + message dispatch |
|
|
146
|
+
| `binary_aoi_decoder.c` | Binary AOI message parser |
|
|
147
|
+
| `object_layer.c` | ObjectLayer metadata store |
|
|
148
|
+
| `object_layers_management.c` | Multi-layer management per entity |
|
|
149
|
+
| `entity_render.c` | Per-entity layer compositing |
|
|
150
|
+
| `layer_z_order.c` | Z-order sorting for rendering |
|
|
151
|
+
| `ol_as_animated_ico.c` | Animated Object Layer rendering |
|
|
152
|
+
| `ol_stack_ico.c` | Stacked icon rendering |
|
|
153
|
+
| `texture_manager.c` | Atlas texture loading and caching |
|
|
154
|
+
| `input.c` | Tap/click input handling |
|
|
155
|
+
| `floating_combat_text.c` | FCT event rendering |
|
|
156
|
+
| `inventory_bar.c` | Bottom inventory bar UI |
|
|
157
|
+
| `inventory_modal.c` | Full inventory modal |
|
|
158
|
+
| `entity_overhead_ui.c` | Nameplate + status icon rendering |
|
|
159
|
+
| `interaction_bubble.c` | NPC interaction prompt bubble |
|
|
160
|
+
| `tap_effect.c` | Tap visual feedback animation |
|
|
161
|
+
| `modal_dialogue.c` | NPC dialogue modal |
|
|
162
|
+
| `modal_player.c` | Player info modal |
|
|
163
|
+
| `message_parser.c` | Server message routing |
|
|
164
|
+
|
|
165
|
+
**Build system:**
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
# Development build
|
|
169
|
+
make -f Web.mk clean && make -f Web.mk web
|
|
170
|
+
|
|
171
|
+
# Production / release build
|
|
172
|
+
make -f Web.mk clean && make -f Web.mk web BUILD_MODE=RELEASE
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Binary AOI Wire Protocol
|
|
178
|
+
|
|
179
|
+
The Go server and C client communicate via a custom little-endian binary WebSocket protocol. Only render-essential data is transmitted; atlas binaries are fetched from the Engine REST API independently.
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
Header (5 bytes):
|
|
183
|
+
[0] u8 msgType
|
|
184
|
+
0x01 = aoi_update (partial delta update)
|
|
185
|
+
0x02 = init_data (full game config on connect)
|
|
186
|
+
0x03 = full_aoi (complete world snapshot)
|
|
187
|
+
0x04 = FCT (Floating Combat Text, 14 bytes fixed)
|
|
188
|
+
0x05 = ItemFCT (Item quantity FCT, variable)
|
|
189
|
+
[1..2] u16 reserved (0)
|
|
190
|
+
[3..4] u16 entityCount
|
|
191
|
+
|
|
192
|
+
Per-entity block (variable):
|
|
193
|
+
[0] u8 flags
|
|
194
|
+
bits 0-2: entity type (0=player, 1=bot, 2=floor, 3=obstacle, 4=portal, 5=foreground)
|
|
195
|
+
bit 3: removed (entity left AOI)
|
|
196
|
+
bit 4: has life data
|
|
197
|
+
bit 5: has respawn timer
|
|
198
|
+
bit 6: has behavior string
|
|
199
|
+
bit 7: has color data (RGBA)
|
|
200
|
+
[1..36] 36B entity UUID (zero-padded)
|
|
201
|
+
-- if not removed: --
|
|
202
|
+
f32 posX, posY, dimW, dimH
|
|
203
|
+
u8 direction (0–8: UP, UP_RIGHT, RIGHT, DOWN_RIGHT, DOWN, DOWN_LEFT, LEFT, UP_LEFT, NONE)
|
|
204
|
+
u8 mode (0=idle, 1=walking, 2=teleporting)
|
|
205
|
+
-- if bit 4: f32 life, f32 maxLife --
|
|
206
|
+
-- if bit 5: f32 respawnIn --
|
|
207
|
+
-- if bit 6: u8 behaviorLen + str behavior --
|
|
208
|
+
-- if bit 7: u8 r, g, b, a --
|
|
209
|
+
-- item ID stack: --
|
|
210
|
+
u8 itemIdCount
|
|
211
|
+
per item: u8 len + str itemId
|
|
212
|
+
|
|
213
|
+
Self-player section (appended after entity blocks):
|
|
214
|
+
<entity block fields>
|
|
215
|
+
f32 aoiMinX, aoiMinY, aoiMaxX, aoiMaxY
|
|
216
|
+
u8 onPortal
|
|
217
|
+
u16 sumStatsLimit
|
|
218
|
+
u16 activeStatsSum
|
|
219
|
+
u8+str mapCode
|
|
220
|
+
u8 pathLen
|
|
221
|
+
per path point: i16 x, i16 y
|
|
222
|
+
i16 targetPosX, targetPosY
|
|
223
|
+
u8+str activePortalID
|
|
224
|
+
u32 coinBalance
|
|
225
|
+
<full inventory>
|
|
226
|
+
u8 frozen (FrozenInteractionState)
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**FCT message (14 bytes fixed):**
|
|
230
|
+
|
|
231
|
+
| `fctType` | Constant | Color | Display |
|
|
232
|
+
| --------- | ----------------- | ------ | -------------- |
|
|
233
|
+
| `0x00` | `FCTTypeDamage` | Red | `-N` HP lost |
|
|
234
|
+
| `0x01` | `FCTTypeRegen` | Green | `+N` HP gained |
|
|
235
|
+
| `0x02` | `FCTTypeCoinGain` | Yellow | `+N` coins |
|
|
236
|
+
| `0x03` | `FCTTypeCoinLoss` | Yellow | `-N` coins |
|
|
237
|
+
| `0x04` | `FCTTypeItemGain` | Cyan | `+N ItemID` |
|
|
238
|
+
| `0x05` | `FCTTypeItemLoss` | Purple | `-N ItemID` |
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## gRPC Data Pipeline
|
|
243
|
+
|
|
244
|
+
```mermaid
|
|
245
|
+
graph LR
|
|
246
|
+
Engine["Node.js Engine\nMongoDB + Express\ngrpc-server.js :50051"]
|
|
247
|
+
GoServer["Go Game Server\ncyberia-server\ngrpcclient/"]
|
|
248
|
+
|
|
249
|
+
Engine -->|"GetFullInstance\nGetObjectLayerBatch\nGetMapData · Ping\nGetObjectLayerManifest"| GoServer
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
**Data flow:**
|
|
253
|
+
|
|
254
|
+
```
|
|
255
|
+
MongoDB (CyberiaInstance + CyberiaMap + ObjectLayer)
|
|
256
|
+
│
|
|
257
|
+
▼
|
|
258
|
+
Node.js Engine (grpc-server.js)
|
|
259
|
+
│ GetFullInstance → instance graph + maps + entities + ObjectLayers + InstanceConfig
|
|
260
|
+
│ GetObjectLayerBatch → stream all ObjectLayers
|
|
261
|
+
│ GetObjectLayerManifest → itemId + sha256 pairs (hot-reload diffing)
|
|
262
|
+
│ Ping → liveness check
|
|
263
|
+
▼
|
|
264
|
+
Go Game Server (world_builder.go → instance_loader.go → server.go)
|
|
265
|
+
│ ApplyInstanceConfig → sets all game parameters from gRPC
|
|
266
|
+
│ BuildWorldFromInstance → builds maps, entities, portals
|
|
267
|
+
│ ReplaceObjectLayerCache → caches ObjectLayer metadata
|
|
268
|
+
▼
|
|
269
|
+
C/WASM Client (WebSocket binary AOI protocol)
|
|
270
|
+
│ init_data → game config, player state, grid dimensions
|
|
271
|
+
│ metadata → ObjectLayer cache (delivered once after connect)
|
|
272
|
+
│ aoi_update → binary-encoded entity positions, directions, modes, colors, item stacks
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## Instance Topology
|
|
278
|
+
|
|
279
|
+
A `CyberiaInstance` is a directed graph:
|
|
280
|
+
|
|
281
|
+
- **Vertices** = `CyberiaMap` documents (grid-based maps).
|
|
282
|
+
- **Edges** = `PortalEdge` records connecting source cell → target map/cell.
|
|
283
|
+
|
|
284
|
+
**Portal modes:**
|
|
285
|
+
|
|
286
|
+
| Mode | Behavior |
|
|
287
|
+
| -------------- | ------------------------------------------- |
|
|
288
|
+
| `inter-portal` | Teleport to specific cell on target map |
|
|
289
|
+
| `inter-random` | Teleport to random valid cell on target map |
|
|
290
|
+
| `intra-portal` | Teleport within same map to specific cell |
|
|
291
|
+
| `intra-random` | Teleport within same map to random cell |
|
|
292
|
+
|
|
293
|
+
**Topology modes:** `linear`, `hub-spoke`, `open`, `grid`.
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## Entity Types and Status Indicators
|
|
298
|
+
|
|
299
|
+
### Entity Types
|
|
300
|
+
|
|
301
|
+
| Type | Behavior | Description |
|
|
302
|
+
| -------------- | --------------------- | --------------------------- |
|
|
303
|
+
| `player` | interactive | Local player (self) |
|
|
304
|
+
| `other_player` | interactive | Remote players in AOI |
|
|
305
|
+
| `bot` | `hostile` / `passive` | AI-controlled entities |
|
|
306
|
+
| `skill` | `skill` | Runtime-spawned projectile |
|
|
307
|
+
| `coin` | `coin` | Runtime-spawned collectible |
|
|
308
|
+
| `floor` | static | Terrain tile |
|
|
309
|
+
| `obstacle` | static | Collision tile |
|
|
310
|
+
| `portal` | static | Zone transition trigger |
|
|
311
|
+
| `foreground` | static | Foreground decoration |
|
|
312
|
+
| `resource` | extractable | Exploitable world object |
|
|
313
|
+
|
|
314
|
+
### Entity Status Indicator (ESI)
|
|
315
|
+
|
|
316
|
+
The Go server computes a status `u8` per entity on each AOI tick. The C client renders the corresponding icon above the entity nameplate:
|
|
317
|
+
|
|
318
|
+
| `id` | Name | Icon | Description |
|
|
319
|
+
| ---- | -------------------- | --------------- | -------------------------------- |
|
|
320
|
+
| 0 | `none` | — | Skill/coin bots, world objects |
|
|
321
|
+
| 1 | `passive` | arrow-down-gray | Non-aggressive bot |
|
|
322
|
+
| 2 | `hostile` | arrow-down-red | Aggressive bot (will aggro) |
|
|
323
|
+
| 3 | `frozen` | chat | Player in FrozenInteractionState |
|
|
324
|
+
| 4 | `player` | arrow-down | Normal alive player |
|
|
325
|
+
| 5 | `dead` | skull | Dead / respawning entity |
|
|
326
|
+
| 6 | `resource` | arrow-down-gray | Static exploitable resource |
|
|
327
|
+
| 7 | `resource-extracted` | clock | Depleted resource (respawning) |
|
|
328
|
+
| 8 | `action-provider` | chat (bounce) | NPC with available actions |
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
## FrozenInteractionState
|
|
333
|
+
|
|
334
|
+
When a player opens a modal (dialogue, inventory, shop, craft), they enter **FrozenInteractionState**:
|
|
335
|
+
|
|
336
|
+
- Cannot deal or receive damage.
|
|
337
|
+
- Cannot send or receive movement events.
|
|
338
|
+
- The rest of the world continues normally.
|
|
339
|
+
- Managed exclusively by `FreezePlayer` / `ThawPlayer` in `frozen_state.go`.
|
|
340
|
+
|
|
341
|
+
---
|
|
342
|
+
|
|
343
|
+
## Skill System
|
|
344
|
+
|
|
345
|
+
### Item → Skill Mapping
|
|
346
|
+
|
|
347
|
+
```
|
|
348
|
+
CyberiaInstanceConf.skillConfig[]:
|
|
349
|
+
triggerItemId: "atlas_pistol_mk2" ← item in player's active object layers
|
|
350
|
+
logicEventIds: ["projectile"] ← ordered handler keys executed in sequence
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### Skill Handlers
|
|
354
|
+
|
|
355
|
+
| `logicEventId` | Handler | Description |
|
|
356
|
+
| -------------------------- | ---------------------------- | ------------------------------------------------ |
|
|
357
|
+
| `projectile` | `executeProjectileSkill()` | Spawn a directional projectile entity |
|
|
358
|
+
| `doppelganger` | `executeDoppelgangerSkill()` | Spawn a temporary allied duplicate |
|
|
359
|
+
| `coin_drop_or_transaction` | economy handler | Spawn a coin entity at target position (economy) |
|
|
360
|
+
|
|
361
|
+
### Skill Parameters (SkillRules)
|
|
362
|
+
|
|
363
|
+
| Parameter | Description |
|
|
364
|
+
| --------------------------------- | ------------------------------------------------ |
|
|
365
|
+
| `projectileSpawnChance` | Probability of spawning a projectile per trigger |
|
|
366
|
+
| `projectileLifetimeMs` | Projectile lifetime in milliseconds |
|
|
367
|
+
| `projectileWidth/Height` | Projectile entity dimensions |
|
|
368
|
+
| `projectileSpeedMultiplier` | Speed relative to base entity speed |
|
|
369
|
+
| `doppelgangerSpawnChance` | Probability of spawning a doppelganger |
|
|
370
|
+
| `doppelgangerLifetimeMs` | Doppelganger lifetime |
|
|
371
|
+
| `doppelgangerSpawnRadius` | Max spawn distance from player |
|
|
372
|
+
| `doppelgangerInitialLifeFraction` | Initial HP as fraction of player max HP |
|
|
373
|
+
|
|
374
|
+
---
|
|
375
|
+
|
|
376
|
+
## Development Setup
|
|
377
|
+
|
|
378
|
+
```bash
|
|
379
|
+
# Terminal 1: Engine (Node.js)
|
|
380
|
+
cd /home/dd/engine
|
|
381
|
+
npm run dev
|
|
382
|
+
# Starts Express :4005+, gRPC :50051, connects to MongoDB
|
|
383
|
+
|
|
384
|
+
# Terminal 2: Go game server
|
|
385
|
+
cd /home/dd/engine/cyberia-server
|
|
386
|
+
cat > .env << 'EOF'
|
|
387
|
+
ENGINE_GRPC_ADDRESS=localhost:50051
|
|
388
|
+
INSTANCE_CODE=cyberia-main
|
|
389
|
+
ENGINE_API_BASE_URL=http://localhost:4005
|
|
390
|
+
SERVER_PORT=8081
|
|
391
|
+
EOF
|
|
392
|
+
go run main.go
|
|
393
|
+
|
|
394
|
+
# Terminal 3: C/WASM client
|
|
395
|
+
cd /home/dd/engine/cyberia-client
|
|
396
|
+
# Edit src/config.h: WS_URL="ws://localhost:8081/ws", API_BASE_URL="http://localhost:4005"
|
|
397
|
+
source ~/.emsdk/emsdk_env.sh
|
|
398
|
+
make -f Web.mk clean && make -f Web.mk web
|
|
399
|
+
make -f Web.mk serve-development # http://localhost:8082
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
**Startup order is required:** Engine must start before the Go server dials gRPC; Go server must be running before the C client connects.
|
|
403
|
+
|
|
404
|
+
### Dev Port Summary
|
|
405
|
+
|
|
406
|
+
| Component | Port | Protocol |
|
|
407
|
+
| ------------------- | ----- | --------- |
|
|
408
|
+
| Engine Express | 4005+ | HTTP/REST |
|
|
409
|
+
| Engine gRPC | 50051 | gRPC |
|
|
410
|
+
| Go server | 8081 | HTTP + WS |
|
|
411
|
+
| C client dev server | 8082 | HTTP |
|
|
412
|
+
|
|
413
|
+
---
|
|
414
|
+
|
|
415
|
+
## Production Deployment
|
|
416
|
+
|
|
417
|
+
### Kubernetes Deployment Order
|
|
418
|
+
|
|
419
|
+
```
|
|
420
|
+
1. Engine (dd-cyberia) ← Express :4005–4014, gRPC :50051 (cluster-internal)
|
|
421
|
+
2. Go server (mmo-server) ← ENGINE_GRPC_ADDRESS=<engine-clusterIP>:50051
|
|
422
|
+
3. C client (mmo-client) ← static WASM files served on :8082
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
### Environment Variables
|
|
426
|
+
|
|
427
|
+
**Go Server:**
|
|
428
|
+
|
|
429
|
+
| Variable | Default | Description |
|
|
430
|
+
| --------------------------------- | ----------------- | ------------------------------------------------------------------------- |
|
|
431
|
+
| `ENGINE_GRPC_ADDRESS` | `localhost:50051` | Engine gRPC address (required) |
|
|
432
|
+
| `INSTANCE_CODE` | `default` | Instance code to load on startup |
|
|
433
|
+
| `SERVER_PORT` | `8081` | WebSocket + HTTP server listen port |
|
|
434
|
+
| `STATIC_DIR` | `./public` | Directory for static WASM client files |
|
|
435
|
+
| `ENGINE_GRPC_RELOAD_INTERVAL_SEC` | _(disabled)_ | ObjectLayer hot-reload polling interval |
|
|
436
|
+
| `READY_CMD` | _(empty)_ | Shell command to run after server starts (orchestration readiness signal) |
|
|
437
|
+
|
|
438
|
+
**C Client (compile-time, `src/config.h`):**
|
|
439
|
+
|
|
440
|
+
| Constant | Development | Production |
|
|
441
|
+
| -------------- | ------------------------ | ----------------------------------- |
|
|
442
|
+
| `WS_URL` | `ws://localhost:8081/ws` | `wss://server.cyberiaonline.com/ws` |
|
|
443
|
+
| `API_BASE_URL` | `http://localhost:4005` | `https://www.cyberiaonline.com` |
|