using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using BackEnd;
/// <summary>
/// 게임 정보를 이용하기 위한 간단한 튜토리얼 입니다.
/// 뒤끝 SDK를 사용하는 방법은 뒤끝 SDK 개발자 문서를 참고해주세요.
/// 회원가입/로그인 : https://developer.thebackend.io/unity3d/guide/bmember/signup_login/
/// 게임 정보 생성 : https://developer.thebackend.io/unity3d/guide/gameDataV3/insert
/// 게임 정보 조회 : https://developer.thebackend.io/unity3d/guide/gameDataV3/get/where
/// 게임 정보 수정 : https://developer.thebackend.io/unity3d/guide/gameDataV3/update/inDate
/// 게임 정보 연산 : https://developer.thebackend.io/unity3d/guide/gameDataV3/updatewithCalc/inDateCalc
/// 게임 정보 삭제 : https://developer.thebackend.io/unity3d/guide/gameDataV3/delete/inDate
/// </summary>
public class BackendMgr : MonoBehaviour
{
public InputField idField = null;
public InputField pwField = null;
public string tableName = string.Empty;
private string rowIndate = string.Empty;
private string firstKey = string.Empty;
void Awake()
{
// 뒤끝 초기화
var bro = Backend.Initialize(true);
if (bro.IsSuccess() == false)
{
Debug.LogError("뒤끝 초기화 실패\n" + bro);
return;
}
Debug.Log("뒤끝 초기화 성공");
}
void Update()
{
// 비동기 콜백 함수 풀링
if (Backend.IsInitialized)
{
Backend.AsyncPoll();
}
}
// 커스텀 로그인
public void CustomLogin()
{
if (idField == null || pwField == null)
{
throw new System.Exception("idField 혹은 pwField가 null 입니다.");
}
Backend.BMember.CustomLogin(idField.text, pwField.text, callback =>
{
if (callback.IsSuccess() == false)
{
Debug.LogError("로그인 실패: " + callback);
return;
}
Debug.Log("로그인 성공");
Debug.Log(string.Format("유저 inDate: {0} / 유저 닉네임: {1}", Backend.UserInDate, Backend.UserNickName));
});
}
// 커스텀 회원가입
public void CustomSignUp()
{
if (idField == null || pwField == null)
{
throw new System.Exception("idField 혹은 pwField가 null 입니다.");
}
Backend.BMember.CustomSignUp(idField.text, pwField.text, callback =>
{
if (callback.IsSuccess() == false)
{
Debug.LogError("회원가입 실패: " + callback);
return;
}
Debug.Log("회원가입 성공");
Debug.Log(string.Format("유저 inDate: {0} / 유저 닉네임: {1}", Backend.UserInDate, Backend.UserNickName));
});
}
// 테이블 명, rowIndate 가 string.empty 인지 확인
// 각각 string.empty 인 경우 exception을 throw
void NullChecker(bool isCheckRowIndate = false)
{
// 테이블 명이 존재하는지 확인
if (string.IsNullOrEmpty(tableName))
{
throw new System.Exception("tableName is empty");
}
// 해당 튜토리얼에서
// update와 delete는 rowIndate가 필요하고,
// insert와 get은 rowIndate가 필요하지 않습니다.
if (isCheckRowIndate)
{
// rowIndate 가 존재하는지 확인
if (string.IsNullOrEmpty(rowIndate))
{
throw new System.Exception("rowIndate is empty");
}
}
}
// 게임 정보 삽입
// 아무런 컬럼을 추가하지 않고 row를 삽입합니다.
public void InsertData()
{
NullChecker();
// 게임 정보를 삽입합니다.
Backend.GameData.Insert(tableName, callback =>
{
if (callback.IsSuccess() == false)
{
Debug.LogError("테이블 삽입 실패: " + callback);
return;
}
Debug.Log("테이블 삽입 성공: " + callback);
// 현재 삽입한 데이터의 rowIndate를 저장합니다.
rowIndate = callback.GetInDate();
Debug.Log("rowIndate: " + rowIndate);
});
}
// 게임 정보를 조회합니다.
// 이전에 조회한 데이터에서 firstKey가 존재하는 경우 연속해서 계속 조회합니다.
public void GetData()
{
NullChecker();
int limit = 10;
if (string.IsNullOrEmpty(firstKey) == false)
{
Debug.Log("firstKey가 존재합니다. 해당 row 다음부터 조회합니다: " + firstKey);
}
// limit 10개로 게임 정보를 조회합니다.
// 이전에 게임 정보를 조회했을 때 firstKey가 존재했다면 조회한 데이터 다음부터 이어서 조회합니다.
// 검색 쿼리는 조건없음 입니다.
// 쿼리에 아무런 조건을 넣지 않으면 테이블 내 모든 데이터를 조회할 수 있습니다.
Backend.GameData.Get(tableName, new Where(), limit, firstKey, callback =>
{
if (callback.IsSuccess() == false)
{
Debug.LogError("테이블 조회 실패: " + callback);
firstKey = string.Empty;
return;
}
Debug.Log("테이블 조회 성공: " + callback);
// rows 내에 존재하는 데이터를 전체 출력
// row 1개당 Debug.Log를 1회 호출하기 때문에
// limit가 크면 여기서 병목이 발생할 수 있습니다.
var data = callback.FlattenRows();
for (int i = 0; i < data.Count; ++i)
{
string returnValue = string.Empty;
foreach (var key in data[i].Keys)
{
returnValue += string.Format("{0} : {1} / ", key, data[i][key].ToString());
}
Debug.Log(returnValue);
}
// 조회 결과 데이터가 1개 이상 존재하면 0번째 데이터의 inDate를 저장
if (data.Count > 0)
{
rowIndate = data[0]["inDate"].ToString();
}
// firstKey가 존재하면 firstKey를 저장
if (callback.HasFirstKey())
{
firstKey = callback.FirstKeystring();
}
else
{
firstKey = string.Empty;
}
});
}
// 게임정보 업데이트
public void UpdateData()
{
NullChecker(true);
System.Random rnd = new System.Random();
// score 컬럼에 1 ~ 100 사이 랜덤한 숫자를 갱신합니다.
Param param = new Param();
param.Add("score", rnd.Next(1, 100));
// 게임 정보 업데이트
// tableName 테이블의 rowIndate row의 score 컬럼을 위 랜덤한 값으로 수정합니다.
Backend.GameData.Update(tableName, rowIndate, param, callback =>
{
if (callback.IsSuccess() == false)
{
Debug.LogError("테이블 갱신 실패: " + callback);
return;
}
Debug.Log("테이블 갱신 성공: " + callback);
});
}
// 게임정보 연산
public void UpdateCalcData()
{
NullChecker(true);
System.Random rnd = new System.Random();
// score 컬럼에 10을 더합니다.
Param param = new Param();
param.AddCalculation("score", GameInfoOperator.addition, 10);
// 게임 정보 업데이트
// tableName 테이블의 rowIndate row의 score 컬럼에 10을 더합니다.
Backend.GameData.UpdateWithCalculation(tableName, rowIndate, param, callback =>
{
if (callback.IsSuccess() == false)
{
Debug.LogError("테이블 갱신 실패: " + callback);
return;
}
Debug.Log("테이블 갱신 성공: " + callback);
});
}
// 테이블 삭제
public void DeleteData()
{
NullChecker(true);
// 게임 정보 삭제
// tableName 테이블의 rowIndate row를 삭제합니다.
Backend.GameData.Delete(tableName, rowIndate, callback =>
{
if (callback.IsSuccess() == false)
{
Debug.LogError("테이블 삭제 실패: " + callback);
return;
}
Debug.Log("테이블 삭제 성공: " + callback);
});
}
}
'c#(유데미)' 카테고리의 다른 글
c#:jaggedArray(가변 길이 배열) (0) | 2023.10.09 |
---|---|
C#:객체 Car클래스 메서드 이용하기/배열arrays(3D차원) (0) | 2023.10.03 |
c#:do while 구문/loops/평균점수값 구하기 (0) | 2023.10.03 |
c#기초: 로그인,회원가입/최고점수 누군지 코드만들기 (0) | 2023.09.29 |
C#:user input (0) | 2023.09.27 |