Beispiel #1
0
        /// <summary>
        /// 部屋から抜ける。
        /// </summary>
        private void RequestedLeaveRoom(NetworkConnection connection, LeaveRoom.Request request)
        {
            var      msg = new LeaveRoom.Response();
            var      id  = connection.connectionId;
            RoomData roomData;

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

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

                roomData = roomDataHolder.GetRoomDataByContainPlayer(id);
                var result = roomData.LeaveRoom(connection);
                if (!result)
                {
                    Debug.LogWarningFormat("[RequestedLeaveRoom] 退室に失敗しました\nid : {0}", id);
                    msg.Result = LeaveRoom.Result.FailureLeaveRoom;
                    connection.Send(msg);
                    return;
                }

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

            // 部屋が空いたら部屋を消す
            if (roomData.MemberNum < 1)
            {
                roomDataHolder.RemoveRoomData(roomData.RoomGuid);
                return;
            }

            // ホストが退室したらホストを変える
            if (id == roomData.HostConnectionId)
            {
                roomData.ChangeHost();
            }

            SendRoomUpdateMember(roomData);
        }
Beispiel #2
0
 private void ResponseLeaveRoom(NetworkConnection connection, LeaveRoom.Response response)
 {
     OnLeaveRoomResponseEvent?.Invoke(response);
 }