Skip to content

Commit

Permalink
Merge pull request #125 from SeoulTechTCPGame/develop-ReworkWithSpring
Browse files Browse the repository at this point in the history
feat: reimplement user's profile frontend to work with Spring
  • Loading branch information
seong0929 authored Oct 15, 2023
2 parents 644faad + 86ba6bd commit 3b692db
Show file tree
Hide file tree
Showing 14 changed files with 726 additions and 1,553 deletions.
196 changes: 22 additions & 174 deletions Assets/Common Scripts/BlockItUser.cs
Original file line number Diff line number Diff line change
@@ -1,26 +1,24 @@
using Mirror;
using System.Security.Cryptography;
using System;
using System.Threading;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;

[Serializable]
public class BlockItUser
{
#region 유저의 정보를 담을 Data Field와 Getter & Setter
private string _userId; // Firebase UID (유저 ID)
private string _id; // Firebase UID (유저 ID)
private string _nickname; // 유저 네임
private int _playCount = 0; // 플레이 횟수
private int _winCount = 0; // 승리 횟수
private byte[] _profileImage = null; // 프로필 사진
private byte[] _profileImg = null; // 프로필 사진
// private string _profileImagePath; // 프로필 사진 경로

private bool _isGuest = false; // 게스트 확인 플래그
private bool _isSuccess = false; // 요청 성공 여부 확인 플래그

private bool _isRecived = false; // 전송 확인 플래그
private bool _isDupcliateName = false; // 닉네임 중복 확인 플래그

public string UserId
public string Id
{
get { return _userId; }
get { return _id; }
}

public string Nickname
Expand All @@ -41,20 +39,21 @@ public int WinCount
private set { _winCount = value; }
}

public byte[] ProfileImage
public byte[] ProfileImg
{
get { return _profileImage; }
private set { _profileImage = value; }
get { return _profileImg; }
set { _profileImg = value; }
}

public bool IsGuest
{
get { return _isGuest; }
}

public bool IsDupcliateName
public bool IsSuccess
{
get { return _isDupcliateName; }
get { return _isSuccess; }
set { _isSuccess = value; }
}

#endregion
Expand All @@ -75,174 +74,23 @@ public BlockItUser()
}

// 로그인일 경우 생성자
public BlockItUser(string userId)
public BlockItUser(string id)
{
_userId = userId;
_id = id;
}

// 회원 가입일 경우 생성자 (닉네임을 저장해야하므로)
public BlockItUser(string userId, string nickname)
public BlockItUser(string id, string nickname)
{
_userId = userId;
_id = id;
_nickname = nickname;
}
#endregion

// 서버와 연결될 때까지 대기 시키는 비동기 함수
private async Task WaitForConnectionAsync(CancellationToken token)
{
while (!NetworkClient.isConnected)
{
if (token.IsCancellationRequested)
{
// 취소 요청이 있을 경우, 작업을 중지
throw new TaskCanceledException();
}
await Task.Delay(100); // 100ms 대기 (값은 필요에 따라 조절 가능)
}
}

#region 유저 정보 요청과 응답 시 이벤트
public async void getUserData(CancellationToken token = default)
{
// 정보를 불러오기 위해 Mirror 클라이언트 시작
NetworkManager.singleton.StartClient();

// 서버에서 보낸 정보를 받기 위한 Handler 등록
NetworkClient.RegisterHandler<ResponseUserDataMessage>(OnReceiveUserDataResponse);

// 서버와 연결되면 UID를 보냄
await WaitForConnectionAsync(token);
SendUserDataRequest(_userId);

// 정보 불러왔으면 클라이언트 종료
if (_isRecived)
{
NetworkManager.singleton.StopClient();
_isRecived = false;
}
}

private void SendUserDataRequest(string userId)
{
RequestUserDataMessage requestData = new RequestUserDataMessage { userId = userId };
NetworkClient.Send(requestData);
}

private void OnReceiveUserDataResponse(ResponseUserDataMessage msg)
{
_nickname = msg.nickname;
_playCount = msg.playCount;
_winCount = msg.winCount;
_profileImage = msg.profileImage;
_isRecived = msg.success;
}
#endregion

#region 회원 가입 요청과 응답 시 이벤트
// 유저 정보를 DB에 저장하기 위해 서버에 메세지 전송
public async void SignUpUserToServer(CancellationToken token = default)
{
if (!_isGuest)
{
// 정보를 불러오기 위해 Mirror 클라이언트 시작
NetworkManager.singleton.StartClient();

// 서버에서 보낸 정보를 받기 위한 Handler 등록
NetworkClient.RegisterHandler<ResponseUserSignUpMessage>(OnReceiveUserSignUpResponse);

// 서버와 연결되면 UID와 사용자 이름을 보냄
await WaitForConnectionAsync(token);
SendUserSignUpRequest(_userId, _nickname);

// 정보 불러왔으면 클라이언트 종료
if (_isRecived)
{
NetworkManager.singleton.StopClient();
_isRecived = false;
}
}
}

private void SendUserSignUpRequest(string userId, string userName)
{
RequestUserSignUpMessage requestData = new RequestUserSignUpMessage { userId = userId, nickname = userName };
NetworkClient.Send(requestData);
}

private void OnReceiveUserSignUpResponse(ResponseUserSignUpMessage msg)
{
_isRecived = msg.success;
}
#endregion

#region 이미지 업로드와 응답 시 이벤트
public async void UploadProfileImageToServer(byte[] profileImage, CancellationToken token = default)
{
if (!_isGuest)
{
_profileImage = profileImage;
NetworkManager.singleton.StartClient();
NetworkClient.RegisterHandler<ResponseProfileImageUploadMessage>(OnReceiveProfileImageUploadResponse);

await WaitForConnectionAsync(token);
UploadUserProfileImage(_userId, _profileImage);

if (_isRecived)
{
NetworkManager.singleton.StopClient();
_isRecived = false;
}
}
}

private void UploadUserProfileImage(string userId, byte[] profileImage)
public void UpdateData(string nickname, int playcount, int wincount)
{
RequestProfileImageUploadMessage requestData = new RequestProfileImageUploadMessage
{ userId = userId, image = profileImage };
NetworkClient.Send(requestData);
}

private void OnReceiveProfileImageUploadResponse(ResponseProfileImageUploadMessage msg)
{
_isRecived = msg.success;
}
#endregion

#region 닉네임 변경 요청과 응답 시 이벤트
public async void ChangeUserNameToServer(string newName, CancellationToken token = default)
{
if (!_isGuest)
{
NetworkManager.singleton.StartClient();
NetworkClient.RegisterHandler<ResponseChangeUserNameMessage>(OnReceiveChangeUserNameResponse);

await WaitForConnectionAsync(token);
RequestChangeUserName(_userId, newName);

if (_isRecived)
{
if (!_isDupcliateName)
{
_nickname = newName;
}
NetworkManager.singleton.StopClient();
_isRecived = false;
}
}
}

private void RequestChangeUserName(string userId, string username)
{
RequestChangeUserNameMessage requestData = new RequestChangeUserNameMessage
{ userId = userId, nickname = username };
NetworkClient.Send(requestData);
}

private void OnReceiveChangeUserNameResponse(ResponseChangeUserNameMessage msg)
{
_isRecived = msg.success;
_isDupcliateName = msg.isDupcliate;
_nickname = nickname;
_winCount = wincount;
_playCount = playcount;
}
#endregion
}
Loading

0 comments on commit 3b692db

Please sign in to comment.