/*! \file
* \brief StovePCMatchmakingCallback 헤더파일
* \details StovePCMatchmaking 콜백에서 사용하는 struct 를 선언합니다.
*/
#ifndef STOVEPCMATCHMAKINGCALLBACK_H_
#define STOVEPCMATCHMAKINGCALLBACK_H_

#include "StovePCMatchmakingDefine.h"

/*! \defgroup callback Matchmaking Callback
*  \brief API 호출후 콜백 함수로 호출되는 응답 값입니다.
*/

#pragma pack(push, 4)

/*! \ingroup callback
*  \struct StovePCMatchmakingError
*  \brief 콜백 호출시 전달되는 구조체입니다.
*/
struct StovePCMatchmakingError
{
	/// 호출된 함수를 나타내는 enum 값
	StovePCMatchmakingFunctionType functionType;

	/// 콜백에 대한 응답 결과값
	StovePCMatchmakingResult result;

	/// Error가 발생한 이유에 대한 상세 메시지
	const char* message;

	/// 외부에서 발생한 Error 값 (HTTP error or API result code)
	int externalError;
};

/*! \ingroup callback
*  \struct StovePCMatchmakingLobby
*  \brief 로비 메타 데이터(사용자 정의 데이터) 구조체입니다.
*/
struct StovePCMatchmakingLobby
{
	/// 로비 타이틀
	const wchar_t* title;

	/// 로비 현재 인원수
	int currentUsers;

	/// 로비 최대 인원수
	int maxUsers;

	/// 로비 생성한 시간
	__int64 createAt;

	/// 로비 이름
	const wchar_t* lobby;

	/// 비공개 설정 유무
	bool isPasswordProtected;

	///< 로비 데이터 배열 포인터 (ex. StovePCMatchmakingMetadata [] array)
	StovePCMatchmakingMetadata* lobbyDataArray;

	///< 로비 데이터 배열 개수
	int lobbyDataCount;
};

/*! \ingroup callback
*  \struct StovePCMatchmakingLobbyUser
*  \brief 로비 유저 정보 구조체입니다.
*/
struct StovePCMatchmakingLobbyUser
{
	/// 아이디
	unsigned __int64 UID;;

	/// 유저 닉네임
	const wchar_t* nickname;

	/// 로비에서의 등급		
	StovePCMatchmakingAffiliation affiliation;

	/// 로비 내 해당 유저의 메타 데이터 배열 포인터 (ex. MM_Metadata_t [] array)
	const StovePCMatchmakingMetadata* userDataArray;

	/// 유저 데이터 배열 개수
	int userDataCount;
};

/*! \ingroup callback
*  \struct StovePCMatchmakingCreateLobby
*  \brief 로비를 만든 후 응답 값입니다. 로비 생성을 알립니다.
*/
struct StovePCMatchmakingCreateLobby 
{
	/// 생성된 로비 이름
	const wchar_t* lobby;
};

/*! \ingroup callback
*  \struct StovePCMatchmakingJoinLobby
*  \brief 로비 입장에 대한 응답 값입니다. 로비 입장을 알립니다.
*/
struct StovePCMatchmakingJoinLobby
{
	/// 입장한 로비 제목
	const wchar_t* title;

	/// 입장한 로비 이름
	const wchar_t* lobby;

	/// 로비 입장 가능한 총인원수
	int maxUser;				

	/// 암호화된 비공개 로비 유무
	bool isPasswordProtected;

	/// 로비 메타 데이터 배열 포인터 (ex. StovePCMatchmakingMetadata [] array)
	const StovePCMatchmakingMetadata* lobbyDataArray;

	/// 로비 메타 데이터 배열 개수
	int lobbyDataCount;					
};

/*! \ingroup callback
*  \struct StovePCMatchmakingUserJoin
*  \brief 로비 참여 유저에 대한 응답값입니다. 로비에 유저가 입장시 호출됩니다.
*/
struct StovePCMatchmakingUserJoin
{
	/// 로비 이름
	const wchar_t* lobby;

	/// 아이디
	unsigned __int64 UID;

	/// 유저 닉네임
	const wchar_t* nickname;

	/// 로비에서의 등급		
	StovePCMatchmakingAffiliation affiliation;				

	/// 로비 내 해당 유저의 메타 데이터 배열 포인터 (ex. StovePCMatchmakingMetadata [] array)
	const StovePCMatchmakingMetadata* userDataArray;

	/// 유저 데이터 배열 개수
	int userDataCount;					
};

/*! \ingroup callback
*  \struct StovePCMatchmakingLeaveLobby
*  \brief 로비 퇴장에 대한 응답값입니다. 내가 로비에서 퇴장시 호출됩니다.
*/
struct StovePCMatchmakingLeaveLobby
{
	/// 로비 이름
	const wchar_t* lobby;
};

/*! \ingroup callback
*  \struct StovePCMatchmakingDestroyLobby
*  \brief 로비를 삭제합니다. 방장만 할 수 있습니다.
*/
struct StovePCMatchmakingDestroyLobby
{
	/// 로비 이름
	const wchar_t* lobby;
};

/*! \ingroup callback
*  \struct StovePCMatchmakingUserLeave
*  \brief 로비에서 퇴장한 유저에 대한 응답값입니다. 로비에서 유저가 퇴장 시 호출됩니다.
*/
struct StovePCMatchmakingUserLeave
{
	/// 로비 이름
	const wchar_t* lobby;

	/// 퇴장 유저 아이디
	unsigned __int64 UID;

	/// 유저 닉네임
	const wchar_t* nickname;
};

/*! \ingroup callback
*  \struct StovePCMatchmakingUpdateLobbyUser
*  \brief 로비 유저의 업데이트된 응답값입니다. 로비 내 유저 정보 혹은 유저 데이터 변경시 호출됩니다.
*/
struct StovePCMatchmakingUpdateLobbyUser
{
	/// 로비 이름
	const wchar_t* lobby;

	/// 아이디
	unsigned __int64 UID;

	/// 유저 닉네임
	const wchar_t* nickname;

	/// 로비에서의 등급		
	StovePCMatchmakingAffiliation affiliation;				

	/// 로비 내 해당 유저의 메타 데이터 배열 포인터 (ex. StovePCMatchmakingMetadata [] array)
	const StovePCMatchmakingMetadata* userDataArray;

	/// 유저 데이터 배열 개수
	int userDataCount;					
};

/*! \ingroup callback
*  \struct StovePCMatchmakingUpdateLobbyData
*  \brief 로비 메타 데이터가 업데이트될시 응답값입니다. <BR>
*	- 호출 시기
*		- 로비 생성시, API에 입력한 로비 설정 적용되어 콜백됩니다.
*		- 방장이 로비 설정 변경시 콜백됩니다.
*/
struct StovePCMatchmakingUpdateLobbyData
{
	/// 로비 이름
	const wchar_t* lobby;

	/// 로비 메타 데이터 배열 포인터 (ex. StovePCMatchmakingMetadata [] array)
	const StovePCMatchmakingMetadata* lobbyDataArray;

	/// 로비 메타 데이터 배열 개수
	int lobbyDataCount;					
};

/*! \ingroup callback
*  \struct StovePCMatchmakingRecvLobbyBinarydata
*  \brief 로비 내 유저로부터 수신된 바이너리 데이터 응답값입니다.
*/
struct StovePCMatchmakingRecvLobbyBinarydata
{
	/// 로비 이름
	const wchar_t* lobby;

	/// 송신자 아이디
	unsigned __int64 fromUID;;

	/// 송신자 닉네임
	const wchar_t* fromNickname;

	/// 수신 데이터 배열
	const unsigned char* binarydata;

	/// 수신 데이터 배열 크기
	int dataLength;						

	/// 바이너리외 송신할 데이터(json string, profile등을 상대방에게 보낼 수 있습니다)
	const wchar_t* meta;
};

/*! \ingroup callback
*  \struct StovePCMatchmakingSendLobbyBinarydata
*  \brief 로비에 바이너리 송신시 응답값입니다.
*/
struct StovePCMatchmakingSendLobbyBinarydata
{
	/// 로비 이름
	const wchar_t* lobby;

	/// 송신자 아이디
	unsigned __int64 toUID;

	/// 송신자 닉네임
	const wchar_t* toNickname;

	/// 수신 데이터 배열
	const unsigned char* binarydata;

	/// 수신 데이터 배열 크기
	int dataLength;						

	/// 바이너리외 송신할 데이터(json string, profile등을 상대방에게 보낼 수 있습니다)
	const wchar_t* meta;
};

/*! \ingroup callback
*  \struct StovePCMatchmakingRecvLobbyMessage
*  \brief 로비 내 유저로부터 수신된 메시지 응답값입니다.
*/
struct StovePCMatchmakingRecvLobbyMessage
{	
	/// 로비 이름
	const wchar_t* lobby;

	/// 송신자 아이디
	unsigned __int64 fromUID;

	/// 송신자 닉네임
	const wchar_t* fromNickname;

	/// 수신 메시지
	const wchar_t* message;

	/// 메시지외 송신할 데이터(json string, profile등을 상대방에게 보낼 수 있습니다)
	const wchar_t* meta;
};

/*! \ingroup callback
*  \struct StovePCMatchmakingSendLobbyMessage
*  \brief 로비 내 유저에게 송신한 메시지 응답값입니다.
*/
struct StovePCMatchmakingSendLobbyMessage
{
	/// 로비 이름
	const wchar_t* lobby;

	/// 송신자 아이디
	unsigned __int64 toUID;

	/// 송신자 닉네임
	const wchar_t* toNickname;

	/// 수신 메시지
	const wchar_t* message;

	/// 메시지외 송신할 데이터(json string, profile등을 상대방에게 보낼 수 있습니다)
	const wchar_t* meta;
};

/*! \ingroup callback
*  \struct StovePCMatchmakingRequestLobbyList
*  \brief 로비 검색에 대한 응답값입니다.
*/
struct StovePCMatchmakingRequestLobbyList
{	
	/// 검색결과 페이지 offset 위치
	__int64 pageOffset;					

	/// 검색결과 페이지 개수
	int pageCount;						

	/// 로비 데이터 구조체 배열 포인터 (ex. StovePCMatchmakingLobby [] array)
	const StovePCMatchmakingLobby* lobbysArray;

	/// 로비 데이터 구조체 배열 개수
	int lobbysArrayCount;				
};

/*! \ingroup callback
*  \struct StovePCMatchmakingGetLobbyUserList
*  \brief 로비 참여자 목록입니다.
*/
struct StovePCMatchmakingGetLobbyUserList
{
	/// 로비 이름
	const wchar_t* lobby;

	/// 로비 유저들의 메타 데이터 배열 포인터 (ex. StovePCMatchmakingLobbyUserData [] array)
	const StovePCMatchmakingLobbyUser* usersArray;

	/// 유저들 데이터 배열 개수
	int usersCount;						
};

/*! \ingroup callback
*  \struct StovePCMatchmakingGetBanUserList
*  \brief 로비 Ban 유저 목록입니다.
*/
struct StovePCMatchmakingGetBanUserList
{
	/// 로비 이름
	const wchar_t* lobby;

	/// 로비 유저들의 메타 데이터 배열 포인터 (ex. StovePCMatchmakingLobbyUserData [] array)
	const StovePCMatchmakingLobbyUser* usersArray;

	/// 유저들 데이터 배열 개수
	int usersCount;						
};

/*! \ingroup callback
*  \struct StovePCMatchmakingGetMyLobbyList
*  \brief 내 로비 정보요청 응답값입니다.
*/
struct StovePCMatchmakingGetMyLobbyList
{
	/// 나의 참여 로비 목록(구조체 배열)
	const StovePCMatchmakingLobbyInfo*  myLobbyIdList;

	/// 로비 목록수
	int myLobbyIdCount;				
};

/*! \ingroup callback
*  \struct StovePCMatchmakingSendLobbyInvitation
*  \brief 내가 다른 유저를 로비에 초대시 콜백입니다.
*/
struct StovePCMatchmakingSendLobbyInvitation
{
	/// 로비 이름
	const wchar_t* lobby;

	/// 로비 패스워드 (비공개 로비일 경우)
	const wchar_t* password;

	/// 초대할 유저 아이디
	unsigned __int64 toUID;

	/// 초대할 유저 닉네임
	const wchar_t* toNickname;

	/// 초대 메시지
	const wchar_t* message;
};

/*! \ingroup callback
*  \struct StovePCMatchmakingRecvLobbyInvitation
*  \brief 다른 유저로부터 로비 초대를 받을시 콜백입니다.
*/
struct StovePCMatchmakingRecvLobbyInvitation
{
	/// 로비 이름
	const wchar_t* lobby;

	/// 로비 패스워드 (비공개 로비일 경우)
	const wchar_t* password;

	/// 초대한 유저 맴번 번호
	unsigned __int64 fromUID;

	/// 초대한 유저 닉네임
	const wchar_t* fromNickname;

	/// 초대 메시지
	const wchar_t* message;
};

/*! \ingroup callback
*  \struct StovePCMatchmakingSendRejectLobbyInvitation
*  \brief 로비 초대를 거절합니다.
*/
struct StovePCMatchmakingSendRejectLobbyInvitation
{	
	/// 로비 이름
	const wchar_t* lobby;

	/// 초대 거절할 유저 아이디
	unsigned __int64 toUID;

	/// 초대 거절할 유저 닉네임
	const wchar_t* toNickname;
};

/*! \ingroup callback
*  \struct StovePCMatchmakingRecvRejectLobbyInvitation
*  \brief 로비 초대를 거절합니다.
*/
struct StovePCMatchmakingRecvRejectLobbyInvitation
{
	/// 로비 이름
	const wchar_t* lobby;

	/// 초대 거절한 유저 아이디
	unsigned __int64 fromUID;

	/// 초대 거절한 유저 닉네임
	const wchar_t* fromNickname;
};

/*! \ingroup callback
*  \struct StovePCMatchmakingKickUser
*  \brief 현재 로비에서 특정 유저를 추방합니다. 권한이 있는 사용자만이 할 수 있습니다.
*/
struct StovePCMatchmakingKickUser
{
	/// 로비 이름
	const wchar_t* lobby;

	/// 추방한 유저 아이디
	unsigned __int64 toUID;

	/// 추방한 유저 닉네임
	const wchar_t* toNickname;
};

/*! \ingroup callback
*  \struct StovePCMatchmakingBanUser
*  \brief 현재 로비에서 특정 유저를 추방하며, 이휴 로비 접속을 제한 합니다. 권한이 있는 사용자만이 할 수 있습니다.
*/
struct StovePCMatchmakingBanUser
{
	/// 로비 이름
	const wchar_t* lobby;

	/// ban한 유저 아이디
	unsigned __int64 toUID;						

	/// ban한 유저 닉네임
	const wchar_t* toNickname;
};

/*! \ingroup callback
*  \struct StovePCMatchmakingUnBanUser
*  \brief 로비에서 추방한 유저를 로비 접속 제한에서 해제합니다. 권한이 있는 사용자만이 할 수 있습니다.
*/
struct StovePCMatchmakingUnBanUser
{
	/// 로비 이름
	const wchar_t* lobby;

	/// unban한 유저 아이디
	unsigned __int64 toUID;						

	/// unban한 유저 닉네임
	const wchar_t* toNickname;
};


/*! \ingroup callback
*  \struct StovePCMatchmakingSetLobbyOwner
*  \brief 로비 내 유저에게 방장을 이양합니다.
*/
struct StovePCMatchmakingSetLobbyOwner
{
	/// 로비 이름
	const wchar_t* lobby;

	/// owner를 받을 유저 아이디
	unsigned __int64 toUID;						

	/// owner를 받을 유저 닉네임
	const wchar_t* toNickname;
};

/*! \ingroup callback
*  \struct StovePCMatchmakingSetLobbyData
*  \brief 로비 메타 데이터 추가/변경에 대한 응답값입니다.
*/
struct StovePCMatchmakingSetLobbyData
{
	/// 로비 이름
	const wchar_t* lobby;

	/// 로비 메타 데이터 키
	const wchar_t* key;

	/// 로비 메타 데이터 값 
	const wchar_t* value;
};

/*! \ingroup callback
*  \struct StovePCMatchmakingGetLobbyData
*  \brief 로비 메타 데이터를 확인한 응답 값입니다.
*/
struct StovePCMatchmakingGetLobbyData
{	
	/// 로비 이름
	const wchar_t* lobby;

	/// 로비 데이터 배열 포인터 (ex. StovePCMatchmakingMetadata [] array)
	const StovePCMatchmakingMetadata* lobbyDataArray;

	/// 로비 데이터 배열 개수
	int lobbyDataCount;					
};

/*! \ingroup callback
*  \struct StovePCMatchmakingSetLobbyUserdata
*  \brief 로비 내 내 데이터 변경에 대한 응답값입니다.
*/
struct StovePCMatchmakingSetLobbyUserdata
{
	/// 로비 이름
	const wchar_t* lobby;

	/// 로비 내 유저 데이터 키
	const wchar_t* key;

	/// 로비 내 유저 데이터 값
	const wchar_t* value;
};

/*! \ingroup callback
*  \struct StovePCMatchmakingStartGame
*  \brief 매치메이킹 서버에 로비 게임 시작을 알린후 응답값입니다.
*/
struct StovePCMatchmakingStartGame
{
	/// 로비 이름
	const wchar_t* lobby;

	/// 서버 아이피
	const wchar_t* serverIP;

	/// 서버 아이피
	int serverPort;						
};

/*! \ingroup callback
*  \struct StovePCMatchmakingEndGame
*  \brief 매치메이킹 서버에 로비 게임 종료를 알린후 응답값입니다.
*/
struct StovePCMatchmakingEndGame
{
	/// 로비 이름
	const wchar_t* lobby;							

	/// 서버 아이피
	const wchar_t* serverIP;

	/// 서버 아이피
	int serverPort;						
};

/*! \ingroup callback
*  \struct StovePCMatchmakingGetMyFriendList
*  \brief 내 친구 정보에 대한 응답값입니다.
*/
struct StovePCMatchmakingGetMyFriendList
{
	/// 내 친구 배열 포인터 (ex. StovePCMatchmakingFriendInfo [] array)
	const StovePCMatchmakingFriendInfo* friendArray;

	/// 내 친구 배열 개수
	int friendCount;
};

/*! \ingroup callback
*  \struct StoveUserStatusChanged
*  \brief 유저의 프리젠스 상태 알림을 받습니다.
*/
struct StovePCMatchmakingUserStatusChanged
{
	/// 친구 아이디
	unsigned __int64 UID;

	/// 친구 닉네임
	const wchar_t* nickname;

	/// 친구 프리젠스 상태
	StovePCMatchmakingUserStatus status;
};

#pragma pack(pop)

/*! \ingroup callback
*  \struct StovePCMatchmakingCallback
*  \brief API 호출시 응답받는 콜백을 설정하는 구조체입니다.
*/
struct StovePCMatchmakingCallback
{
	/// StovePCMatchmaking_Connect 호출시 응답받는 콜백 함수 포인터
	void(*OnConnect)(const StovePCMatchmakingError error);

	/// StovePCMatchmaking_Disconnect 호출하거나 채팅 서버에서 접속 종료시 응답받는 콜백 함수 포인터
	void(*OnDisconnect)(const StovePCMatchmakingError error, const StovePCMatchmakingDisconnectCode code);

	/// StovePCMatchmaking_CreateLobby 호출시 응답받는 콜백 함수 포인터
	void(*OnCreateLobby)(const StovePCMatchmakingError error, const StovePCMatchmakingCreateLobby createLobby);

	/// StovePCMatchmaking_DestroyLobby 호출시 응답받는 콜백 함수 포인터
	void(*OnDestroyLobby)(const StovePCMatchmakingError error, const StovePCMatchmakingDestroyLobby destroyLobby);

	/// StovePCMatchmaking_JoinLobby 호출시 응답받는 콜백 함수 포인터
	void(*OnJoinLobby)(const StovePCMatchmakingError error, const StovePCMatchmakingJoinLobby joinLobby);

	/// 다른 유저가 로비에 입장시 응답받는 콜백 함수 포인터
	void(*OnUserJoin)(const StovePCMatchmakingError error, const StovePCMatchmakingUserJoin userJoin);

	/// 로비에 유저 정보가 업데이트시 응답받는 콜백 함수 포인터
	void(*OnUpdateLobbyUser)(const StovePCMatchmakingError error, const StovePCMatchmakingUpdateLobbyUser updateLobbyUser);

	/// 로비 메타 데이터 업데이트시 응답받는 콜백 함수 포인터
	void(*OnUpdateLobbyData)(const StovePCMatchmakingError error, const StovePCMatchmakingUpdateLobbyData updateLobbyData);

	/// StovePCMatchmaking_LeaveLobby 호출시 응답받는 콜백 함수 포인터
	void(*OnLeaveLobby)(const StovePCMatchmakingError error, const StovePCMatchmakingLeaveLobby leaveLobby);

	/// 로비에서 다른 유저가 퇴장시 응답받는 콜백 함수 포인터
	void(*OnUserLeave)(const StovePCMatchmakingError error, const StovePCMatchmakingUserLeave userLeave);

	/// StovePCMatchmaking_SendLobbyMsg 호출시 응답받는 콜백 함수 포인터
	void(*OnSendLobbyMessage)(const StovePCMatchmakingError error, const StovePCMatchmakingSendLobbyMessage channelMessage);

	/// 다른 유저가 StovePCMatchmaking_SendLobbyMsg로 로비에 채팅 메시지를 보낼 시 응답받는 콜백 함수 포인터
	void(*OnRecvLobbyMessage)(const StovePCMatchmakingError error, const StovePCMatchmakingRecvLobbyMessage channelMessage);

	/// StovePCMatchmaking_SendLobbyBinarydata 호출시 응답받는 콜백 함수 포인터
	void(*OnSendLobbyBinarydata)(const StovePCMatchmakingError error, const StovePCMatchmakingSendLobbyBinarydata channelMessage);

	/// 다른 유저가 StovePCMatchmaking_SendLobbyBinarydata로 로비에 데이터 보낼 시 응답받는 콜백 함수 포인터
	void(*OnRecvLobbyBinarydata)(const StovePCMatchmakingError error, const StovePCMatchmakingRecvLobbyBinarydata channelMessage);

	/// StovePCMatchmaking_SendLobbyInvitation 호출시 응답받는 콜백 함수 포인터
	void(*OnSendLobbyInvitation)(const StovePCMatchmakingError error, const StovePCMatchmakingSendLobbyInvitation channelInvitation);

	/// 다른 유저가 나에게 StovePCMatchmaking_SendLobbyInvitation로 로비에 초대할 시 응답받는 콜백 함수 포인터
	void(*OnRecvLobbyInvitation)(const StovePCMatchmakingError error, const StovePCMatchmakingRecvLobbyInvitation channelInvitation);

	/// StovePCMatchmaking_SendRejectLobbyInvitation 호출시 응답받는 콜백 함수 포인터
	void(*OnSendRejectLobbyInvitation)(const StovePCMatchmakingError error, const StovePCMatchmakingSendRejectLobbyInvitation rejectLobbyInvitation);

	/// 다른 유저가 나에게 StovePCMatchmaking_SendRejectLobbyInvitation로 로비 초대에 거절할 시 응답받는 콜백 함수 포인터
	void(*OnRecvRejectLobbyInvitation)(const StovePCMatchmakingError error, const StovePCMatchmakingRecvRejectLobbyInvitation rejectLobbyInvitation);

	/// StovePCMatchmaking_RequestLobbyList 호출시 응답받는 콜백 함수 포인터
	void(*OnRequestLobbyList)(const StovePCMatchmakingError error, const StovePCMatchmakingRequestLobbyList requestLobbyList);

	/// StovePCMatchmaking_GetLobbyUserList 호출시 응답받는 콜백 함수 포인터
	void(*OnGetLobbyUserList)(const StovePCMatchmakingError error, const StovePCMatchmakingGetLobbyUserList userList);

	/// StovePCMatchmaking_GetBanUserList 호출시 응답받는 콜백 함수 포인터
	void(*OnGetBanUserList)(const StovePCMatchmakingError error, const StovePCMatchmakingGetBanUserList userList);

	/// StovePCMatchmaking_GetMyLobbyList 호출시 응답받는 콜백 함수 포인터
	void(*OnGetMyLobbyList)(const StovePCMatchmakingError error, const StovePCMatchmakingGetMyLobbyList channelList);

	/// StovePCMatchmaking_KickUser 호출시 응답받는 콜백 함수 포인터
	void(*OnKickUser)(const StovePCMatchmakingError error, const StovePCMatchmakingKickUser kickUser);

	/// StovePCMatchmaking_BanUser 호출시 응답받는 콜백 함수 포인터
	void(*OnBanUser)(const StovePCMatchmakingError error, const StovePCMatchmakingBanUser banUser);

	/// StovePCMatchmaking_UnBanUser 호출시 응답받는 콜백 함수 포인터
	void(*OnUnBanUser)(const StovePCMatchmakingError error, const StovePCMatchmakingUnBanUser unBanUser);

	/// StovePCMatchmaking_SetLobbyOwner 호출시 응답받는 콜백 함수 포인터
	void(*OnSetLobbyOwner)(const StovePCMatchmakingError error, const StovePCMatchmakingSetLobbyOwner setLobbyOwner);

	/// StovePCMatchmaking_SetLobbyData 호출시 응답받는 콜백 함수 포인터
	void(*OnSetLobbyData)(const StovePCMatchmakingError error, const StovePCMatchmakingSetLobbyData setLobbyData);

	/// StovePCMatchmaking_GetLobbyData 호출시 응답받는 콜백 함수 포인터
	void(*OnGetLobbyData)(const StovePCMatchmakingError error, const StovePCMatchmakingGetLobbyData getLobbyData);

	/// StovePCMatchmaking_SetLobbyUserdata 호출시 응답받는 콜백 함수 포인터
	void(*OnSetLobbyUserdata)(const StovePCMatchmakingError error, const StovePCMatchmakingSetLobbyUserdata setLobbyUserdata);

	/// StovePCMatchmaking_StartGame 호출시 응답받는 콜백 함수 포인터
	void(*OnStartGame)(const StovePCMatchmakingError error, const StovePCMatchmakingStartGame startGame);

	/// StovePCMatchmaking_EndGame 호출시 응답받는 콜백 함수 포인터
	void(*OnEndGame)(const StovePCMatchmakingError error, const StovePCMatchmakingEndGame endGame);

	/// StovePCMatchmaking_GetMyFriendList 호출시 응답받는 콜백 함수 포인터
	void(*OnGetMyFriendList)(const StovePCMatchmakingError error, const StovePCMatchmakingGetMyFriendList myfriends);

	/// 유저 프리젠스 변경시 응답받는 콜백 함수 포인터
	void(*OnUserStatusChanged)(const StovePCMatchmakingError error, const StovePCMatchmakingUserStatusChanged status);
};

#endif //MATCHMAKING_CALLBACK_C_H_