/// <summary> /// プレイヤー名を適用する。 /// </summary> private void RequestedApplyPlayerName(NetworkConnection connection, ApplyPlayerName.Request request) { var msg = new ApplyPlayerName.Response(); var id = connection.connectionId; try { // プレイヤーが存在しているかどうかチェック if (!playerDataHolder.ExistPlayerData(id)) { Debug.LogWarningFormat("[RequestedApplyPlayerName] 存在しないプレイヤーが指定されました\nid : {0}", id); msg.Result = ApplyPlayerName.Result.FailureNonExistPlayer; connection.Send(msg); return; } var playerData = playerDataHolder.GetPlayerData(id); playerData.ApplyPlayerName(request.PlayerName); msg.Result = ApplyPlayerName.Result.Succeed; connection.Send(msg); } catch (Exception e) { Debug.LogErrorFormat("[RequestedApplyPlayerName] 予期せぬエラーが発生しました\nid : {0}", id); Debug.LogException(e); msg.Result = ApplyPlayerName.Result.FailureUnknown; msg.Exception = e; connection.Send(msg); } }
/// <summary> /// スタートボタンクリック時の処理。 /// </summary> private async UniTask OnClickStartAsync() { // サーバと接続を開始する var(isSuccess, errorCode) = await new ConnectClient().ConnectClientAsync(); if (isSuccess) { // 初期の名前をサーバに伝える var request = new ApplyPlayerName.Request { PlayerName = PlayerPrefsManager.PlayerName }; var response = await new ApplyPlayerNameApi().Request(request); // レスポンスが成功ならロビーステートに遷移する if (response.Result == ApplyPlayerName.Result.Succeed) { parentStateMachine.RequestChangeState(GroupState.Lobby); } else { Debug.LogError("サーバとの接続に失敗しました"); } } else { Debug.LogError("サーバとの接続に失敗しました " + errorCode); } }
/// <summary> /// プレイヤー名を適用する。 /// </summary> /// <param name="playerName">適用したいプレイヤー名</param> private void OnClickApplyPlayerName(string playerName) { // ActionにUniTaskを直接紐づけることは出来ないので、内部でUniTaskの処理を呼び出す ApplyPlayerNameAsync().Forget(); async UniTask ApplyPlayerNameAsync() { // ApplyPlayerNameで渡されたplayerNameを使っている(クロージャという概念)が、ややこしいので気にしないで var request = new ApplyPlayerName.Request { PlayerName = playerName }; var response = await new ApplyPlayerNameApi().Request(request); // レスポンスが成功ならビューにも名前を適用して、ロビーステートを一つ前に戻す if (response.Result == ConnectData.ApplyPlayerName.Result.Succeed) { joinRoomPresenter.SetPlayerName(playerName); StateMachine.RequestBackState(); } } }
/// <summary> /// プレイヤー名を適用する。 /// </summary> public void RequestApplyPlayerName(ApplyPlayerName.Request request) { NetworkClient.connection.Send(request); }