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