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

Extend Override アプリをトリガーすると、Session サービスは以下の入力パラメータを提供します:
- 前のセッション状態
- 現在のセッション状態
- 操作(ゲームおよびパーティーの作成、更新、削除)
アプリは、セッションデータに変更がある場合、Session Create 操作でセッションデータを返します。
前提条件
- AGS バージョン 3.78 以降の環境。
- Google Cloud Platform(GCP)アカウント。
- 以下の AGS コンポーネントに関する理解:
API コントラクト
コントラクトには以下の関数があります:
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 サービスはデータをデータベースに保存する前に 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 サービスはゲームセッションに更新がある場合に 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 サービスは削除リクエストがある場合に 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 サービスはデータをデータベースに保存する前に 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 サービスはパーティーセッションに更新がある場合に 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 サービスは削除リクエストがある場合に 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 リクエスト処理の詳細については、こちらをご覧ください。