UE5/UE5 MultiPlayerGame

MultiPlayerGame) 9. 세션인터페이스 델레게이트 설정

PJNull 2022. 6. 9.
728x90
반응형

델레게이트 설정

 

이전 포스팅에서 온라인세션을 관리하기 위해 세션 인터페이스 기능을 사용하였다. 이번 포스팅에서는 함수(CreateSession,FindSession,JoinSession,StartSession,DestorySession),델레게이트,콜백함수,델레게이트 핸들을 생성할 예정이다. 이러한 기능들은 세션 인터페이스에 존재하지만, 다른 클래스에서 서브시스템에 액세스할 있게 자체 서브시스템에서 처리할 수 있도록 몇몇 기능을 추가하는 것이다.

 

1.함수 추가

 

//MultiplayerSessionSubsystem.h

public:
	void CreateSession(int32 NumPublicConnections, FString MatchType);
	void FindSession(int32 MaxSearchResult);
	void JoinSession(const FOnlineSessionSearchResult& SessionResult);
	void DestorySession();
	void StartSession();

 

 

 

2.델레게이트 설정

 

//MultiplayerSessionSubsystem.h

private:
	FOnCreateSessionCompleteDelegate CreateSessionCompleteDelegate;
	FOnFindSessionsCompleteDelegate FindSessionCompleteDelegate;
	FOnJoinSessionCompleteDelegate JoinSessionCompleteDelegate;
	FOnDestroySessionCompleteDelegate DestorySessionCompleteDelegate;
	FOnStartSessionCompleteDelegate StartSessionCompleteDelegate;

 

 

 

3.콜백함수 생성

 

//MultiplayerSessionSubsystem.h

protected:

	void OnCreateSessionComplete(FName SessionName,bool bWasSuccessful);
	void OnFindSessionComplete(bool bWasSuccessful);
	void OnJoinSessionComplete(FName SessionName,EOnJoinSessionCompleteResult::Type Result);
	void OnDestorySessionComplete(FName SessionName, bool bWasSuccessful);
	void OnStartSessionComplete(FName SessionName, bool bWasSuccessful);

 

 

 

4.콜백과 델레게이트 바인딩

 

//MultiplayerSessionSubsystem.cpp

UMultiplayerSessionSubsystem::UMultiplayerSessionSubsystem():
	CreateSessionCompleteDelegate(FOnCreateSessionCompleteDelegate::CreateUObject(this,&ThisClass::OnCreateSessionComplete)),
	FindSessionCompleteDelegate(FOnFindSessionsCompleteDelegate::CreateUObject(this,&ThisClass::OnFindSessionComplete)),
	JoinSessionCompleteDelegate(FOnJoinSessionCompleteDelegate::CreateUObject(this,&ThisClass::OnJoinSessionComplete)),
	DestorySessionCompleteDelegate(FOnDestroySessionCompleteDelegate::CreateUObject(this,&ThisClass::OnDestorySessionComplete)),
	StartSessionCompleteDelegate(FOnStartSessionCompleteDelegate::CreateUObject(this,&ThisClass::OnStartSessionComplete))
{
}

 

 

 

5.델레게이트 핸들 생성

 

//MultiplayerSessionSubsystem.h

private:
	FDelegateHandle CreateSessionCompleteDelegateHandle;
	FDelegateHandle FindSessionCompleteDelegateHandle;
	FDelegateHandle JoinSessionCompleteDelegateHandle;
	FDelegateHandle DestorySessionCompleteDelegateHandle;
	FDelegateHandle StartSessionCompleteDelegateHandle;

 

 

 

6.앞으로 진행할 사항

 

1.서브 시스템 생성자에 새 오브젝트를 만들어 델레게이트를 구성하고 콜백을 델레게이트에 바인딩한다.

2.세션 인터페이스 델레게이트 리스트에 델레게이트를 추가한다.(AddOnCreateSessionCompleteDelegate_Handle()사용)
이 함수는 FDelegateHandle유형의 객체를 반환하며 특정 대리자에 대한 핸들을 저장할수 있다.세션 인터페이스에는 델레게이트를 초기화하는 기능이 있다.

3.해당 대리자 사용을 마치면 세션 인터페이스 대리자 목록에서 대리자를 초기화 수 있다.(ClearOnCreateSessionComplelteDelegate_Handle()사용)

728x90
반응형

댓글