GS2-Guild 트랜잭션 액션
액션의 조합과 동시 실행
모든 서비스에 공통되는 전제는 트랜잭션 액션의 조합에 정리되어 있습니다. 먼저 그쪽을 읽어 주십시오. 이 절의 나머지는 GS2-Guild 고유의 내용입니다.
GS2-Guild의 트랜잭션 액션은 네임스페이스·길드 모델·길드 이름의 조합으로 결정되는 하나의 길드를 대상으로 합니다. 대상이 사용자가 아니라 길드라는 점에 주의해 주십시오. 어떤 사용자에 대해 발행한 트랜잭션이 다수의 사용자가 공유하는 것을 업데이트하게 됩니다. 길드는 업데이트할 때마다 전체가 다시 쓰입니다.
| 조작 | 같은 행을 겹쳤을 때 | 중첩 너머 | 다른 대상이 되는 경계 |
|---|---|---|---|
최대 멤버 수의 가산IncreaseMaximumCurrentMaximumMemberCountByGuildName | 통합되어 값이 합산된다 | 실패한다 | 네임스페이스·길드 모델·길드 이름 |
최대 멤버 수의 감산DecreaseMaximumCurrentMaximumMemberCountByGuildName | 통합되어 값이 합산된다 | 실패한다 | 네임스페이스·길드 모델·길드 이름 |
최대 멤버 수의 설정SetMaximumCurrentMaximumMemberCountByGuildName | 같은 값이면 통합. 값이 다르면 발행 시에 오류 | 실패한다 | 네임스페이스·길드 모델·길드 이름 |
최대 멤버 수의 검증VerifyCurrentMaximumMemberCountByGuildName | 먼저 지정한 쪽이 남음 | 읽기만 하므로 충돌하지 않는다 | 길드·검증 타입·인원 수 |
멤버임의 검증VerifyIncludeMemberByUserId | 먼저 지정한 쪽이 남음 | 읽기만 하므로 충돌하지 않는다 | 길드·검증 타입·대상 사용자 |
업데이트하는 3개의 행은 경계가 같습니다. 하나의 길드에 대해 가산·감산·설정을 섞을 수는 없습니다.
최대 멤버 수는 길드 모델에서 허용된 범위에 들어가야 하며, 통합 후의 합계에 대해 판정되므로, 단독으로는 들어가는 가산이라도 다른 가산과 합쳐지면 거부될 수 있습니다.
검증 액션은 트랜잭션 시작 시점의 길드를 봅니다. 같은 트랜잭션에서 도달하는 멤버 수나, 같은 트랜잭션에서 성립하는 가입을 검증할 수는 없습니다.
중첩된 트랜잭션에 주의
나란히 작성하면 1건으로 통합되었을 같은 길드에 대한 가산끼리라도, 한쪽이 안쪽에서 도착하는 경우에는 트랜잭션이 실패합니다.
길드는 다수의 사용자가 공유하지만, 이것은 「같은 길드에 속한 두 사람이 동시에 무언가를 했을」 때가 아니라 「하나의 트랜잭션이 보상이나 추첨을 통해 같은 길드를 두 번 건드렸을」 때 일어납니다. 보상이나 추첨의 내용까지 포함하여, 하나의 트랜잭션 안에서 하나의 길드를 업데이트하는 곳이 한 군데만 되도록 설계해 주십시오.
제한을 회피하고 싶은 경우
최대 멤버 수의 가산과 설정은 획득 액션, 감산은 소비 액션입니다. 획득 액션끼리의 충돌은 acquireActionUseJobQueue를 활성화하면 해소되지만, 감산과의 공존은 enableAtomicCommit을 비활성화하지 않으면 해소되지 않습니다.
동시 실행과 재시도
길드는 리비전 대조를 수반하여 전체가 다시 쓰이므로, 가산끼리라도 GS2-Experience의 경험치처럼 「일정 범위라면 충돌하지 않는다」와 같은 완화는 없습니다. 게다가 길드는 멤버가 공유하는 것이므로, 한 사용자가 소유하는 것에 비해 업데이트가 겹치기 쉽습니다. 가입·탈퇴, 길드의 변경, 멤버의 메타데이터 업데이트는 모두 같은 길드를 건드리므로, 이것들과 최대 멤버 수의 변경이 겹치면 충돌(409)이 반환될 수 있습니다. 요청 내용에 문제가 있는 것은 아니므로, 재시도하면 성공합니다.
멤버의 출입이 많은 시간대에 최대 멤버 수를 올리는 트랜잭션을 실행하는 경우에는 재시도를 전제로 해 주십시오.
Verify Action
검증 액션
Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName
길드 이름을 지정하여 최대 참가 가능 인원수 검증
선택된 비교 연산자를 사용하여 지정된 길드의 currentMaximumMemberCount를 지정된 값과 비교 검증합니다(서버 사이드 조작).
지원되는 연산자: less, lessEqual, greater, greaterEqual, equal, notEqual.
수량 지정 가능한 액션: 아니오
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||||||||||||||||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||||||||||||||||
| guildName | string | ✓ | ~ 128자 | 길드명 | ||||||||||||||||
| verifyType | 문자열 열거형 enum { “less”, “lessEqual”, “greater”, “greaterEqual”, “equal”, “notEqual” } | ✓ | 검증 종류
| |||||||||||||||||
| value | int | 1 ~ 2147483646 | 최대 참가 가능 인원수 | |||||||||||||||||
| multiplyValueSpecifyingQuantity | bool | false | 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 |
{
"action": "Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName",
"request": {
"namespaceName": "[string]네임스페이스 이름",
"guildModelName": "[string]길드 모델 이름",
"guildName": "[string]길드명",
"verifyType": "[string]검증 종류",
"value": "[int]최대 참가 가능 인원수",
"multiplyValueSpecifyingQuantity": "[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부"
}
}action: Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName
request:
namespaceName: "[string]네임스페이스 이름"
guildModelName: "[string]길드 모델 이름"
guildName: "[string]길드명"
verifyType: "[string]검증 종류"
value: "[int]최대 참가 가능 인원수"
multiplyValueSpecifyingQuantity: "[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부"transaction.service("guild").verify.verify_current_maximum_member_count_by_guild_name({
namespaceName="[string]네임스페이스 이름",
guildModelName="[string]길드 모델 이름",
guildName="[string]길드명",
verifyType="[string]검증 종류",
value="[int]최대 참가 가능 인원수",
multiplyValueSpecifyingQuantity="[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부",
})Gs2Guild:VerifyIncludeMemberByUserId
사용자 ID를 지정하여 길드 멤버에 사용자 ID가 포함되어 있는지 검증
지정된 사용자가 길드의 멤버인지 여부를 검증합니다(서버 사이드 조작).
2가지 검증 유형을 지원합니다: ‘include’와 ’notInclude’.
수량 지정 가능한 액션: 아니오
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||||||||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||||||||
| guildName | string | ✓ | UUID | ~ 36자 | 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. | |||||||
| userId | string | ✓ | ~ 128자 | 사용자ID#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다. | ||||||||
| verifyType | 문자열 열거형 enum { “include”, “notInclude” } | ✓ | 검증 종류
| |||||||||
| timeOffsetToken | string | ~ 1024자 | 타임 오프셋 토큰 |
{
"action": "Gs2Guild:VerifyIncludeMemberByUserId",
"request": {
"namespaceName": "[string]네임스페이스 이름",
"guildModelName": "[string]길드 모델 이름",
"guildName": "[string]길드명",
"userId": "[string]사용자ID",
"verifyType": "[string]검증 종류",
"timeOffsetToken": "[string]타임 오프셋 토큰"
}
}action: Gs2Guild:VerifyIncludeMemberByUserId
request:
namespaceName: "[string]네임스페이스 이름"
guildModelName: "[string]길드 모델 이름"
guildName: "[string]길드명"
userId: "[string]사용자ID"
verifyType: "[string]검증 종류"
timeOffsetToken: "[string]타임 오프셋 토큰"transaction.service("guild").verify.verify_include_member_by_user_id({
namespaceName="[string]네임스페이스 이름",
guildModelName="[string]길드 모델 이름",
guildName="[string]길드명",
userId="[string]사용자ID",
verifyType="[string]검증 종류",
timeOffsetToken="[string]타임 오프셋 토큰",
})Consume Action
소비 액션
Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName
길드 이름을 지정하여 최대 참가 가능 인원 감소
지정된 길드의 currentMaximumMemberCount를 지정된 값만큼 감소시킵니다(서버 사이드 조작).
결과 값은 0 미만이 될 수 없습니다.
수량 지정 가능한 액션: 예
반전 가능한 액션: 예
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildName | string | ✓ | ~ 128자 | 길드명 | ||
| value | int | 1 ~ 2147483646 | 최대 인원수의 감소량 |
{
"action": "Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName",
"request": {
"namespaceName": "[string]네임스페이스 이름",
"guildModelName": "[string]길드 모델 이름",
"guildName": "[string]길드명",
"value": "[int]최대 인원수의 감소량"
}
}action: Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName
request:
namespaceName: "[string]네임스페이스 이름"
guildModelName: "[string]길드 모델 이름"
guildName: "[string]길드명"
value: "[int]최대 인원수의 감소량"transaction.service("guild").consume.decrease_maximum_current_maximum_member_count_by_guild_name({
namespaceName="[string]네임스페이스 이름",
guildModelName="[string]길드 모델 이름",
guildName="[string]길드명",
value="[int]최대 인원수의 감소량",
})Acquire Action
입수 액션
Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName
길드 이름을 지정하여 최대 참가 가능 인원 추가
길드의 currentMaximumMemberCount를 지정된 값만큼 증가시킵니다.
결과 값은 길드 모델에서 정의된 maximumMemberCount를 초과할 수 없습니다.
수량 지정 가능한 액션: 예
반전 가능한 액션: 예
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildName | string | ✓ | ~ 128자 | 길드명 | ||
| value | int | 1 ~ 2147483646 | 최대 인원수의 증가량 |
{
"action": "Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName",
"request": {
"namespaceName": "[string]네임스페이스 이름",
"guildModelName": "[string]길드 모델 이름",
"guildName": "[string]길드명",
"value": "[int]최대 인원수의 증가량"
}
}action: Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName
request:
namespaceName: "[string]네임스페이스 이름"
guildModelName: "[string]길드 모델 이름"
guildName: "[string]길드명"
value: "[int]최대 인원수의 증가량"transaction.service("guild").acquire.increase_maximum_current_maximum_member_count_by_guild_name({
namespaceName="[string]네임스페이스 이름",
guildModelName="[string]길드 모델 이름",
guildName="[string]길드명",
value="[int]최대 인원수의 증가량",
})Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName
길드 이름을 지정하여 최대 참가 가능 인원수 설정
길드의 currentMaximumMemberCount를 지정된 절대값으로 설정합니다.
증감 조작과 달리 차분을 적용하는 것이 아니라 값을 직접 설정합니다.
업데이트 후 길드와 업데이트 전 길드 상태를 모두 반환하여 호출자가 변경 사항을 추적할 수 있도록 합니다.
수량 지정 가능한 액션: 아니오
반전 가능한 액션: 아니오
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildName | string | ✓ | ~ 128자 | 길드명 | ||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| value | int | 1 ~ 2147483646 | 설정할 최대 인원수 |
{
"action": "Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName",
"request": {
"namespaceName": "[string]네임스페이스 이름",
"guildName": "[string]길드명",
"guildModelName": "[string]길드 모델 이름",
"value": "[int]설정할 최대 인원수"
}
}action: Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName
request:
namespaceName: "[string]네임스페이스 이름"
guildName: "[string]길드명"
guildModelName: "[string]길드 모델 이름"
value: "[int]설정할 최대 인원수"transaction.service("guild").acquire.set_maximum_current_maximum_member_count_by_guild_name({
namespaceName="[string]네임스페이스 이름",
guildName="[string]길드명",
guildModelName="[string]길드 모델 이름",
value="[int]설정할 최대 인원수",
})