Code Monkey home page Code Monkey logo

wsnet2's Introduction

WSNet2

これは何?

WSNet2 は WebSocket をベースとしたモバイルオンラインゲーム向けのリアルタイム通信システムです。

特徴

  • WebSocket ベース: ほとんどの環境から特別な設定なく接続することができます
  • 自動再接続・再送: 利用アプリは一時的な切断を気にすることなく実装できます
  • スケーラブルな観戦: 中継サーバ(Hub)を増やすことで大規模な観戦に対応できます
  • Unity/.Net 両対応: C#のゲームロジックをより軽量にサーバ上でも実行できます

動作・開発環境

  • サーバ
    • Go 1.19 以降
    • MySQL 5.7 以降
  • クライアント
    • C#
      • Unity 2020 以降
      • .Net 5.0 以降
    • Go 1.19 以降

使ってみる

WSNet2 サーバ群の起動

$ cd server
$ docker compose up

VM やリモート環境で起動する場合は、 compose.yamlにて game/hub の接続ホスト名を環境変数WSNET2_GAME_PUBLICNAMEで適切に指定してください。

サンプルゲーム

Titleシーン Gameシーン

Unity クライアントの使い方

wsnet2-unityディレクトリを Unity で開き、Assets/Sample/Title.unityシーンを実行します。

  • テキストボックス
    • Lobby: WSNet2 の lobby の URL です
    • AppID/Key: WSNet2 に登録している AppID と Key です(Docker ではtestapp/testapppkeyが登録されています)
    • UserID: WSNet2 がユーザを識別する ID です。対戦するにはお互い異なる UserID にします
  • ボタン
    • CPU 対戦: オフラインで CPU と対戦します(WSNet2 に接続しません)
    • 部屋作成: WSNet2 に部屋を作り、相手プレイヤーを待ち受けます
    • ランダム入室: プレイヤーを待っている部屋に入室します
    • ランダム観戦: 対戦中のゲームを観戦します

Unity クライアントでゲームロジックを動かす例

Unity クライアントのタイトルシーンで「部屋作成」ボタンを押して、部屋を作り対戦相手の入室を待ちます。 対戦相手の Bot を次のように起動します。

$ cd wsnet2-dotnet/WSNet2.Sample
$ dotnet run -- -b

Lobby サーバをhttp://localhost:8080以外で起動している場合は、 Title シーン画面の Lobby に入力したうえで、Bot 起動時にも-sオプションで指定してください。

サーバサイドゲームロジックで対戦する例

次のようにゲームロジッククライアント(MasterClient)と Bot を起動します。 MasterClient が部屋を作り、Bot と Unity クライアントの入室を待ち受けます。

$ cd wsnet2-dotnet/WSNet2.Sample
$ dotnet run -- -m -b

Unity クライアントの Title シーンで「ランダム入室」を押して MasterClient の待ち受ける部屋に入室します。

観戦する例

次のようにゲームロジッククライアント(MasterClient)と Bot を 2 つ起動します。 MasterClient が部屋を作り、Bot が入室して対戦を始めます。

$ cd wsnet2-dotnet/WSNet2.Sample
$ dotnet run -- -m -b 2

Unity クライアントの Title シーンで「ランダム観戦」を押して観戦します。

Documentations

使い方

機能詳細

クラス詳細

wsnet2's People

Contributors

hosono-s avatar inada-s avatar makiuchi-d avatar methane avatar ourenji avatar pandax381 avatar superkerokero avatar sutaa12 avatar togokosaka avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wsnet2's Issues

dashboardの部屋詳細で一部のプロパティがnullになる

プロパティの値が型付きの数値配列(int[]、float[]など)が
部屋一覧や部屋履歴では正しく中身が表示されますが、部屋詳細ではnullになってしまっています。

画像ではdddがint[]、eeeがdouble[]。cccのobject[]は正しく表示されています。
rooms
room

dashboard backend error

We got an error when calling make re-run in container

import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()

mkdir -p ./src/pb
npx grpc_tools_node_protoc
--plugin=protoc-gen-ts="node_modules/.bin/protoc-gen-ts"
--js_out="import_style=commonjs,binary:./src/pb"
--grpc_out="grpc_js:./src/pb"
--ts_out="service=grpc-node,mode=grpc-js:./src/pb"
-I ../../server/pb ../../server/pb/app.proto ../../server/pb/clientinfo.proto ../../server/pb/gameservice.proto ../../server/pb/roominfo.proto ../../server/pb/roomoption.proto ../../server/pb/timestamp.proto
cd go-binary && gopherjs build -o ../src/plugins/binary.js
../../../server/pb/timestamp.go:12:11: undeclared name: Timestamp
../../../server/pb/timestamp.go:21:11: undeclared name: Timestamp
../../../server/pb/timestamp.go:25:11: undeclared name: Timestamp
../../../server/pb/timestamp.go:29:11: undeclared name: Timestamp
../../../server/pb/timestamp.go:33:11: undeclared name: Timestamp
../../../server/pb/timestamp.go:44:33: undeclared name: Timestamp
../../../server/pb/timestamp.go:45:33: undeclared name: Timestamp
../../../server/pb/roominfo.go:14:10: undeclared name: RoomInfo
../../../server/pb/roominfo.go:21:10: undeclared name: RoomNumber
../../../server/pb/roominfo.go:40:10: undeclared name: RoomNumber
../../../server/pb/roominfo.go:40:10: too many errors
make: *** [Makefile:39: src/plugins/binary.js] Error 1

Can you help us to resolve this error?

Roomのcallbackをもう少し充実させたい

  • Pong受信時
    • RTTと他PlayerのLastMsgTimeの更新
    • WatcherCountも更新
  • 自身の切断・再接続(not 入退室)時
    • 再接続と切断の順序が入れ替わらないよう工夫が必要かも 単純にやって大丈夫

room_history.player_logsを別テーブルに

現状、gameサーバのオンメモリに記録していて、room終了時にDBに書き込んでいる。
gameサーバが落ちたときに消えてしまうので、別テーブルにして都度書き込みしたい。
リアルタイムにDBだけから確認できるようになるのも利点。

dashboardのdockerイメージ

backendのベースのnode:lts-latest が bookworm ベースになったために、OpenSSLのバージョン問題でnpx prisma db pullが動かなくなってしまった。
また、front/backともに、ライブラリに脆弱性highやcriticalの更新もきているので、合わせて更新したい。

部屋番号での検索をしたい

部屋ID(s)での検索と同じように、部屋番号(s)でも検索したい
(部屋ID検索同様Visibleフラグを見ないでよい)
Visibleフラグの説明が厳密でないのも直したい

wsnet2-dashboard を追加する

サーバー・部屋状況が見えるほか、詳細データ確認やプレイヤーのキックも行えるダッシュボードを追加する。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.