独自のセッションマネージャー Extend Override アプリを作成する
注釈:本資料はAI技術を用いて翻訳されています。
Introduction
AccelByte Gaming Services (AGS) では、Extend Override アプリを使用して、セッション(パーティーおよびゲームセッション)の作成、更新、削除イベント中にセッションデータをカスタマイズできます。

Extend Override アプリをトリガーする際、Session service は次の入力パラメーターを渡します。
- 直前のセッション状態
- 現在のセッション状態
- 操作(ゲームおよびパーティーの Created、Updated、Deleted)
セッションデータに変更がある場合、アプリは Session Create 操作でセッションデータを返します。
Prerequisites
- AGS バージョン 3.78 以降の環境。
- Google Cloud Platform (GCP) アカウント。
- 次の AGS コンポーネントに関する理解:
- セッションテンプレートの構成
- ゲームセッションの統合
- AGS における セッションカスタマイズ
API Contract
コントラクトに含まれる関数は次のとおりです。
service SessionManager {
rpc OnSessionCreated(SessionCreatedRequest) returns (SessionResponse);
rpc OnSessionUpdated(SessionUpdatedRequest) returns (google.protobuf.Empty);
rpc OnSessionDeleted(SessionDeletedRequest) returns (google.protobuf.Empty);
rpc OnPartyCreated(PartyCreatedRequest) returns (PartyResponse);
rpc OnPartyUpdated(PartyUpdatedRequest) returns (google.protobuf.Empty);
rpc OnPartyDeleted(PartyDeletedRequest) returns (google.protobuf.Empty);
}
OnSessionCreated
OnSessionCreated は、ゲームセッションが作成され、セッションがクライアントに返される前にそのデータをカスタマイズしたい場合に呼び出されます。この操作は同期的に呼び出されるため、Session service はデータをデータベースに保存する前に gRPC サーバーからの応答を待ちます。
- C#
- Go
- Java
- Python
public override Task<SessionResponse> OnSessionCreated(SessionCreatedRequest request, ServerCallContext context)
{
...
}
アプリのテンプレートでは、次の関数が pkg/server/grpcserver.go にあります。
func (s *SessionManager) OnSessionCreated(ctx context.Context, request *sessionmanager.SessionCreatedRequest) (*sessionmanager.SessionResponse, error) {
...
}
アプリのテンプレートでは、次の関数が src/main/java/net/accelbyte/session/sessionmanager/service/SessionManagerImplementation.java にあります。
@Override
public void onSessionCreated(SessionCreatedRequest request, StreamObserver<SessionResponse> responseObserver) {
...
}
アプリのテンプレートでは、次の関数が src/app/services/session_manager.py にあります。
async def OnSessionCreated(self, request: SessionCreatedRequest, context: Any) -> SessionResponse:
...
OnSessionUpdated
OnSessionUpdated は、ゲームセッションに更新または変更があったときに呼び出されます。この操作は非同期であるため、Session service はゲームセッションに更新があると gRPC サーバーに通知しますが、データベースを更新するための応答を待つことはありません。
- C#
- Go
- Java
- Python
public override Task<Empty> OnSessionUpdated(SessionUpdatedRequest request, ServerCallContext context)
{
...
}
アプリのテンプレートでは、次の関数が pkg/server/grpcserver.go にあります。
func (s *SessionManager) OnSessionUpdated(ctx context.Context, request *sessionmanager.SessionUpdatedRequest) (*emptypb.Empty, error) {
...
}
アプリのテンプレートでは、次の関数が src/main/java/net/accelbyte/session/sessionmanager/service/SessionManagerImplementation.java にあります。
@Override
public void onSessionUpdated(SessionUpdatedRequest request, StreamObserver<Empty> responseObserver) {
...
}
アプリのテンプレートでは、次の関数が src/app/services/session_manager.py にあります。
async def OnSessionUpdated(self, request: SessionUpdatedRequest, context: Any) -> Empty:
...
OnSessionDeleted
OnSessionDeleted は、ゲームセッションが削除される際に呼び出されます。このイベントは非同期であるため、Session service は削除リクエストがあると gRPC サーバーに通知しますが、データベースを更新するための応答を待つことはありません。
- C#
- Go
- Java
- Python
public override Task<Empty> OnSessionDeleted(SessionDeletedRequest request, ServerCallContext context)
{
...
}
アプリのテンプレートでは、次の関数が pkg/server/grpcserver.go にあります。
func (s *SessionManager) OnSessionDeleted(ctx context.Context, request *sessionmanager.SessionDeletedRequest) (*emptypb.Empty, error) {
...
}
アプリのテンプレートでは、次の関数が src/main/java/net/accelbyte/session/sessionmanager/service/SessionManagerImplementation.java にあります。
public void onSessionDeleted(SessionDeletedRequest request, StreamObserver<Empty> responseObserver) {
...
}
アプリのテンプレートでは、次の関数が src/app/services/session_manager.py にあります。
async def OnSessionDeleted(self, request: SessionDeletedRequest, context: Any) -> Empty:
...
OnPartyCreated
OnPartyCreated は、パーティーセッションが作成され、セッションがクライアントに返される前にそのデータをカスタマイズしたい場合に呼び出されます。この操作は同期的に呼び出されるため、Session service はデータをデータベースに保存する前に gRPC サーバーからの応答を待ちます。
- C#
- Go
- Java
- Python
public override Task<PartyResponse> OnPartyCreated(PartyCreatedRequest request, ServerCallContext context)
{
...
}
アプリのテンプレートでは、次の関数が pkg/server/grpcserver.go にあります。
func (s *SessionManager) OnPartyCreated(ctx context.Context, request *sessionmanager.PartyCreatedRequest) (*sessionmanager.PartyResponse, error) {
...
}
アプリのテンプレートでは、次の関数が src/main/java/net/accelbyte/session/sessionmanager/service/SessionManagerImplementation.java にあります。
@Override
public void onPartyCreated(PartyCreatedRequest request, StreamObserver<PartyResponse> responseObserver) {
...
}
アプリのテンプレートでは、次の関数が src/app/services/session_manager.py にあります。
async def OnPartyCreated(self, request: PartyCreatedRequest, context: Any) -> PartyResponse:
...
OnPartyUpdated
OnPartyUpdated は、パーティーセッションに更新または変更があったときに呼び出されます。この操作は非同期であるため、Session service はパーティーセッションに更新があると gRPC サーバーに通知しますが、データベースを更新するための応答を待つことはありません。
- C#
- Go
- Java
- Python
public override Task<Empty> OnPartyUpdated(PartyUpdatedRequest request, ServerCallContext context)
{
...
}
アプリのテンプレートでは、次の関数が pkg/server/grpcserver.go にあります。
func (s *SessionManager) OnPartyUpdated(ctx context.Context, request *sessionmanager.PartyUpdatedRequest) (*emptypb.Empty, error) {
...
}
アプリのテンプレートでは、次の関数が src/main/java/net/accelbyte/session/sessionmanager/service/SessionManagerImplementation.java にあります。
@Override
public void onPartyUpdated(PartyUpdatedRequest request, StreamObserver<Empty> responseObserver) {
...
}
アプリのテンプレートでは、次の関数が src/app/services/session_manager.py にあります。
async def OnPartyUpdated(self, request: PartyUpdatedRequest, context: Any) -> Empty:
...
OnPartyDeleted
OnPartyDeleted は、パーティーセッションが削除される際に呼び出されます。このイベントは非同期であるため、Session service は削除リクエストがあると gRPC サーバーに通知しますが、データベースを更新するための応答を待つことはありません。
- C#
- Go
- Java
- Python
public override Task<Empty> OnPartyDeleted(PartyDeletedRequest request, ServerCallContext context)
{
...
}
アプリのテンプレートでは、次の関数が pkg/server/grpcserver.go にあります。
func (s *SessionManager) OnPartyDeleted(ctx context.Context, request *sessionmanager.PartyDeletedRequest) (*emptypb.Empty, error) {
...
}
アプリのテンプレートでは、次の関数が src/main/java/net/accelbyte/session/sessionmanager/service/SessionManagerImplementation.java にあります。
@Override
public void onPartyDeleted(PartyDeletedRequest request, StreamObserver<Empty> responseObserver) {
...
}
アプリのテンプレートでは、次の関数が src/app/services/session_manager.py にあります。
async def OnPartyDeleted(self, request: PartyDeletedRequest, context: Any) -> Empty:
...
gRPC リクエストの処理に関する詳細は、こちらを参照してください。