GameAnvilConnector는 GameAnvil 서버와의 연결을 관리하는 작업을 담당합니다. 연결(Connect()), 인증(Authentication()) 등 기본 세션 관리 기능 및 채널 목록 등을 제공합니다.
Connect() 를 호출하여 서버에 연결합니다.
public async void Connect()
{
try
{
// connector 는 GameAnvilConnector 인스턴스를 저장한 변수입니다.
await connector.Connect(host, port);
// 성공
}
catch (Exception e)
{
// 실패
}
}
Connect()은 다음과 같은 2개의 매개변수를 가지고 있습니다.
타입 | 이름 | 설명 |
---|---|---|
String | host | 연결할 서버의 ip 혹은 주소 |
int | port | 연결할 서버의 port |
별도의 리턴값은 없고 성공할 경우 다음 코드를 실행하게 되며, 실패할 경우 예외가 발생하게 됩니다.
서버에 연결한 후 Authentication() 를 호출하여 인증 절차를 진행합니다. Authentication() 메소드를 호출하면 서버에서는 Connection 객체의 onAuthenticate() 콜백이 호출되며, 이 콜백의 처리 결과로 인증의 성공, 실패가 결정됩니다.
public async void Authenticate()
{
try
{
Payload authenticationPayload = new Payload(new Protocol.AuthenticationData());
ErrorResult<ResultCodeAuth, AuthenticationResult> result = await connector.Authentication("DeviceId", "AccountId", "Password", authenticationPayload);
if(result.ErrorCode == ResultCodeAuth.AUTH_SUCCESS)
{
// 성공
} else
{
// 실패
}
}
catch (Exception e)
{
// 예외
}
}
Authentication()은 다음과 같은 4개의 매개변수를 가지고 있습니다.
타입 | 이름 | 설명 |
---|---|---|
String | deviceId | 인증에 사용할 기기 아이디. 서로 다른 기기에서 인증 요청을 할 경우, 이 값을 이용하여 기기에서 요청한 것입음 알 수 있습니다. 사용하지 않을 경우 string.Empty(빈 문자열) 입력 |
String | accountId | 인증에 사용할 계정 명. |
String | password | 인증에 사용할 비밀번호. 사용하지 않는 경우 string.Empty(빈 문자열) 입력 |
Payload | payload | 인증 요청을 처리할 서버의 사용자 코드에서 필요한 추가 정보. (default = null) |
응답으로 ErrorResult
ResultCodeAuth의 상세 내용은 다음과 같습니다.
이름 | 값 | 설명 |
---|---|---|
PARSE_ERROR | -2 | 패킷 파싱 에러. 서버와 클라이언트의 버전이 다를 경우 발생할 수 있음. |
TIMEOUT | -1 | 타임 아웃. 요청에 대한 응답이 정해진 시간내에 오지 않음. |
SYSTEM_ERROR | 1 | 서버 시스템 에러. 서버의 알수 없는 오류로 실패 |
INVALID_PROTOCOL | 2 | 서버에 등록되지 않은 프로토콜. 추가정보에 등록되지 않은 프로토콜이 사용됨. |
AUTH_SUCCESS | 0 | 성공 |
AUTH_FAIL_CONTENT | 201 | 실패. 사용자 코드에서 거부됨 |
AUTH_FAIL_INVALID_ACCOUNT_ID | 602 | 실패. 잘못된 계정 아이디 |
AuthenticationResult의 상세 내용은 다음과 같습니다.
타입 | 이름 | 설명 |
---|---|---|
List |
LoginUserInfoList | 인증 성공 시점에 서버에 남아있는 로그인된 유저정보 목록 |
String | Message | 인증 메시지 |
Payload | payload | 클라이언트에서 필요한 추가 정보 |
연결 또는 인증시 필요한 값을 GameAnvilConnector의 속성으로 저장하여 사용할 수도 있습니다.
public void initializeConnector()
{
connector.Host = "127.0.0.1";
connector.Port = 18200;
connector.DeviceId = "DeviceId";
connector.AccountId = "AccountId";
connector.Password = "Password";
}
public async void ConnectAndAuthentication1()
{
try
{
Payload authenticationPayload = new Payload(new Protocol.AuthenticationData());
var (resultCode, result) = await connector.ConnectAndAuthentication(authenticationPayload);
if (resultCode == ResultCodeAuth.AUTH_SUCCESS)
{
// 성공
} else
{
// 실패
}
} catch (Exception e)
{
// 예외
}
}
public async void ConnectAndAuthentication2()
{
try
{
Payload authenticationPayload = new Payload(new Protocol.AuthenticationData());
await connector.Connect();
var (resultCode, result) = await connector.Authentication(authenticationPayload);
if (resultCode == ResultCodeAuth.AUTH_SUCCESS)
{
// 성공
} else
{
// 실패
}
} catch (Exception e)
{
// 예외
}
}
GameAnvil 서버에 보안 설정을 하였을때는 ConnectSecure() 을 호출하여 보안 연결을 해야합니다.
public async void ConnectSecure()
{
try
{
await connector.ConnectSecure(host, port);
// 성공
}
catch (Exception e)
{
// 실패
}
}
ConnectSecure()은 다음과 같은 2개의 매개변수를 가지고 있습니다.
타입 | 이름 | 설명 |
---|---|---|
String | host | 연결할 서버의 ip 혹은 주소 |
int | port | 연결할 서버의 port |
별도의 리턴값은 없고 성공할 경우 다음 코드를 실행하게 되며, 실패할 경우 예외가 발생하게 됩니다.
GameAnvil은 설정에서 자유롭게 채널을 구성할 수 있습니다. 이런 채널 구성은 서버와 클라이언트 간에 미리 약속하여 고정된 형태로 사용할 수도 있지만, 상황에 따라 다양하게 변경하여 사용할 수도 있습니다. GameAnvilConnector에서는 이렇게 변경된 채널 정보를 얻어올 수 있도록 몇 가지 메소드를 제공합니다.
이름 | 설명 |
---|---|
GetChannelList() | 특정 서비스의 채널 아이디 목록 요청 |
GetChannelCountInfo() | 특정 채널의 카운트 정보(유저와 방 개수) 요청 |
GetChannelInfo() | 특정 채널의 정보(사용자 정의) 요청 |
GetAllChannelCountInfo() | 특정 서비스의 모든 채널에 대한 카운트 정보(유저와 방 개수) 요청 |
GetAllChannelInfo() | 특정 서비스의 모든 채널에 대한 정보(사용자 정의) 요청 |
GetChannelList()는 특정 서비스의 채널 아이디 목록을 요청하여 받아올 수 있습니다.
public async void ChannelList()
{
try
{
Payload channelInfoPayload = new Payload(new Protocol.ChannelInfoData());
ErrorResult<ResultCodeChannelList, List<string>> result = await connector.GetChannelList("ServiceName");
if (result.ErrorCode == ResultCodeChannelList.CHANNEL_LIST_SUCCESS)
{
// 성공
} else
{
// 실패
}
} catch (Exception e)
{
// 예외
}
}
GetChannelList()은 다음과 같은 1개의 매개변수를 가지고 있습니다.
타입 | 이름 | 설명 |
---|---|---|
String | ServiceName | 채널 정보를 요청할 서비스 |
응답으로 ErrorResult
ResultCodeChannelList의 상세 내용은 다음과 같습니다.
이름 | 값 | 설명 |
---|---|---|
PARSE_ERROR | -2 | 패킷 파싱 에러. 서버와 클라이언트의 버전이 다를 경우 발생할 수 있음. |
TIMEOUT | -1 | 타임 아웃. 요청에 대한 응답이 정해진 시간내에 오지 않음. |
SYSTEM_ERROR | 1 | 서버 시스템 에러. 서버의 알수 없는 오류로 실패 |
INVALID_PROTOCOL | 2 | 서버에 등록되지 않은 프로토콜. 추가정보에 등록되지 않은 프로토콜이 사용됨. |
CHANNEL_LIST_SUCCESS | 0 | 성공 |
CHANNEL_LIST_FAIL_NO_CHANNEL_LIST | 1801 | 실패. 채널 목록을 찾을 수 없음 |
GetChannelCountInfo()는 특정 채널의 카운트 정보(유저와 방 개수)를 요청하여 받아올 수 있습니다.
public async void ChannelCountInfo()
{
try
{
ErrorResult<ResultCodeChannelCountInfo, ChannelCountResult> result = await connector.GetChannelCountInfo("ServiceName", "ChannelId");
if (result.ErrorCode == ResultCodeChannelCountInfo.CHANNEL_COUNT_INFO_SUCCESS)
{
// 성공
} else
{
// 실패
}
} catch (Exception e)
{
// 예외
}
}
GetChannelCountInfo()은 다음과 같은 2개의 매개변수를 가지고 있습니다.
타입 | 이름 | 설명 |
---|---|---|
String | ServiceName | 채널 정보를 요청할 서비스 |
String | channelId | 채널 정보를 요청할 채널의 아이디 |
응답으로 ErrorResult
ResultCodeChannelCountInfo의 상세 내용은 다음과 같습니다.
이름 | 값 | 설명 |
---|---|---|
PARSE_ERROR | -2 | 패킷 파싱 에러. 서버와 클라이언트의 버전이 다를 경우 발생할 수 있음. |
TIMEOUT | -1 | 타임 아웃. 요청에 대한 응답이 정해진 시간내에 오지 않음. |
SYSTEM_ERROR | 1 | 서버 시스템 에러. 서버의 알수 없는 오류로 실패 |
INVALID_PROTOCOL | 2 | 서버에 등록되지 않은 프로토콜. 추가정보에 등록되지 않은 프로토콜이 사용됨. |
CHANNEL_COUNT_INFO_SUCCESS | 0 | 성공 |
CHANNEL_COUNT_INFO_FAIL_NO_CHANNEL_INFO | 1921 | 실패. 채널 정보를 찾을 수 없음 |
CHANNEL_COUNT_INFO_FAIL_INVALID_SERVICE_ID | 1922 | 실패. 잘못된 서비스 아이디 |
CHANNEL_COUNT_INFO_FAIL_INVALID_CHANNEL_ID | 1923 | 실패. 잘못된 채널 아이디 |
CHANNEL_COUNT_INFO_FAIL_CHANNEL_NOT_FOUND | 1924 | 실패. 채널을 찾을 수 없음 |
ChannelCountResult 의 상세 내용은 다음과 같습니다.
타입 | 이름 | 설명 |
---|---|---|
string | ChannelId | 채널 아이디 반환. |
int | UserCount | 채널의 유저 수 반환. |
int | RoomCount | 채널의 방 수 반환. |
GetChannelInfo()는 특정 채널의 정보(사용자 정의)를 요청하여 받아올 수 있습니다.
public async void ChannelInfo()
{
try
{
ErrorResult<ResultCodeChannelInfo, Payload> result = await connector.GetChannelInfo("ServiceName", "ChannenId");
if (result.ErrorCode == ResultCodeChannelInfo.CHANNEL_INFO_SUCCESS)
{
// 성공
} else
{
// 실패
}
} catch (Exception e)
{
// 예외
}
}
GetChannelInfo()은 다음과 같은 2개의 매개변수를 가지고 있습니다.
타입 | 이름 | 설명 |
---|---|---|
String | ServiceName | 채널 정보를 요청할 서비스 |
String | channelId | 채널 정보를 요청할 채널의 아이디 |
응답으로 ErrorResult
ResultCodeChannelInfo 상세 내용은 다음과 같습니다.
이름 | 값 | 설명 |
---|---|---|
PARSE_ERROR | -2 | 패킷 파싱 에러. 서버와 클라이언트의 버전이 다를 경우 발생할 수 있음. |
TIMEOUT | -1 | 타임 아웃. 요청에 대한 응답이 정해진 시간내에 오지 않음. |
SYSTEM_ERROR | 1 | 서버 시스템 에러. 서버의 알수 없는 오류로 실패 |
INVALID_PROTOCOL | 2 | 서버에 등록되지 않은 프로토콜. 추가정보에 등록되지 않은 프로토콜이 사용됨. |
CHANNEL_INFO_SUCCESS | 0 | 성공 |
CHANNEL_INFO_FAIL_NO_CHANNEL_INFO | 1921 | 실패. 채널 정보를 찾을 수 없음 |
CHANNEL_INFO_FAIL_INVALID_SERVICE_ID | 1922 | 실패. 잘못된 서비스 아이디 |
CHANNEL_INFO_FAIL_INVALID_CHANNEL_ID | 1923 | 실패. 잘못된 채널 아이디 |
CHANNEL_INFO_FAIL_CHANNEL_NOT_FOUND | 1924 | 실패. 채널을 찾을 수 없음 |
GetAllChannelCountInfo()는 특정 서비스의 모든 채널에 대한 카운트 정보(유저와 방 개수)를 요청하여 받아올 수 있습니다.
public async void AllChannelCountInfo()
{
try
{
ErrorResult<ResultCodeAllChannelCountInfo, Dictionary<string, ChannelCountResult>> result = await connector.GetAllChannelCountInfo("ServiceName");
if (result.ErrorCode == ResultCodeAllChannelCountInfo.ALL_CHANNEL_COUNT_INFO_SUCCESS)
{
// 성공
} else
{
// 실패
}
} catch (Exception e)
{
// 예외
}
}
GetAllChannelCountInfo()은 다음과 같은 1개의 매개변수를 가지고 있습니다.
타입 | 이름 | 설명 |
---|---|---|
String | ServiceName | 채널 정보를 요청할 서비스 |
응답으로 ErrorResult
ResultCodeAllChannelCountInfo의 상세 내용은 다음과 같습니다.
이름 | 값 | 설명 |
---|---|---|
PARSE_ERROR | -2 | 패킷 파싱 에러. 서버와 클라이언트의 버전이 다를 경우 발생할 수 있음. |
TIMEOUT | -1 | 타임 아웃. 요청에 대한 응답이 정해진 시간내에 오지 않음. |
SYSTEM_ERROR | 1 | 서버 시스템 에러. 서버의 알수 없는 오류로 실패 |
INVALID_PROTOCOL | 2 | 서버에 등록되지 않은 프로토콜. 추가정보에 등록되지 않은 프로토콜이 사용됨. |
ALL_CHANNEL_COUNT_INFO_SUCCESS | 0 | 성공 |
ALL_CHANNEL_COUNT_INFO_FAIL_NO_CHANNEL_INFO | 1931 | 실패. 채널 정보를 찾을 수 없음 |
ALL_CHANNEL_COUNT_INFO_FAIL_INVALID_SERVICE_ID | 1932 | 실패. 잘못된 서비스 아이디 |
ALL_CHANNEL_COUNT_INFO_FAIL_CHANNEL_NOT_FOUND | 1933 | 실패. 채널을 찾을 수 없음 |
GetAllChannelInfo()는 특정 서비스의 모든 채널에 대한 정보(사용자 정의)를 요청하여 받아올 수 있습니다.
public async void AllChannelInfo()
{
try
{
ErrorResult<ResultCodeAllChannelInfo, ChannelInfoResult> result = await connector.GetAllChannelInfo("ServiceName");
if (result.ErrorCode == ResultCodeAllChannelInfo.ALL_CHANNEL_INFO_SUCCESS)
{
// 성공
} else
{
// 실패
}
} catch (Exception e)
{
// 예외
}
}
GetAllChannelInfo()은 다음과 같은 1개의 매개변수를 가지고 있습니다.
타입 | 이름 | 설명 |
---|---|---|
String | ServiceName | 채널 정보를 요청할 서비스 |
응답으로 ErrorResult
ResultCodeAllChannelInfo의 상세 내용은 다음과 같습니다.
이름 | 값 | 설명 |
---|---|---|
PARSE_ERROR | -2 | 패킷 파싱 에러. 서버와 클라이언트의 버전이 다를 경우 발생할 수 있음. |
TIMEOUT | -1 | 타임 아웃. 요청에 대한 응답이 정해진 시간내에 오지 않음. |
SYSTEM_ERROR | 1 | 서버 시스템 에러. 서버의 알수 없는 오류로 실패 |
INVALID_PROTOCOL | 2 | 서버에 등록되지 않은 프로토콜. 추가정보에 등록되지 않은 프로토콜이 사용됨. |
ALL_CHANNEL_INFO_SUCCESS | 0 | 성공 |
ALL_CHANNEL_INFO_FAIL_NO_CHANNEL_INFO | 1911 | 실패. 채널 정보를 찾을 수 없음 |
ALL_CHANNEL_INFO_FAIL_INVALID_SERVICE_ID | 1912 | 실패. 잘못된 서비스 아이디 |
ALL_CHANNEL_INFO_FAIL_CHANNEL_NOT_FOUND | 1913 | 실패. 채널을 찾을 수 없음 |
ChannelInfoResult의 channelInfo 필드는 채널 아이디를 키로, 사용자 정의 채널 정보를 담은 Payload를 값으로 가지는 Dictionary
Disconnect() 메소드를 이용해 서버와의 연결을 종료합니다.
public async void Disconnect()
{
try
{
await connector.Disconnect();
// 성공
} catch (Exception e)
{
// 실패
}
}
별도의 리턴값은 없고 성공할 경우 다음 코드를 실행하게 되며, 실패할 경우 예외가 발생하게 됩니다.
Disconnect() 를 호출하지 않더라도 서버에서 강제로 연결을 종료하거나, 네트워크에 문제가 생기면 연결이 끊어질 수 있으며, 이에 대한 알림을 받을 수 있습니다.
private void addOnDisconnect()
{
connector.OnDisconnect += (ResultCodeDisconnect resultCode, Payload payload)=>{
// 연결 끊김 알림
};
}
ResultCodeDisconnect 매개변수를 통해 연결이 끊어진 원인에 대한 정보를 얻을 수 있으며, 서버에서 강제 종료를 한 경우 서버의 구현에 따라서 추가정보를 얻을 수도 있습니다.