Skip to main content

요청 값 읽기

유니티에서 Backend.BFunc.InvokeFunction으로 보낸 Param은 함수 안에서 Backend.Content로 읽습니다.
내 PC에서 backend debug로 실행할 때는 프로젝트의 requests 폴더에 있는 요청 파일의 내용이 Param 대신 들어옵니다. 요청 파일은 로컬 실행 문서를 참고해 주세요.

1. SDK 초기화하기​

Function 함수가 시작할 때 Backend.Initialize(ref stream)를 한 번 호출합니다.
호출한 뒤부터 Backend.Content와 Backend.HasKey를 사용할 수 있습니다. 호출한 뒤에는 stream을 직접 읽지 않습니다.

public Stream Function(Stream stream, ILambdaContext context)
{
try
{
Backend.Initialize(ref stream);
}
catch (Exception e)
{
return ReturnErrorObject("initialize " + e.Message);
}

// 여기부터 Backend.Content를 사용할 수 있습니다.
}

ReturnErrorObject는 오류를 JSON으로 돌려주는 함수입니다. 결과 반환하기 문서를 참고해 주세요.

2. 값이 있는지 확인하기​

public static bool HasKey(string key);
파라미터타입설명
keystring확인할 값의 키

요청에 key가 있으면 true, 없으면 false를 반환합니다.
유니티에서 키를 빠뜨리거나 오타를 내도 함수는 실행되므로, 값을 읽기 전에 먼저 확인합니다.

if (Backend.HasKey("value") == false)
{
return ReturnErrorObject("value key is not exist");
}

3. 값 읽기​

Backend.Content의 타입은 BackEnd.BackndLitJson.JsonData입니다.
LitJson.dll의 LitJson.JsonData와는 다른 타입이므로 서로 바꾸어 사용할 수 없습니다.

// 문자열
string itemId = Backend.Content["itemId"].ToString();

// 숫자: 문자열로 바꾼 뒤 변환합니다. 변환에 실패하면 오류를 돌려줍니다.
if (long.TryParse(Backend.Content["price"].ToString(), out long price) == false)
{
return ReturnErrorObject("price must be a number");
}

유니티에서 아래와 같이 보내면 위 코드의 itemId는 "sword-0001", price는 500이 됩니다.

Param param = new Param();
param.Add("itemId", "sword-0001");
param.Add("price", 500);

Backend.BFunc.InvokeFunction("market", param);

요청 값은 그대로 믿지 않습니다​

요청 값은 게임 클라이언트가 정합니다. 변조된 클라이언트는 어떤 값이든 보낼 수 있습니다.

  • 가격, 보상 수량, 확률처럼 조작되면 안 되는 값은 요청 값으로 정하지 않고 함수 안이나 서버 데이터에서 정합니다.
  • 숫자는 범위(0보다 큰지, 상한을 넘지 않는지)를 확인한 뒤 사용합니다.
  • 누가 호출했는지는 요청 값으로 판단하지 않습니다. userId 같은 값을 받아 그 사용자의 데이터를 바꾸면, 다른 사람의 데이터를 바꿀 수 있게 됩니다. 호출한 사용자는 호출한 사용자 확인하기 문서의 방법으로 확인합니다.