Пример #1
0
        /// <summary>
        /// 部屋に参加する。
        /// </summary>
        private void RequestedJoinRoom(NetworkConnection connection, JoinRoom.Request request)
        {
            var      msg = new JoinRoom.Response();
            var      id  = connection.connectionId;
            RoomData roomData;

            try {
                // プレイヤーが存在しているかどうかチェック
                if (!playerDataHolder.ExistPlayerData(id))
                {
                    Debug.LogWarningFormat("[RequestedJoinRoom] 存在しないプレイヤーが指定されました\nid : {0}", id);
                    msg.Result = JoinRoom.Result.FailureNonExistPlayer;
                    connection.Send(msg);
                    return;
                }

                // プレイヤーが既に部屋に入っているかどうかチェック
                if (roomDataHolder.ExistRoomByContainPlayer(id))
                {
                    Debug.LogWarningFormat("[RequestedJoinRoom] プレイヤーは既にいずれかの部屋に入っています\nid : {0}", id);
                    msg.Result = JoinRoom.Result.FailureAlreadyJoinRoom;
                    connection.Send(msg);
                    return;
                }

                // 部屋が存在しているかどうかチェック
                if (!roomDataHolder.ExistRoomByGuid(request.RoomGuid))
                {
                    Debug.LogWarningFormat("[RequestedJoinRoom] 存在しない部屋が指定されました\nid : {0}", id);
                    msg.Result = JoinRoom.Result.FailureNonExistRoom;
                    connection.Send(msg);
                    return;
                }

                roomData = roomDataHolder.GetRoomDataByGuid(request.RoomGuid);

                // 部屋が満員かどうかチェック
                if (roomData.IsFullMember)
                {
                    Debug.LogWarningFormat("[RequestedJoinRoom] 部屋は既に定員です\nid : {0}", id);
                    msg.Result = JoinRoom.Result.FailureFullMember;
                    connection.Send(msg);
                    return;
                }

                // ゲームを開始しているかどうかチェック
                if (roomData.IsPlaying)
                {
                    Debug.LogWarningFormat("[RequestedJoinRoom] 既にゲームを開始しています\nid : {0}", id);
                    msg.Result = JoinRoom.Result.FailurePlaying;
                    connection.Send(msg);
                    return;
                }

                var result = roomData.JoinRoom(connection);
                if (!result)
                {
                    Debug.LogWarningFormat("[RequestedJoinRoom] 入室に失敗しました\nid : {0}", id);
                    msg.Result = JoinRoom.Result.FailureJoinRoom;
                    connection.Send(msg);
                    return;
                }

                msg.Result = JoinRoom.Result.Succeed;
                connection.Send(msg);
            } catch (Exception e) {
                Debug.LogErrorFormat("[RequestedJoinRoom] 予期せぬエラーが発生しました\nid : {0}", id);
                Debug.LogException(e);
                msg.Result    = JoinRoom.Result.FailureUnknown;
                msg.Exception = e;
                connection.Send(msg);
                return;
            }

            SendRoomUpdateMember(roomData);
        }
Пример #2
0
 /// <summary>
 /// 部屋に参加する。
 /// </summary>
 public void RequestJoinRoom(JoinRoom.Request request)
 {
     NetworkClient.connection.Send(request);
 }