Skip to the content.

 
オセリスサーバー Github

コンセプト

2年生後期に入り、オセリスのブラッシュアップを行いながら、TypeScriptとNodeJsを使ってオンライン対応を行ったプロジェクトです。

アピールポイント

TyoeScriptとNodeJSを学習しながら初めて扱って実装をしていました。
クライアントから送られてきた通信毎にサーバー側で判別を行って
動的に分岐と動作を行っている所がお気に入りです。

制作意図

サーバーを使ってクライアントとサーバー間の通信学習の為

プラットフォーム

Windows

使用言語・エンジン

C#
TypeScripts
NodeJs
Unity 2020.2.5f1

サーバーマネージャークラス

export default class NetworkManager
{
    // ルーム内のプレイヤー情報
    // 本来はRoomクラスとかで個々に持たせる
    public static _playerManager:PlayerManager = new PlayerManager();

    /**
     *  指定ソケットにデータを送信する
     *  @param socket 送信先(相手)
     *  @param buffer データ
     */
    public static SendMessage(buffer, socket:Socket)
    {
        // 引数の渡されたbuffer(データ)をstring化
        let message = JSON.stringify(buffer);

        // パケットが結合してもクライアント側でSplitできるように、末尾に分割用記号を追記
        message += "$";

        // 送信
        socket.write(message);
    }

    /**
     * 接続しているPlayer全員にメッセージをおくる関数
     * @param buffer データ
     */
    public static BroadcastMessage(buffer)
    {
        buffer.id = "";

        // for of文で_activePlayerの数にメッセージ送信(Send)をおこなう
        for (const player of this._playerManager._activePlayer) {
            this.SendMessage(buffer, player.socket);
        }
    }

    /**
     * 自分以外の相手にMessageを送る関数
     * @param buffer 送信先
     * @param id 自分のid
     * @constructor
     */
    public static OpponentSendMessage(buffer, id:string)
    {
        // 相手のSocketを入れる変数
        let opponentSocket:Socket = null;

        // for of文で、一つ一つidを見て自分とは違う相手を判別
        for (const activePlayer of this._playerManager._activePlayer) {
            if (activePlayer.id !== id)
            {
                // 代入
                opponentSocket = activePlayer.socket;
                break;
            }
        }

        // エラーのキャッチ
        if (opponentSocket === null) {
            console.log(`プレイヤー (${id}) に対する相手が見つかりませんでした`);
            return;
        }

        // 自分から見た相手の情報を送信しないように中身を空にする
        buffer.id = "";

        // 送信
        this.SendMessage(buffer, opponentSocket);
    }
}

トップページへ戻る