/// <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); }
private void ResponseLeaveRoom(NetworkConnection connection, LeaveRoom.Response response) { OnLeaveRoomResponseEvent?.Invoke(response); }