다음을 통해 공유


자습서: CloudScript 컨텍스트 모델 사용

PlayFab은 API, 예약된 작업, PlayStream 이벤트, 플레이어가 세그먼트에 들어오고 나갈 때를 비롯하여 다양한 메커니즘을 통해 스크립트를 실행합니다. 대부분의 경우 스크립트가 실행되는 컨텍스트는 실행 방법에 중요합니다. 예를 들어 스크립트를 실행 중인 플레이어의 플레이어 ID를 알 수 있습니다. 스크립트가 실행되는 컨텍스트에 따라 사용 가능한 데이터 모델이 결정되고 스크립트에 사용되는 컨텍스트 관련 데이터가 제공됩니다.

이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

  • 공유 컨텍스트 모델 사용
  • 컨텍스트 모델 사용(ExecuteFunction API를 통해 실행하는 경우)
  • 컨텍스트 모델 사용(예약된 작업을 통해 실행하는 경우)
  • 컨텍스트 모델 사용(플레이어의 컨텍스트에서 실행하는 경우)
  • 컨텍스트 모델 사용(엔터티의 컨텍스트에서 실행하는 경우)

공유 타이틀 인증 컨텍스트 모델을 사용하는 방법

스크립트를 실행하는 방법에 관계없이 타이틀 인증 컨텍스트는 항상 제공됩니다. 여기에는 스크립트를 실행하는 데 사용되는 타이틀 ID 및 엔터티 토큰(자세한 내용은 GetEntityToken 참조)이 포함됩니다. 이 컨텍스트를 알고 있으면 서버 API를 사용하여 스크립트에서 PlayFab으로 추가 API를 호출할 수 있습니다.

// Shared models
public class TitleAuthenticationContext
{
    public string Id { get; set; }
    public string EntityToken { get; set; }
}

컨텍스트 모델 사용(ExecuteFunction API를 통해 실행하는 경우)

ExecuteFunction API를 사용하여 스크립트를 실행하는 경우에 제공되는 컨텍스트에는 다음 정보가 포함됩니다.

  • 호출자의 엔터티 프로필
  • 타이틀 인증 컨텍스트
  • PlayStream 이벤트가 실행 중인 함수의 일부로 전송되는지 여부를 나타내는 부울
  • 스크립트를 호출할 때 사용되는 함수 인수
// Models via ExecuteFunction API
public class FunctionExecutionContext<T>
{
    public PlayFab.ProfilesModels.EntityProfileBody CallerEntityProfile { get; set; }
    public TitleAuthenticationContext TitleAuthenticationContext { get; set; }
    public bool? GeneratePlayStreamEvent { get; set; }
    public T FunctionArgument { get; set; }
}

public class FunctionExecutionContext : FunctionExecutionContext<object>
{
}

컨텍스트 모델 사용(예약된 작업을 통해 실행하는 경우)

예약된 작업을 통해 스크립트를 실행하는 경우에 제공되는 컨텍스트에는 다음 정보가 포함됩니다.

  • 예약된 작업 이름 ID
  • PlayStream 이벤트 스택을 포함하는 이벤트 기록
  • 타이틀 인증 컨텍스트
  • PlayStream 이벤트가 실행 중인 함수의 일부로 전송되는지 여부를 나타내는 부울
  • 스크립트를 호출할 때 사용되는 함수 인수
// Models via Scheduled task
public class PlayStreamEventHistory
{
    public string ParentTriggerId { get; set; }
    public string ParentEventId { get; set; }
    public bool TriggeredEvents { get; set; }
}

public class ScheduledTaskFunctionExecutionContext<T>
{
    public PlayFab.CloudScriptModels.NameIdentifier ScheduledTaskNameId { get; set; }
    public Stack<PlayStreamEventHistory> EventHistory { get; set; }
    public TitleAuthenticationContext TitleAuthenticationContext { get; set; }
    public bool? GeneratePlayStreamEvent { get; set; }
    public T FunctionArgument { get; set; }
}

public class ScheduledTaskFunctionExecutionContext : ScheduledTaskFunctionExecutionContext<object>
{
}

컨텍스트 모델 사용(플레이어의 컨텍스트에서 실행하는 경우)

플레이어 PlayStream 이벤트를 통해, 세그먼트에 들어오거나 나갈 때 또는 세그먼트 기반 예약 작업의 일부로 스크립트를 실행하는 경우에 제공된 컨텍스트에는 다음 정보가 포함됩니다.

  • 플레이어 프로필
  • 플레이어 프로필이 잘리는지 여부를 나타내는 부울
    • 플레이어 프로필이 2048바이트를 초과하면 잘립니다. 이 경우 프로필 API(서버, 클라이언트 또는 엔터티 API)를 사용하여 전체 프로필을 검색해야 합니다.
  • 스크립트를 트리거한 PlayStream 이벤트
  • PlayStream 이벤트가 실행 중인 함수의 일부로 전송되는지 여부를 나타내는 부울
  • 스크립트를 호출할 때 사용되는 함수 인수
// Models via Player PlayStream event, entering or leaving a 
// player segment or as part of a player segment based scheduled task.
public class PlayerPlayStreamFunctionExecutionContext<T>
{
    public PlayFab.CloudScriptModels.PlayerProfileModel PlayerProfile { get; set; }
    public bool PlayerProfileTruncated { get; set; }
    public PlayFab.CloudScriptModels.PlayStreamEventEnvelopeModel PlayStreamEventEnvelope { get; set; }
    public TitleAuthenticationContext TitleAuthenticationContext { get; set; }
    public bool? GeneratePlayStreamEvent { get; set; }
    public T FunctionArgument { get; set; }
}

public class PlayerPlayStreamFunctionExecutionContext : PlayerPlayStreamFunctionExecutionContext<object>
{
}

엔터티 PlayStream 이벤트를 통해, 엔터티 세그먼트에 들어오거나 나갈 때 또는 엔터티 세그먼트 기반 예약 작업의 일부로 실행하는 경우 컨텍스트 모델을 사용합니다.

엔터티 PlayStream 이벤트를 통해, 엔터티 세그먼트에 들어오거나 나갈 때 또는 세그먼트 기반 예약 작업의 일부로 스크립트를 실행하는 경우에 제공된 컨텍스트에는 다음 정보가 포함됩니다.

  • 엔터티 프로필
  • 스크립트를 트리거한 PlayStream 이벤트
  • PlayStream 이벤트가 실행 중인 함수의 일부로 전송되는지 여부를 나타내는 부울
// Models via Entity PlayStream event, entering or leaving an 
// entity segment or as part of an entity segment based scheduled task.
public class EventFullName
{
    public string Name { get; set; }
    public string Namespace { get; set; }
}

public class OriginInfo
{
    public string Id { get; set; }
    public DateTime? Timestamp { get; set; }
}

public class EntityPlayStreamEvent<T>
{
    public string SchemaVersion { get; set; }
    public EventFullName FullName { get; set; }
    public string Id { get; set; }
    public DateTime Timestamp { get; set; }
    public PlayFab.CloudScriptModels.EntityKey Entity { get; set; }
    public PlayFab.CloudScriptModels.EntityKey Originator { get; set; }
    public OriginInfo OriginInfo { get; set; }
    public T Payload { get; set; }
    public PlayFab.ProfilesModels.EntityLineage EntityLineage { get; set; }
}

public class EntityPlayStreamEvent : EntityPlayStreamEvent<object>
{
}

public class EntityPlayStreamFunctionExecutionContext<TPayload, TArg>
{
    public PlayFab.ProfilesModels.EntityProfileBody CallerEntityProfile { get; set; }
    public EntityPlayStreamEvent<TPayload> PlayStreamEvent { get; set; }
    public TitleAuthenticationContext TitleAuthenticationContext { get; set; }
    public bool? GeneratePlayStreamEvent { get; set; }
    public TArg FunctionArgument { get; set; }
}

public class EntityPlayStreamFunctionExecutionContext : EntityPlayStreamFunctionExecutionContext<object, object>
{
}

참고 항목

Azure Functions 도우미 클래스를 사용하여 전체 CloudScript를 다운로드할 수 있습니다.