iFun Engine Changelog¶
Important
Ubuntu 리눅스의 16.04(Xenial Xerus) 버전에 대한 공식 지원이 2021년 4월 30일부로 종료되었으며, 해당 리눅스 배포판에 대한 아이펀 엔진도 1.0.0-5959 Stable 버전을 마지막으로 더 이상 배포되지 않습니다.
계속해서 업데이트된 아이펀 엔진을 사용하기 희망하는 고객께서는 Ubuntu 18.04 이상 또는 CentOS Linux 7/8 그리고, 아이펀 엔진 윈도우 버전을 사용해 주시기 바랍니다.
v1.0.0-6051 (2021-08-04)¶
2021-08-04 10:10:45
- Distribution¶
네트워크 장애 등의 상황에서 작동하지 않는 RPC 연결을 끊는 기능이 추가 됐습니다.
MANIFEST/RpcService 분류에
rpc_check_connection
를true
값으로 추가하여 기능을 활성화 할 수 있습니다.소켓에서 인지할 수 없는 네트워크 장애가 60초 이상 지속될 시, 연결을 끊고 재연결 단계로 넘어가기 위한 기능으로 사용할 수 있습니다.
- Object¶
kReadCopyNoLock
으로 Fetch 할 때 드물게 Assert 로 크래시할 수 있는 문제를 수정했습니다.
- Service¶
Authentication 기능에서 외부 API 를 호출할 때의 응답시간에 대한 통계를 제공합니다.
API 서비스 포트의
/v1/stats/external_request/authentication
경로에서 조회할 수 있습니다.
v1.0.0-6012 (2021-07-07)¶
2021-07-07 13:57:14
Warning
Breaking Changes
서버 이동 기능을 사용하면서 Session 이 닫힐 때, SessionCloseReason
을 통해서 구별할 수 있도록 kClosedForRedirection
이 추가됐습니다.
세션 닫힘 핸들러에서
SessionCloseReason
을 구분하는 코드가 있다면kClosedForRedirection
을 반영해야 합니다.
ORM 오브젝트 데이터를 DB 에서 읽을 때 Read Uncommitted 격리 수준이 적용되지 않을 수 있는 문제를 수정했습니다.
ORM 이 사용하는 DB 스킴의 업데이트가 필요합니다.
업데이트 후 첫 기동 시에 DB Procedure 삭제 및 생성 권한이 필요합니다.
자세한 내용은 매뉴얼의 필요한 DB 권한 을 참고하시기 바랍니다.
- Database¶
Redis 객체에 Scan 인터페이스를 추가했습니다.
typedef std::vector<string> StrList; typedef boost::function<void (const Result &result, const StrList &values)> OnStrListReturned; Result Scan(const string &cursor, const string &pattern, StrList* values. const string &tag = ""); void ScanAsync(const string &cursor, const string &pattern, const OnStrListReturned &callback, const string &tag = "");
cursor: Redis Scan 명령의 cursor 인자값. Scan 명령은 한번에 모든 결과를 반환하지 않고 부하를 고려해서 명령 한번에 일부 결과만을 반환합니다. Key 순회 (Scan) 를 처음 시작할 때는 0 이어야 합니다. Scan 명령의 cursor 반환값이 0 이 아니라면 아직 순회할 Key 목록이 남아 있다는 의미로 반환받은 cursor 값을 사용해서 다음 Scan 명령에서 이어서 순회할 수 있습니다.
pattern: Key 이름을 필터링할 문자열 패턴입니다.
values: 리모트 Redis 서버가 반환한 Scan 명령의 결과 목록입니다.
tags: 아이펀 엔진에 설정한 Redis 인스턴스를 구분하기 위한 태그입니다.
- Object¶
ORM 오브젝트 데이터를 DB 에서 읽을 때 Read Uncommitted 격리 수준이 적용되지 않을 수 있는 문제를 수정했습니다.
기능상 문제는 없지만 경우에 따라 미미한 성능 저하가 발생할 수 있습니다.
업데이트 후 첫 기동 시에 DB Procedure 삭제 및 생성 권한이 필요합니다.
또는 MANIFEST/Object 의 export_db_schema 를
true
로 설정하고 서버를 실행한 후에 생성되는 SQL 파일을 사용해서 직접 업데이트를 진행해 주시기 바랍니다.자세한 내용은 매뉴얼의 필요한 DB 권한 을 참고하시기 바랍니다.
- Service¶
리더보드의 리셋 기능이 호스트의 시간 설정에 따라서 다른 시간에 리셋이 동작하는 점을 수정했습니다.
- misc.¶
funtest::Session 의 Session Close 핸들러의 Reason 이 항상
kClosedForServerDid
인 문제를 수정했습니다.funtest::Session 에서도 서버에 세션 닫기 요청을 하는
CloseRequest()
함수를 사용할 수 있습니다.이제, funtest::Session 이 Redirect 기능을 사용할 때도 세션 닫힘, 열림 핸들러가 불리도록 수정됐습니다.
세션 닫힘 핸들러에서는
kClosedForRedirection
Reason 으로 Redirect 에 의한 세션 닫힘인 것을 구분할 수 있으며, 세션 열림 핸들러에서는funtest::Session::IsRedirected()
로 구분할 수 있습니다.
funtest::Session 의 TCP/WebSocket Attached Handler 가 Session Opened Handler 다음에 불리도록 수정됐습니다.
v1.0.0-5959 (2021-06-02)¶
2021-06-02 12:00:00
Warning
Breaking Changes
이제, CentOS 에서도 C# 프로젝트를 사용할 수 있습니다.
아이펀 엔진이 의존하는 Mono 라이브러리 목록이 변경되어 구버전의 아이펀 엔진을 삭제하고, Mono 라이브러리 저장소를 설정한 다음 아이펀 엔진을 다시 설치해야 합니다.
자세한 내용은 매뉴얼 Mono 라이브러리 설치 파트를 참고하시기 바랍니다.
DedicatedServerRpc 기능에 새로운 설정이 추가됐습니다.
dedicated_server_rpc_tags_to_connect
: 데디케이티드 서버가 RPC 로 연결할 엔진 서버를 RPC 태그를 기준으로 설정합니다.
MulticastChannel 기능에 새로운 함수가 추가됐습니다.
GetGlobalMulticastChannels()
: 현재 모든 서버에서 생성된 멀티캐스트 채널 목록을 얻을 수 있습니다.
- Distribution¶
RPC 백엔드로 사용하는 Redis Server 의 시간이 과거로 변경됐을 때 서버가 재시작되지 않을 수 있는 문제를 수정했습니다.
이제 DedicatedServerRpc 기능 사용 시 데디케이티드 서버가 RPC 로 연결하는 대상이 모든 엔진 서버가 아니고, MANIFEST 파일의 설정을 따르도록 기본 동작이 변경됐습니다.
DedicatedServerRPC/dedicated_server_rpc_tags_to_connect
: RPC 태그를 기준으로 데디케이티드 서버가 연결할 엔진 서버 그룹을 설정합니다. 기본 동작은 데디케이티드 서버에서AddHost()
로 등록한 서버하고만 연결합니다.
Tip
서버의 Flavor 이름은 자동으로 Tag 로 등록되니 Flavor 이름을 사용해도 됩니다.
- Service¶
현재 전체 서버들에서 관리하는 멀티캐스트 채널 목록을 반환하는 API 를 추가했습니다.
void GetGlobalMulticastChannels(MulticastChannelInfoVector *out)
- Database¶
Mariadb::Finalize()
호출 시 메모리와 파일 지시자(File Descriptor) 자원이 해제되지 않을 수 있는 문제를 수정했습니다.
- Object¶
이벤트의 지연을 파악할 수 있는 함수가 추가됐습니다.
GetEventQueueDelay()
: 이 함수는 이벤트들이 이벤트 큐에서 대기한 시간의 평균값을 반환합니다.
- Utility¶
RandomGenerator::GenerateNumber()
함수에서 Arithmetic Exception 이 발생할 수 있는 문제를 수정했습니다.
- Time¶
호스트 OS 시간이 과거로 변경될 때 Timer 기능에 일시적 지연이 발생할 수 있는 문제를 수정했습니다.
- misc.¶
C# 프로젝트에서 디버그 빌드일 때만 로그를 출력하는 함수들들이 추가했습니다. C++ 의 DLOG*() 에 대응됩니다.
Log.DInfo(); Log.DWarning(); Log.DError(); Log.DFatal(); Log.DInfoOnceWhile(); Log.DWarningOnceWhile(); Log.DErrorOnceWhile(); Log.DInfoIf(); Log.DWarningIf(); Log.DErrorIf(); Log.DFataIf();
v1.0.0-5936 (2021-05-06)¶
2021-05-06 13:54:54
Warning
Breaking Changes
Curl 또는 HttpClient 기능의 인터페이스가 변경되었습니다. 해당 기능을 사용하시던 사용자께서는 프로젝트를 다시 빌드해 주시기 바랍니다.
- Network¶
Curl 과 HttpClient 객체의 내부 구현을 개선했습니다.
Curl 객체는 동시에 하나의 요청만 보낼 수 있도록 변경됐습니다.
MANIFEST 파일의
Curl/curl_threads_size
가 더이상 내부 동작에 영향을 주지 않습니다. 제거해 주시기 바랍니다.이제 중첩해서 HTTP 요청을 보낼 경우 앞선 요청의 응답을 기다리지 않고 즉시 요청을 보내게 됩니다.
HttpClient 객체의 인터페이스가 변경됐습니다.
위의 수정으로
HttpClient::GetPendingRequestCount()
함수가 더이상 필요없어져 삭제됐습니다.HttpClient 객체의 동기(Sync) 함수들에 타임아웃 값을 설정할 수 있는 인자를 추가했습니다.
HttpClient 객체의 동기(Sync) 함수가 실패한 경우 오류 메시지를 반환하는
HttpClient::error_message()
를 추가했습니다.HttpClient 객체에 비동기 함수의 콜백으로 에러 메시지를 함께 전달하는
HttpClient::GetAsync2()
,HttpClient::PostAsync2()
,HttpClient::PutAsync2()
를 추가했습니다.
HttpClient 객체로 Post 또는 Put Method 로 요청을 보낼 때, 데이터를 전달하기 위한
curl_httppost *
객체를 더 이상 HttpClient 내부에서 소멸시키지 않습니다. 따라서 요청을 호출하는 쪽에서 해당 객체를 소멸해야 합니다.HttpClient 이 DELETE Method 를 지원합니다.
UDP 트랜스포트가 여러 스레드에서 동시에 닫히는 상황에서 크래시할 수 있는 문제를 수정했습니다.
- Database¶
Mariadb Connector 에 새로운 함수를 추가했습니다.
size_t Mariadb::idle_connection_count()
함수는 현재 사용 가능한 MySQL 연결의 수를 반환합니다.
- misc.¶
JSON 문자열 파싱에 실패했을 때, 출력하는 원본 문자열의 길이가 불규칭한 문제를 수정했습니다.
v1.0.0-5868 (2021-04-02)¶
2021-04-02 13:06:08
- Network¶
UDP 트랜스포트가 여러 스레드에서 동시에 닫히는 상황에서 크래시할 수 있는 문제를 수정했습니다.
v1.0.0-5833 (2021-03-02)¶
2021-03-02 21:14:00
Warning
Breaking Changes
다음 변경사항으로 인해 ORM 기능을 사용하는 경우 서버를 다시 빌드해야 합니다.
ORM 기능에서 사용하는 SQL Query 를 생성하는 코드의 성능을 개선했습니다.
다음 변경사항으로 인해 funtest::Session
기능을 사용한다면 서버를 다시
빌드해야 합니다.
이제,
funtest::Session
이 암호화 기능을 지원합니다.funtest::Session
객체를 서버에 연결하면 서버 쪽 암호화 방식을 따라서 동작합니다.단, Chacha20 나 AES128 를 사용할 경우에는
funtest::Network::Option
의server_encryption_public_key
에 서버의 Public Key 를 설정해야합니다.
다음 변경사항으로 RPC 기능으로 연결되는 모든 서버를 업데이트해야 합니다.
Redis RPC 기능을 사용할 때, 호스트 OS 가 다른 경우 간혹 연결에 실패하여 서버가 시작되지 않는 문제를 개선했습니다.
- Object¶
ORM 기능에서 사용하는 SQL Query 를 생성하는 코드의 성능을 개선했습니다.
서버 크래시나 DB 연결 장애가 발생할 때 ORM 기능의 Array Index Corruption 이 발생하지 않도록 수정했습니다.
ORM 기능을 사용할 때, 오브젝트가 존재하지 않는 Key 를 두 개 이상 Fetch 속도를 개선했습니다.
- Network¶
이제,
funtest::Session
이 암호화 기능을 지원합니다.funtest::Session
객체를 서버에 연결하면 서버 쪽 암호화 방식을 따라서 동작합니다.단, Chacha20 나 AES128 를 사용할 경우에는
funtest::Network::Option
의server_encryption_public_key
에 서버의 Public Key 를 설정해야합니다.
- Management¶
Counter 를 관리할 때, 이름에 해당하는 ID 값을 단일 문자열에서 경로 형태로 표현될 수 있도록 개선했습니다.
기존에는 Type 과 ID 로만 식별하기 때문에 ApiService 를 통해서 접근하면, /v1/counters/{Type}/{ID} 로만 제한했었지만, 이제는 ID 에 해당하는 부분을 하위 경로 형태로 확장할 수 있습니다.
서버 코드에서 다음과 같이 ID 를 지정했다면, UpdateCounter("mygame", "system/guild/count", 100) ApiService 에서는 다음 URL 을 통해서 접근할 수 있습니다. http://{서버 주소}:{포트}/v1/counters/mygame/system/guild/count
확장된 ApiService URL 형식에 맞춰 Event 관련 Counter 의 URL 이 변경됩니다.
변경 전
변경 후
funapi/event_profiling
funapi/event/profiling/all
funapi/event_profiling_execution_time_order
funapi/event/profiling/order_by_execution_time
funapi/event_profiling_handler_time_order
funapi/event/profiling/order_by_handler_time
funapi/event_profiling_io_wait_time_order
funapi/event/profiling/order_by_io_wait_time
funapi/event_profiling_summary
funapi/event/profiling/summary
funapi/outstandingevent_profiling
funapi/event/profiling/outstanding
funapi/reset_event_profiling
funapi/event/profiling/reset
funapi/event
funapi/event/performance/queue
funapi/event_tag
funapi/event/performance/tag
funapi/event_thread
funapi/event/performance/thread
기존 URL 도 계속 사용할 수 있지만 향후 삭제될 예정입니다.
이벤트 하나에 대한 프로파일링 결과만을 출력하는 ApiService URL 을 추가했습니다.
ApiSerivce 를 통해서
/v1/counters/funapi/event/profiling/each/{event-name}
을 호출하면 event_name 에 해당하는 이벤트에 대한 프로파일리이 결과만 볼 수 있습니다.
이벤트 프로파일링 정렬 기준에 해당 이벤트의 누적 총 소요시간(소요시간 * 실행횟수) 을 추가했습니다.
다음 3 개 카운터들은 각 소요시간을 누적해서 정렬한 결과를 출력합니다.
URL
정렬 기준
funapi/event/profiling/order_by_exeuction_time_sum
대기 시간을 포함하는 이벤트 실행시간
funapi/event/profiling/order_by_handler_time_sum
오직 이벤트 핸들러만의 수행 시간
funapi/event/profiling/order_by_io_wait_time_sum
I/O 대기 시간
이벤트 프로파일링 결과에서 존재하지 않는 오브젝트에 대한 Fetch 비율을 나타내는
object_null_rate_mean
항목의 정확도를 개선했습니다.
- Distribution¶
RPC 백엔드가 zookeeper 일 때, ApiService 가 반환하는 분산 기능 통계(distribution_profiling) 의 출력 포맷을 Redis 일 때와 같도록 수정했습니다.
Redis RPC 기능을 사용할 때, 호스트 OS 가 다른 경우 간혹 연결에 실패하여 서버가 시작되지 않는 문제를 개선했습니다.
- Time¶
Timer::ExpireRepeatedly()
함수를 통해서 실행되는 핸들러의 실행 간격에 오차가 누적되지 않도록 수정했습니다.
- misc.¶
Flavor 명이
default
가 아니면 패키지 이름에서 생략하지 않도록 수정했습니다.
v1.0.0-5821 (2021-02-03)¶
2021-02-03 15:16:00
Warning
Breaking Changes
다음 변경사항으로 인해 funtest::Network
또는 funtest::Session
기능을
사용한다면 새로운 인터페이스에 맞게 수정해야 합니다.
funtest::Network
가 MANIFEST/SessionService 의 설정을 따르지 않도록 변경했습니다.기존에는
funtest::Network
기능이 MANIFEST/SessionService 설정을 공유했지만 이제는funtest::Network::Install()
함수의 3번째 인자로 전달하는funtest::Network::Option
객체를 사용해야 합니다.
아이펀 엔진 빌러와 리더보드 패키지를 함께 사용하는 경우 다음보다 높은 버전을 설치해야 합니다.
iFun Engine Biller 1.0.0-4733
iFun Engine Leaderboard 1.0.0-4381
- Distribution¶
RPC 기능을 사용할 때 같은 포트를 사용하는 서버를 중복해서 실행하면, 이미 실해중인 서버도 함께 종료되는 문제를 수정했습니다.
나중에 실행한 서버는 설정된 포트를 이미 사용중이라는 에러와 함께 종료합니다.
자기 자신에게 RPC 호출을 할 경우 불필요하게 출력되는 로그를 제거했습니다.
- Management¶
MANIFEST 의
api_service_event_tags_size
설정이 0 일 때는 서버가 시작되지 않도록 수정했습니다.
- Network¶
SessionOpened 핸들러보다 Tcp 또는 WebSocketTransportAttached 핸들러가 먼저 실행될 수 있는 문제를 수정했습니다.
설계상 SessionOpened 핸들러가 먼저 실행돼야 정상입니다.
funtest::Network
가 MANIFEST/SessionService 의 설정을 따르지 않도록 변경했습니다.기존에는
funtest::Network
기능이 MANIFEST/SessionService 설정을 공유했지만 이제는funtest::Network::Install()
함수의 3번째 인자로 전달하는funtest::Network::Option
객체를 사용해야 합니다.
- Database¶
RedisClient 객체 설정에서 Redis Sentinel 를 사용하면 크래시하는 문제를 수정했습니다.
- misc.¶
이제 C# RedisClient 객체도 Redis Sentinel 설정을 지원합니다.
v1.0.0-5777 (2021-01-06)¶
2021-01-06 11:36:10
Warning
Breaking Changes
다음 변경사항은 모든 서버를 함께 업데이트해야 합니다.
RPC 기능을 사용하는 서버들이 서로 연결될 때 다음 내용을 확인하고, 서로 다를 경우 우선순위에 따라 하나의 서버는 종료하도록 동작을 변경했습니다.
서버끼리 연결할 때 RPC 백엔드 설정이 같은지 비교합니다. (백엔드로 Redis 를 사용하는 경우만 해당)
ORM 기능의 Database 설정이 같은지 비교합니다.
- Distribution¶
RPC 기능을 사용하는 서버들이 서로 연결될 때 다음 내용을 확인하고, 서로 다를 경우 우선순위에 따라 하나의 서버는 종료하도록 동작을 변경했습니다.
서버끼리 연결할 때 RPC 백엔드 설정이 같은지 비교합니다. (백엔드로 Redis 를 사용하는 경우만 해당)
ORM 기능의 Database 설정이 같은지 비교합니다.
- Network¶
메시지 인코딩 방식이 Protobuf 이면서 MANIFEST 설정의
SessionService/send_session_id_as_string
설정이 false 일 때 문제가 발생할 수 있는 오류를 수정했습니다.funtest::Session
의 UDP 소켓이 닫히지 않고 남아있을 수 있는 문제를 수정했습니다.
- Framework¶
MANIFEST 파일이 잘못된 설정 이름을 포함하는 경우 서버가 시작되지 않도록 수정했습니다.
- Object¶
ORM 기능의 성능을 약간 개선했습니다.
오브젝트의 키가 복합키일 때 하나의 이벤트내에서 복합키 중 일부 키가 같은 두개의 오브젝트를 생성할 때 Assert 에 걸리는 문제를 수정했습니다.
- Database¶
RedisClient 객체를 사용해서 Redis Sentinel 구성을 설정할 때 크래시하는 문제를 수정했습니다.
v1.0.0-5768 (2020-12-02)¶
2020-12-02 12:00:00
- Distribution¶
RPC 메시지의 로그 단계를 더 세분화 했습니다.
rpc_message_logging_level
설정에서 사용할 수 있는 로깅 수준을 기존에 두 종류에서 아래와 같이 세분화했습니다.
1: 게임 서버 RPC 메시지들의 메시지 타입을 출력 2: 게임 서버 RPC 메시지들의 메시지 타입과 내용을 출력 3: 엔진과 게임 서버 RPC 메시지들의 메시지 타입을 출력 4: 엔진과 게임 서버 RPC 메시지들의 메시지 타입과 내용을 출력
- Network¶
메시지 인코딩 방식이 Protobuf 이면서
MANIFEST/SessionService/send_session_id_as_string
설정이 false 일 때 문제가 발생할 수 있는 오류를 수정했습니다.
- Object¶
ORM 기능의 성능의 약간 개선했습니다.
v1.0.0-5738 (2020-11-09)¶
2020-11-09 16:34:14
- Network¶
다음 수정 사항은 JSON 메시지 인코딩과 Session Reliability 기능을 동시에 사용하는 경우에만 영향을 받습니다.
클라이언트가 접속하면 서버가 크래시하는 문제를 수정했습니다.
v1.0.0-5725 (2020-11-04)¶
2020-11-04 12:00:00
- Object¶
ORM 기능이 DB 테이블을 생성할 때 컬럼 순서를 오브젝트 속성에서 정의한 순서대로 생성하도록 수정했습니다.
기존에는 오브젝트 속성에서 정의한 순서에 관계없이 알파벳 순서로 정렬되었습니다.
이 수정을 반영한 엔진을 설치한 후 새로 생성되는 테이블에 대해서만 적용되며 이미 존재하는 테이블의 컬럼 순서는 바뀌지 않습니다.
- Network¶
funtest::Session 이 연결 동작에 실패했을 때에도 연결 성공으로 콜백 함수에 전달될 수 있는 문제를 수정했습니다.
Session Reliability 기능을 사용할 때 클라이언트로부터 받은 메시지의 Sequence Number 가 기대값를 건너뛴 경우에 세션을 즉시 종료하도록 수정했습니다.
Sequence Number 가 중복된 경우는 기존과 동일하게 첫번째 메시지만 처리하고, 두번째 메시지부터는 무시합니다.
Json 메시지 송수신 시 약간의 성능을 개선했습니다.
- Service¶
CheckAndSetLoggedInAsync()
가 자동으로 재시도하도록 동작할 때, 로그아웃된 세션으로 다시 로그인하는 문제를 수정했습니다.
- System¶
로그를 쓸 때 지정된 주기 동안 한 번만 출력하는 기능을 추가했습니다. (C++ Only)
// 로그를 출력하고 interval 내에는 같은 로그를 출력하지 않습니다. LOG_ONCE_WHILE(lv, interval)
- misc.¶
외부 툴을 사용해서 메모리 릭과 오류를 검출하기 위한 방법을 제공합니다. (단, 일부 운영체제에서는 기능이 제한됩니다.)
Centos8 에서 Unity Protobuf DLL 을 생성할 수 없는 문제를 수정했습니다.
v1.0.0-5677 (2020-10-07)¶
2020-10-07 10:27:00
Warning
Breaking Changes
이제 서버 앱을 빌드할 때 C++11 표준 이상을 사용해야 합니다.
기존에 CMakeList.txt 에서 C++ 표준을 11 미만으로 설정하는 WANT_CXX11 플래그가 더 이상 동작하지 않습니다.
아래 콤포넌트에 새로 추가된 함수를 사용하기 위해서 서버를 다시 빌드해야 합니다.
WallClock
GetLocalTimestring: 호스트의 타임존 설정을 반영한 시간 문자열을 반환합니다.
RedisClient
GetConnectedConnectionCount: RedisClient 객체의 연결 중 실제로 연결되어 있는 연결의 수를 반환합니다.
- Time¶
호스트의 타임존 설정을 반영한 로컬 타임 문자열을 반환하는 함수를 추가했습니다.
// 현재 시각의 로컬 타임 문자열을 반환합니다. string WallClock::GetLocalTimestring() // 실행 인자로 전달한 시각의 로컬 타임 문자열을 반환합니다. string WallClock::GetLocalTimestring(const WallClock::Value&)
// 현재 시각의 로컬 타임 문자열을 반환합니다. string WallClock.GetLocalTimestring() // 실행 인자로 전달한 시각의 로컬 타임 문자열을 반환합니다. string WallClock.GetLocalTimestring(DateTime wall_clock)
- Database¶
RedisClient 객체에 현재 연결된 연결의 수를 반환하는 함수를 추가했습니다.
// RedisClient 객체의 연결 풀에서 실제로 Redis 서버에 연결된 연결 수를 // 반환합니다. size_t RedisClient::GetConnectedConnectionCount()
- Utility¶
텍스트 필터 기능을 추가했습니다.
텍스트 필터 기능을 사용해서 필터링할 문자열 목록을 설정하고, 문자열을 피터링할 수 있습니다.
포함 여부를 확인하거나 문자열 치환 기능을 제공합니다.
자세한 사용방법은 관련 매뉴얼 을 참고하시기 바랍니다.
- System¶
이제 서버 앱을 빌드할 때 C++11 표준 이상을 사용해야 합니다.
기존에 CMakeList.txt 에서 C++ 표준을 11 미만으로 설정하는 WANT_CXX11 플래그가 더 이상 동작하지 않습니다.
v1.0.0-5601 (2020-08-05)¶
2020-08-05 09:06:28
- Network¶
이제 웹소켓 트랜스포트에 핑을 설정할 수 있습니다.
MANIFEST/SessionService/websocket_ping 설정을 추가했습니다.
websocket_ping
설정을 추가하면서 기존의ping_xxx
을 대신하여 TCP 핑에 대한 설정을 할 수 있는tcp_ping
설정을 추가했습니다.기존의
ping_xxx
설정은 종전과 동일하게 TCP 핑에 대한 설정으로 사용할 수 있습니다. 단,tcp_ping
과ping_xxx
은 내부에서 같은 설정으로 취급되기 때문에 동시에 사용할 경우 의도하지 않은 값으로 설정될 수 있습니다."websocket_ping": { "sampling_interval_in_second": 0, "message_size_in_byte": 32, "timeout_in_second": 0 }, "tcp_ping": { "sampling_interval_in_second": 0, "message_size_in_byte": 32, "timeout_in_second": 0 }
Session 콤포넌트에 다음과 같은 인터페이스를 추가했습니다.
void SetPingSamplingInterval(size_t seconds, TransportProtocol protocol); size_t GetPingSamplingInterval(TransportProtocol protocol) const; void SetPingTimeout(size_t seconds, TransportProtocol protocol); size_t GetPingTimeout(TransportProtocol protocol) const; Ping GetPing(TransportProtocol protocol) const;
SetPingSamplingInterval : protocol 인자에 해당하는
sampling_interval_in_second
설졍을 변경합니다. 서버를 재시작하면 MANIFEST 값으로 초기화됩니다.GetPingSamplingInterval : protocol 인자에 해당하는
sample_interval_in_second
의 현재 설정값을 반환합니다.SetPingTimeout : protocol 인자에 해당하는
timeout_in_second
설정을 변경합니다. 서버를 재시작하면 MANIFEST 값으로 초기화됩니다.GetPingTimeout : protocol 인자에 해당하는
timeout_in_second
의 현재 설정값을 반환합니다.GetPing : protocol 인자에 해당하는 Ping 상태를 반환합니다.
- Management¶
API 서비스의
/v1/counters/all
와 같은 결과를 반환하는Json ReadAllCounters()
함수를 추가했습니다.모든 내부 카운터 종류와 값을 Json 포맷으로 반환합니다.
- Distribution¶
Redis RPC Backend 를 Sentinel 로 설정했을 때, 설정값보다 많은 연결이 만들어지는 문제를 수정했습니다.
v1.0.0-5531 (2020-06-30)¶
2020-06-30 12:00:00
Note
아이펀 엔진 v1.0.0-5531 버전부터 Stable 지원 목록에 윈도우 버전이 포함됩니다.
Warning
Breaking Changes
아래 변경사항을 적용하기 위해 서버를 다시 빌드해야 합니다.
다음 함수들의 이름이 변경됐습니다.
변경 전
변경 후
DebugGetEventName()
GetEventName()
DebugSetEventName()
SetEventName()
FunapiSession 에 UDP 트랜스포트를 사용할 때, 클라이언트가 보내는 초기화 메시지를 처리하는 동작이 추가됐습니다.
클라이언트 요청으로 세션을 닫는 서버 쪽 구현이 추가됐습니다.
차후 클라이언트 플러그인 업데이트를 통해서 해당 기능을 사용할 수 있습니다.
SessionClose 핸들러의 reason 항목으로
kClosedForClientRequest
가 추가됐습니다.
- Object¶
다음 함수들의 이름이 변경됐습니다.
변경 전
변경 후
DebugGetEventName()
GetEventName()
DebugSetEventName()
SetEventName()
ORM 기능의 DateTime 타입을 Map, Array 로 사용할 수 있도록 수정했습니다.
DateTime Array 의
FindFirstEmptySlot()
함수를 호출하면WallClock::kEpochClock
을 Empty 로 판단합니다.
ORM 기능의 C# 인터페이스가 추가됐습니다.
ArrayRef<T>.Match(Func<T, bool>)
조건과 일치하는 원소의 목록을 반환합니다.ArrayRef<T>.CountIf(Func<T, bool>)
조건과 일치하는 원소의 갯수를 반환합니다.
- Network¶
FunapiSession 에 UDP 트랜스포트를 사용할 때, 클라이언트가 보내는 초기화 메시지를 처리하는 동작이 추가됐습니다.
클라이언트 플러그인도 함께 업데이트해야 합니다.
클라이언트 플러그인 Unity 만 먼저 지원하고, UE4 는 다음 업데이트에 포함됩니다.
클라이언트 요청으로 세션을 닫는 서버 쪽 구현이 추가됐습니다.
차후 클라이언트 플러그인 업데이트를 통해서 해당 기능을 사용할 수 있습니다.
SessionClose 핸들러의 reason 항목으로
kClosedForClientRequest
가 추가됐습니다.
HTTP 트랜스포트와 Protocol Buffer 메시지 사용 시, 미등록 메시지를 서버가 수신한 경우 크래시할 수도 있는 문제를 수정하였습니다.
WebSocket 트랜스포트 사용 시, 서버에서 클라이언트로 메시지 전송 시 지연이 발생할 수도 있는 문제를 수정하였습니다.
- System¶
Event::Invoke()
함수가 새 이벤트의 이름을 인자로 받을 수 있게 수정했습니다.이제 이벤트 함수 내에서
SetEventName()
를 사용하지 않더라도Event::Invoke(MyEventFunction, "MyEventName")
와 같이 이벤트를 생성할 때 생성 시점에 이벤트 이름을 지어줄 수 있습니다.
- Service¶
아이펀 엔진에서 생성하는 모든 이벤트에 이름을 부여했습니다.
엔진에서 생성되는 이벤트들 중 상당수가 이름이 없어서 이벤트 프로파일링과 각종 로그에서
_unnamed_event_
로 표시되는 문제를 수정했습니다.
v1.0.0-5451 (2020-06-03)¶
2020-06-03 12:00:00
Note
이제, Ubuntu 20.04 Focal Fossa 그리고, CentOS 8 에서도 아이펀 엔진을 사용할 수 있습니다!
Important
아이펀 엔진 에서 사용하는 WebSocket 라이브러리가 업데이트되었습니다.
OS 별로 다음 주의 사항을 참고해 주시기 바랍니다.
업데이트와 관련하여 질문이나 도움이 필요한 경우는 iFun Engine Q&A 게시판 에 문의해 주시기 바랍니다.
Linux
배포판 별 패키지 관리자로 아이펀 엔진을 업데이트해도 됩니다만, CentOS 에서는 라이브러리가 충돌하는 경우가 있습니다.
그런 경우에는 아래와 같이 아이펀 엔진 패키지와 WebSocket 라이브러리를 삭제한 후 다시 설치 해 주시기 바랍니다.
단, WebSocket 라이브러리를 삭제하는 과정에서 아이펀 엔진 패키지와 게임 서버 패키지가 함께 삭제되기 때문에 다시 설치해 주시기 바랍니다.
$ dpkg --list | grep libwebsockets libwebsockets23 (구버전) $ sudo apt purge libwebsockets23 $ sudo apt install funapi1-dev $ dpkg --list | grep libwebsockets libwebsockets16 (새버전)
$ rpm -qa | grep libwebsockets libwebsockets23-2.3.0-2.el7.x86_64 (구버전) $ sudo yum remove libwebsockets23 $ sudo yum install funapi1-devel $ libwebsockets16-4.0.7-3.el7.x86_64 (새버전)
Windows
`아이펀 엔진 공식 다운로드 페이지`_ 에서 iFun Engine Installer Bundle 설치 프로그램으로 통합 설치를 진행하시면 함께 업데이트 됩니다.
아이펀 엔진 만 업데이트 하시는 경우는 반드시 3rd-party Libraries 146 버전 이상을 설치해 주시기 바랍니다.
Warning
Breaking Changes
아래 콤포넌트를 사용하는 프로젝트는 인터페이스가 변경되었기 때문에 다시 빌드해야 합니다.
RedisClient::Finalize()
함수가 완료되지 않은 명령을 버리고 즉시 종료하도록 동작하는 bool 타입 옵션 인자를 추가했습니다.World::GetAllObject()
함수를 사용하고 있다면 이름을World::GetAllObjects()
로 수정해 주세요.World::EraseAllObjects()
함수를 새로 추가하면서 인터페이스 이름을 통일했습니다.
World 객체와 World::Object 객체의 복사를 컴파일 타임에 막도록 수정했습니다.
사용자 행동 로그의 포맷이 변경됐습니다.
사용자 행동 로그 포맷에 이미 제공하던 timestamp 필드 외에 개별 로그 단위를 식별하기 위한 uuid 필드를 추가했습니다.
로그를 파일(file://) 에 남기고 있었다면 로그 포맷이
type:timestamp (key, ...) = (val, ...)
에서type:timestamp:uuid (key, ...) = (val, ...)
로 변경됩니다.행동 로그를 쓰는 중에 장애가 발생했을 경우 아이펀 엔진 은 로그의 유실을 방지하기 위해 로그 내용을 중복해서 남길 수 있는데, 이제 uuid 필드로 동일한 로그가 중복됐는지 식별할 수 있습니다.
- Network¶
HttpClientPool 콤포넌트를 추가했습니다.
HTTP 요청을 자주 사용한다면 HttpClientPool 을 사용할 것을 권장합니다.
트랜스포트 프로토콜별 압축 기능(Compression) 의 설정 방식을 변경했습니다.
압축 기능이 각 트랜스포트 별 설정들을 개별 설정으로 두고 있는데, 계층 구조로 설정할 수 있도록 수정했습니다.
변경 전: "{protocol}_compression": "none, "{protocol}_compression_dictionary": "", "{protocol}_compression_threshold": 1, ... 변경 후: "{protocol}_compression": { "type": "none", "dictionary": "", "threshold": 1 }, ...
기존 설정 방식도 그대로 사용할 수 있지만, 변경된 설정 방식과 함께 사용하는 경우 의도대로 동작하지 않을 수 있습니다.
엔진 1.0.0-5153 버전부터 Ubuntu 16.04 에서 AES128 암호화를 사용할 수 없던 문제를 수정했습니다.
funtest::Session 객체의 WebSocket 연결이 동작하지 않을 수 있는 문제를 수정했습니다.
- Database¶
Redis RPC Backend 기능을 사용할 때, 특정한 상황에서 일부 ORM 오브젝트 또는 AccountManager 에 등록된 계정에 접근할 수 없는 문제를 수정했습니다.
RedisClient::Finalize()
함수가 완료되 않은 명령을 버리고 즉시 종료하도록 동작하는 bool 타입 옵션 인자를 추가했습니다.Mariadb/MySQL 서버에 직접 쿼리를 전송할 수 있는 Mariadb 객체에 쿼리 실행 후 영향 받은 행의 개수를 읽는 함수가 추가 됐습니다.
만약,
Mariadb::ExecuteQuery()
함수로 여러 CRUD 쿼리를 한꺼번에 요청했을 때,ResultSets::GetCountOfAffectedRows()
함수는 첫 CRUD 쿼리로 영향 받은 행의 개수를ResultSets::GetCountsOfAffectedRows()
함수는 모든 CRUD 쿼리로 영향 받은 행의 개수를 얻을 수 있습니다.
- Service¶
World 기능을 다음과 같이 개선했습니다.
World 객체가 매우 큰 값의 좌표가 입력받았을 때 성능을 개선했습니다.
World 기능이 부동소수점 오차에 의해 잘못 동작할 수 있는 문제를 수정했습니다.
World 객체에 속한 World::Object 의 이동 성능을 개선했습니다.
World::Object 가 두 개 이상의 World 객체에 중복으로 입장할 수 없도록 예외처리를 추가했습니다.
World 객체의 Zone 을 사용했던 World::Object 를 재사용하면 크래시할 수 있는 문제를 수정했습니다.
World 객체의 모든 World::Object 를 삭제하는
World::EraseAllObjects()
함수를 추가했습니다.새로 추가한
World::EraseAllObjects()
함수에 맞춰서 이미 제공하던World::GetAllObject()
함수의 이름도World::GetAllObjects()
로 변경했습니다.World 객체와 World::Object 객체의 복사를 컴파일 타임에 막도록 수정했습니다.
- System¶
사용자 행동 로그 포맷에 이미 제공하던 timestamp 필드 외에 개별 로그 단위를 식별하기 위한 uuid 필드를 추가했습니다.
로그를 파일(file://) 에 남기고 있었다면 로그 포맷이
type:timestamp (key, ...) = (val, ...)
에서type:timestamp:uuid (key, ...) = (val, ...)
로 변경됩니다.행동 로그를 쓰는 중에 장애가 발생했을 경우 아이펀 엔진 은 로그의 유실을 방지하기 위해 로그 내용을 중복해서 남길 수 있는데, 이제 uuid 필드로 동일한 로그가 중복됐는지 식별할 수 있습니다.
- Framework¶
특정한 상황에서 코어 덤프가 생성되지 않는 문제를 수정했습니다.
- Distribution¶
Windows 버전에서 RPC 기능을 Zookeeper 와 함께 사용하면 Debug 타겟으로 실행 시 예외가 발생하는 문제를 수정했습니다.
- Object¶
ORM 기능이 데이터베이스 스키마를 검사할 때, 파라미터의 대소문자를 구분하지 않도록 수정했습니다.
v1.0.0-5295 (2020-05-06)¶
2020-05-06 12:00:00
- Service¶
CheckAndSetLoggedInAsync()
함수가 로그인 시도에 실패하면 자동으로 로그아웃과 로그인을 재시도 하도록 동작하는 인터페이스를 추가했습니다.CheckAndSetLoggedInAsync( const string& /*account_id*, const Ptr<Session>& /*session*/, const size_t& /*max_retry*/, const LoginCallback& /*login_callback*/, const LogoutCallback& /*logout_callback*/);
account_id 로 로그인을 최소 한번 시도하고 실패 시 max_retry 값만큼 (0보다 클 경우) 자동으로 로그아웃하고, 다시 로그인하기를 반복합니다.
그 과정에서 로그아웃이 성공하면 logout_callback 이 불립니다. (로그아웃이 성공할 때마다 불립니다)
최대 재시도 횟수를 초과하거나 로그인이 성공한 경우 login_callback 핸들러가 불립니다. (더이상 시도하지 않을 때 한번만 불립니다)
World 기능에서 오브젝트를 퇴장, 이동시킬 때 크래시할 수 있는 문제를 수정했습니다.
- Network¶
Event 타임아웃이 발생하면 자동으로 세션을 닫고, 세션 닫힘 핸들러를 호출하는 기능을 추가했습니다.
MANIFEST/SessionService 에 close_session_when_event_timeout 를 추가하고 true 로 설정하면 엔진은 Event 타임아웃이 발생했을 때, 연관된 세션을 닫고 세션 닫힘 핸들러(OnSessionClosed) 가 호출합니다.
이렇게 함으로써 Event 타임아웃 핸들러에서 세션을 정리해야 하는 수고를 덜 수 있으며 게임 서버 코드의 일관성을 확보할 수 있습니다.
Event 타임아웃 후 불리는 세션 닫힘 핸들러의 Event 태그는 세션 ID 가 아니니 주의 하시기 바랍니다.
이제 Ping 기능 사용할 때, 웹소켓 프로토콜을 사용하도록 지정할 수 있습니다.
MANIFEST/SessionService 에 ping_protocol 값을 tcp 또는 websocket 으로 설정해서 Ping 기능을 사용할 프로토콜을 지정할 수 있습니다.
1.0.0-5153 버전 이후 Ubuntu 16.04 에서 AES128 암호화를 사용할 수 없는 문제를 수정했습니다.
- Framework¶
서버에서 사용하는 로케일을 시스템의 언어, 국가와 UTF-8 인코딩으로 고정하였습니다.
최근 업데이트 후 1.0.0-3373 이전 버전의 funapi-leaderboard 를 사용할 수 없는 문제를 수정했습니다.
- Distribution¶
Redis RPC Backend 기능을 사용할 때 서버 종료 시 해당 서버가 소유하고 있언 RPC 오브젝트의 소유권 정보를 로그로 출력하는데, 이 때 하나의 Redis Shard 에 대한 정보만 출력하는 문제를 수정했습니다.
v1.0.0-5189 (2020-04-01)¶
2020-04-01 12:00:00
- Distribution¶
일부 운영체제에서 서버가 크래시했을 때 연결 돼 있던 서버들의 RPC 연결 끊김 감지가 늦어지는 문제를 수정했습니다.
- Network¶
내부 스레드 풀이 과부하로 인해서 지연이 발생할 경우 로그 출력하도록 개선했습니다.
Ping 타임아웃으로 TCP 연결을 끊을 때, INFO 레벨 로그를 출력하도록 변경했습니다.
v1.0.0-5080 (2020-03-04)¶
2020-03-04 09:00:00
Warning
Breaking Changes
아래 변경 사항은 funapi-biller1 패키지 버전 1.0.0-3830 Stable 이상으로 업데이트 해야 합니다.
이제, 아이펀 빌러가 구글 플레이 인증을 Google Service Account 정보 로도 진행할 수 있습니다.
- System¶
크래시하여 종료처리를 할 때 또 다시 크래시가 발생 할 수 있는 문제를 수정했습니다.
서버가 종료될 때, CURL 콤포넌트 관련 오류가 발생하는 문제를 수정했습니다.
- Billing¶
이제, 빌러가 구글 플레이 인증을 Google Service Account 정보 로도 진행할 수 있습니다.
설정 과정이 복잡한 refresh_token 을 사용하는 인증 방법 대신 Google Service Account 정보 를 사용할 수 있습니다.
아이펀 엔진의
MANIFEST/BillingClient
항목의use_googleplay_service_account
설정을 true 로 정의하고,구글 플레이 개발자 콘솔에서
Service Account
을 만들 때 생성되는 json 파일 올 복사한 경로를googleplay_service_account_json_path
에 설정 해 주세요.아래 변경 사항은 funapi-biller1 패키지 버전 1.0.0-3830 Stable 이상을 사용해야 합니다.
v1.0.0-4991 (2020-02-07)¶
2020-02-07 08:00:00
Warning
Breaking Changes
- Redis RPC Backend 설정 방식이 변경됐습니다.¶
MANIFEST/RpcServer 항목의 다름 설정들은 더이상 동작하지 않습니다.
rpc_redis_host
rpc_redis_port
rpc_redis_sentinel_master_name
rpc_redis_sentinel_addresses
대신 다음 설정을 사용 해 주시기 바랍니다.
rpc_redis_hosts
,rpc_redis_sentinels
- Distribution¶
이제 Redis RPC Backend 를 사용할 때 각 샤드에 대해서 Database 와 AUTH Password 를 설정할 수 있습니다.
// // 예시 // // 하나의 Redis 서버의 database 인덱스를 구분해서 두 개의 호스트처럼 사용 "rpc_redis_hosts": [ { "host": "127.0.0.1:6379", "database": 0 // 생략하면 기본 값 0 으로 작동합니다. "auth": "" // 생략하거나 빈 문자열을 입력하면 AUTH 를 진행하지 않습니다. }, { "host": "127.0.0.1:6379", "database": 1 "auth": "" } ] // Redis Sentinel 구성을 두세트 사용하는 경우 "rpc_redis_sentinels": [ {"master_name": "...", "addresses": "...", "database": index, "auth": ""}, {"master_name": "...", "addresses": "...", "database": index, "auth": ""} ]
Tip
rpc_redis_hosts
와rpc_redis_sentinels
설정의 기존 방법도 사용할 수 있습니다."rpc_redis_hosts": ["ip:port", "ip:port"], "rpc_redis_sentinels": [ {"master_name": "...", "addresses": "..."}, {"master_name": "...", "addresses": "..."} ]
- System¶
이제 CSV 형식의 기획 데이터도 사용할 수 있습니다. MANIFEST 파일 의 ResourceManager 항목에 다음 설정들을 구분해서 사용할 수 있습니다.
game_json_data_dir: JSON 포맷의 데이터 파일을 읽어들일 디렉토리 경로.
game_tab_separated_data_dir: Tab 구분자를 사용하는 데이터 파일을 일어들일 디렉토리 경로.
game_comma_separated_data_dir: 콤마 구분자를 사용하는 데이터 파일을 읽어들일 디렉토리 경로.
기획데이터 파일에서 필드 구분자가 연속해서 나올 경우 처리하는 방법을 MANIFEST 파일 설정으로 선택할 수 있습니다.
ResourceManager 항목에
game_compress_repeating_separators
설정이 true 이면 연속되는 구분자를 하나로 취급합니다.
- Billing¶
MANIFEST/BillingClinet 항목의
biller_implicit_start
설정이 true 일 때, 인증 요청을 보내지 않던 문제를 수정했습니다.
- Network¶
Session::Tag()
함수가 열려있는 Session 에 대해서만 동작하도록 수정했습니다.
- Service¶
아이펀 엔진의 AuthenticationService 에 애플 인증 에 대한 검증을 추가했습니다.
- Database¶
RedisClient::Create()
함수를 호출할 때, AUTH Password 를 입력하면 크래시하는 문제를 수정했습니다.
- misc.¶
이제 funtest::Session 도 Session Reliability 설정을 지원합니다.
MANIFEST/SessionService 항목의 use_session_reliability 설정에 따라 동작합니다.
Warning
Funtest 는 고객사의 테스트 클라이언트 작성을 지원하기 위해 아이펀 엔진 기능 중 일부를 모아서 구현했기 때문에 모든 기능을 제공하지 않습니다.
v1.0.0-4738 (2020-01-09)¶
2020-01-09 13:13:13
Warning
Breaking Changes
아래 변경 사항들로 인해 funapi-biller1 패키지를 1.0.0-3526 버전 이상으로 업데이트 해야 합니다.
- + 이제 원스토어 SDK 버전 17 (API 5) 를 사용한 결제 검증을 지원합니다.¶
원스토어 SDK 버전 17 에서 결제 검증을 요청할 때 필요한 영수증을 생성하는
MakeOneStoreReceiptV5()
함수를 추가했습니다.원스토어 SDK 버전 17 부터는 검증을 위한 인증 절차가 필요합니다. 이를위해 MANIFEST 파일 의 BillingClient 항목에
onestore_client_id
,onestore_client_secret
설정을 추가했습니다.
- Service¶
MANIFEST 파일 에 두 개 이상의 월드를 생성하도록 설정하면 서버가 구동되지 않는 문제를 수정했습니다.
C# 프로젝트 에서 매치메이킹 클라이언트에서 매칭 시작 시에 전달한 JSON 객체 를 저장하는 형식을 C++ 과 같도록 아래와 같이 변경했습니다.
{ "request_time":6447934119, // 요청 시각 "elapsed_time":0, // 요청 이후 지난 시간(단위: 초) "user_data": { // Start() 또는 Start2() 로 전달한 JSON 객체 } }
C# 지원 함수 목록에
UpdateMatchPlayerContext()
함수가 추가되었습니다. 이 함수는 매치메이킹 대기열에 있는 플레이어의 JSON 타입 컨텍스트를 변경할 때 사용합니다.World::Broadcast()
함수를 실행하기 위한 전담 스레드를 추가하여 성능을 개선했습니다.World 기능을 Single Thread Mode 로 사용할 때, 성능이 좋아집니다.
- Billing¶
이제 원스토어 SDK 버전 17 (API 버전5) 을 사용하는 결제 검증을 지원합니다.
이 기능을 사용하기 위해서는 funapi-biller1 패키지의 버전이 1.0.0-3526 이상이어야 합니다.
원스토어 SDK 버전 17 에서 결제 검증을 요청할 때 필요한 영수증을 생성하는
MakeOneStoreReceiptV5()
함수를 추가했습니다.원스토어 SDK 버전 17 부터는 검증을 위한 인증 절차가 필요합니다. 이를위해 MANIFEST 파일 의 BillingClient 항목에
onestore_client_id
,onestore_client_secret
설정을 추가했습니다.
구글 플레이 결제 검증 기능에서
ValidateReceipt2()
함수에 대한 콜백에 전달하는 인자 목록에order id
를 추가했습니다.
- Network¶
서버가 프로토버프 포맷의 메시지를 전송할 때,
SendMessage()
내부에서 메시지를 복사하는 횟수를 줄여서 성능을 향살 시킬 수 있는 설정을 추가했습니다.MANIFEST 파일 의 SessionService 의
do_not_copy_protobuf_message_when_send
를true
로 설정하면 엔진 내부에서 프로토버프 메시지를 복사하지 않습니다.이 기능을 사용할 때는
SendMessage()
로 전달한 메시지를 수정해서는 안됩니다. 수정 할 경우 서버가 크래시 할 수 있습니다.
World::Broadcast()
의 성능이 개선됐습니다.
- Database¶
서버가 크래시로 종료하는 속도를 개선했습니다.
Redis
객체의 명령어 함수들을 사용할 때, 잘못된 Tag 를 입력할 경우FATAL 로그
와 함께 크래시하는 대신Redis::ResultError
를 반환하도록 수정됐습니다.
- Framework¶
Ubuntu 운영체제 에서 C++ 프로젝트 서버가 크래시로 종료될 때 낮은 확률로 Assert 에 걸릴 수 있는 문제를 수정했습니다.
Fatal 레벨 로그, Assertion 등으로 크래시할 때 원인이 되는 스레드 이름을 로그에 남기도록 수정했습니다.
- Object¶
C# 프로젝트 에서 Mono GC 의 특성으로 인해 이벤트 처리시간이 지속적으로 늘어나는 문제를 수정했습니다.
Mono GC 모듈로 Sgen 대신 Boehm 을 사용하도록 변경했습니다.
- misc.¶
특정 태그를 갖는 세션 개수를 구하는 함수
Session::CountWithTag()
를 추가하였습니다.이 수정으로 태그 별 세션 개수를 엔진의 카운터 기능를 통해서 모니터링할 수 있습니다.
funapi
카테코리의sessions.by-tag.<tagname>
항목을 통해서 조회 할 수 있습니다.이 기능을 사용하면 클라이언트 플랫폼, 국가별 세션 수와 같은 통계를 조회 할 수 있습니다.
C# 프로젝트 에서
Event.Invoke()
함수가 일부 Mono Runtime 버전 의 GC 에서 메모리 증가 및 성능 저하가 발생하는 문제를 수정했습니다.C# 프로젝트 의 엔진 API 에 Null 인자 가 입력될 경우 Assert 대신 ArgumentNullException 을 Throw 하도록 수정했습니다.
C# 프로젝트 서버를 실행할 때, 임의의 위치에서 크래시할 수 있는 문제를 수정했습니다.
v1.0.0-4447 (2019-12-09)¶
2019-12-09 13:00:00
Warning
Breaking Changes
- Mariadb Class 를 사용하는 경우, 서버를 다시 빌드해야 합니다.¶
Mariadb 객체의 내부 풀에서 연결을 점유해서 사용할 수 있는 기능을 추가했습니다.
지금까지는 특정 연결을 지정하지 않고 클래스 내부 풀에서 사용 가능한 연결을 무작위로 사용했지만, 이제 특정 연결을 지속해서 사용할 수 있습니다.
단, 연결이 고갈되는 상황에 주의 해 주세요.
- Service¶
서버 이동 기능 을 사용할 때, 엔진이 클라이언트로 이동 결과를 통지하기 전에 사용자가 등록한 서버 이동 핸들러에서 메시지를 보낼 수 있는 문제를 수정했습니다.
서버 이동 결과를 통지하고, 서버 이동 핸들러를 호출하도록 순서를 변경했습니다.
서버 이동 기능에서 사용하는 비동기 함수
AccountManager::RedirectClientAsync()
를 추가했습니다.AccountManager::SetLoggedOut()
함수에 로그아웃 하려는 ID 문자열 대신 Session 객체 를 매개변수로 받을 수 있는 인터페이스를 추가했습니다.두 개 이상의 트랜스포트를 가지고 있는 세션에 서버 이동 기능을 사용할 경우 세션만 닫히고 이동에 실패할 수 있는 문제를 수정했습니다.
AccountManager::RegisterRedirectionHandler()
로 등록한 함수에서 ORM 오브젝트 를 Fetch 하면 AssertNoRollback 으로 종료할 수 있는 문제를 수정했습니다.
- Database¶
C# 프로젝트 를 실행할 때, Mono Runtime 내부에서 임의로 크래시할 수 있는 문제를 수정했습니다.
Mariadb Class 에 연결을 독점적으로 사용할 수 있는 기능을 추가했습니다.
Ptr<MariadbConnection> Mariadb::GetExclusiveConnection()
을 호출하면 하나의 연결을 연결 풀에서 분리하여 독점적으로 사용할 수 있습니다.
- System¶
C# 프로젝트 에서 Activity Log 함수의 인자로 NULL 문자열 을 넘길 경우 크래시하는 문제를 수정했습니다.
v1.0.0-4392 (2019-11-06)¶
2019-11-06 10:47:37
Warning
Breaking Changes
- 다음 변경 사항으로 인해 World 기능을 사용하는 경우 서버를 다시 빌드¶
- 해야 합니다.¶
World 객체를 단일 스레드 모드로 사용할 수 있는 인터페이스를 추가했습니다.
World::SetSingleThreadMode()
를 호출하면 World 객체 내부에서 Mutex 를 사용하지 않고 동작합니다.단, 단일 스레드 모드로 동작하는 World 객체에 여러 스레드가 접근할 경우 예상치 못한 동작으로 크래시 할 수 있습니다.
World 기능에서 제공하는 일부 인터페이스가
FindFilter
를 지원하도록 수정했습니다.World::FindSession()
World::Broadcast()
- 다음 변경 사항으로 인해 World 기능을 사용하는 경우 서버를 다시 빌드¶
- 해야 합니다.¶
이제, Multicast 기능에서 사용할 프로토콜을 Tcp, Websocket 중에서 선택할 수 있습니다.
MANIFEST 파일의 MulticastServer->transport_for_multicast_channel 설정을 tcp 또는 websocket 중에 선택해서 입력할 수 있습니다.
- Service¶
World 객체를 단일 스레드 모드로 사용할 수 있는 인터페이스를 추가했습니다.
World::SetSingleThreadMode()
를 호출하면 World 객체 내부에서 Mutex 를 사용하지 않고 동작합니다.단, 단일 스레드 모드로 동작하는 World 객체에 여러 스레드가 접근할 경우 예상치 못한 동작으로 크래시 할 수 있습니다.
World 기능에서 제공하는 일부 인터페이스가
FindFilter
를 지원하도록 수정했습니다.World::FindSession()
World::Broadcast()
World 기능이 단일 스레드 모드로 동작할 때, 일부 합수의 성능을 개선했습니다.
Broadcast()
,FindObject()
함수의 성능을 개선했습니다.
이제, Multicast 기능에서 사용할 프로토콜을 Tcp, Websocket 중에서 선택할 수 있습니다.
MANIFEST 파일의 MulticastServer->transport_for_multicast_channel 설정을 tcp 또는 websocket 중에 선택해서 입력할 수 있습니다.
- Network¶
Session::SendMessage()
함수의 일부 동작을 네트워크 스레드로 옮겨서 상대적으로 부담이 큰 이벤트 스레드의 부하를 줄였습니다.만일,
Slow Event
가 발생하지 않고도 서버의 응답 속도가 느려지는 증상이 나타나면 MANIFEST 의network_io_threads_size
설정을 조절 해 보시기 바랍니다.
CentOS 7 운영체제에서 libcurl 라이브러리의 동작이 중복된 소켓 지시자를 만들 수 있는 문제를 보완하도록 수정했습니다.
세션 메시지 로깅 기능에 메시지 타입에 대한 필터링 기능이 추가되었습니다.
MANIFEST 파일에 SessionService->session_message_logging_excluded 설정을 추가하고, 메시지 타입을 의미하는 정수값 또는 문자열을 등록하면 등록된 메시지 타입에 해당하는 메시지는 출력하지 않습니다.
- Object¶
하나의 이벤트가 실행되는 동안 오브젝트를 생성하고 바로 삭제한 뒤 같은 오브젝트에 바로 접근할 때,
null
포인터를 반환하는 대신 이벤트 타임아웃이 발생하는 문제를 수정했습니다.
- System¶
이제, ResourceManager 기능이 MySQL 의
TIMESTAMP
타입을 지원합니다.같은 이벤트 태그를 부여밭은 이벤트들의 순서 처리 성능을 개선했습니다.
이벤트 프로파일링 기능 중 일부 수치의 계산 오류를 수정했습니다.
event_profiling 결과 중
queue_time
값이 잘못 표시되는 문제를 수정했습니다.event_profiling_summury 결과 중
execution_time
값의 계산 오류를 수정했습니다.
- Management¶
아이펀 디플로이의 통계 페이지에서 사용할 수 있는 동시접속자 수 정보를 플레이어 행동 로그로 남기는 기능을 추가했습니다.
MANIFEST 파일에
DeployApiService->deploy_api_service_use_logging_stats
설정을true
로 설정하면DeployApiService->deploy_api_service_logging_stats_interval_in_secs
에 설정한 주기마다 플레이어 행동 로그 설정에 따라 로그를 남깁니다.
- misc.¶
C# 프로젝트로 개발 시 다음과 같은 문제를 수정했습니다.
실행 중에 크래시할 때, Stack Trace 정보에 소스코드의 줄 번호가 출력되지 않는 문제 를 수정했습니다.
Make 명령 으로 빌드할 때 오류가 발생하는 문제를 수정했습니다.
v1.0.0-4379 (2019-10-26)¶
2019-10-26 00:46:16
Warning
Breaking Changes
- + 이제, 아이펀 빌러에서 Google Play API v3 을 지원합니다.¶
이 변경 사항을 적용하기 위해서는 funapi-biller1 패키지를 3244 버전 이상으로 업데이트하고, 서버를 다시 빌드해야 합니다.
아이펀 빌러의 MANIFEST 파일 에
biller_use_google_play_developer_api_v3
설정을 추가하고,true
로 설정하면 Google Play API v3 를 사용하도록 동작합니다. (현재 기본 설정은 1.1 을 사용합니다)기존에 아이펀 빌러를 사용하다가 Google Play API v3 로 변경하는 경우에는 링크 를 참고하셔서 Database 를 마이그레이션 해야합니다.
Warning
2019년 12월 1일 부터 기존에 아이펀 빌러에서 사용하는 Google Play API v1.1 를
사용할 수 없기 때문에 biller_use_google_play_developer_api_v3
설정은
true
가 기본 설정이 됩니다.
v1.0.0-4339 (2019-10-10)¶
2019-10-10 10:39:00
- System¶
이제 MANIFEST 파일 에서 서버의 종료 처리 동작에 대한 시간 제한을 설정할 수 있습니다.
기존에는 사용자가 설정할 수 없는 20 초의 제한 시간이 설정되어 있었습니다만, MANIFEST/Framework 설정의
termination_timeout_in_sec
항목을 추가하면, 이 시간동안 서버는 최종 종료까지 할 일을 수행할 수 있습니다.기본값은 20 초이며, 최소 5 초와 최대 300 초 (5분) 사이의 값을 설정할 수 있습니다.
서버가 종료할 때, 남아있는 이벤트를 제한시간까지 처리하고 종료하도록 수정했습니다.
남아있는 이벤트를 처리하는 제한 시간은
termination_timeout_in_sec
설정의 50% 입니다. 이 시간이 경과한 후에는 이벤트가 남아 있더라도 처리하지 않고 서버를 종료하는 단계로 진행합니다.서버 종료 시 남아 있는 이벤트,
static bool Stop()
함수에서 Invoke 한 이벤트, 그리고 이벤트 함수에서 다시 Invoke 한 이벤트들을 모두 처리하고 종료합니다.ORM 기능 도 사용 할 수 있습니다.
더 이상 타임아웃 등으로 중단된 이벤트 가 이벤트 큐 길이 계산에 포함되지 않도록 수정했습니다.
서버 종료 시 타임아웃 등으로 중단된 이벤트 가 있을 때 종료가 지연되는 문제를 수정했습니다.
ResourceManager 가 주석과 UTF-8 BOM 문자를 포함하는 JSON 오브젝트를 읽을 수 있도록 수정했습니다.
- Service¶
World 기능 에 이동하는 캐릭터의 시야를 처리하기 위한 필터를 추가했습니다.
World::MakeMovingFilter()
로 생성한 필터를 통해서 오브젝트가 이동할 때마다 새롭게 시야에 들어오는 오브젝트만 추출할 수 있습니다.
World::MakeMovingFilter()
함수의 이름이 World::MakeMovingSightFilter() 로 변경됐습니다.
- Network¶
HttpClient 객체 를 사용해서 HTTP 요청을 보낼 때, 프로토콜
HTTP/1.1
을 우선적으로 사용하도록 수정했습니다.HttpClient 객체 는 아직
HTTP/2
를 지원하지 않기 때문에HTTP/1.1
을 우선하도록 변경했습니다.
v1.0.0-4269 (2019-09-04)¶
2019-09-04 15:19:07
Warning
Breaking Changes
- 다음 변경사항으로 인해 서버를 다시 빌드해야 합니다.¶
이제, RedisClient 에
Disconnect Callback
을 추가할 수 있습니다.
- Service¶
이제, Facebook 이나 Line 같은 외부 서비스의 인증 검증을 지원하는 함수를 동기 방식으로 사용하면 경고 메시지를 출력합니다.
Nexon Toy, Nexon Platform 도 포함합니다.
동기방식의 함수는 테스트를 위헤 제공하고 있으며 성능저하를 일으킬 수 있기 때문에 비동기 방식의 함수를 사용 해 주시기 바랍니다.
- Database¶
이제, RedisClient 에
Disconnect Callback
을 추가할 수 있습니다.RedisClient 에 연결 타임아웃 12 초를 적용했습니다.
- Object¶
이벤트 타임아웃 발생 시 롤백 원인을 로그로 출력하는 기능을 추가했습니다.
MANIFEST 파일 의 EventDispatcher 에
log_rollback_causes_last_n
설정을 추가하면 이 값 만큼 롤백에 대한 원인을 로그에 출력합니다.
MANIFEST 파일 의 RpcService 에
rpc_redis_disable_key_refresh
설정을 삭제하고 해당 기능이 항상 동작하도록 변경되었습니다.복합키를 설정한 오브젝트를 가져올 때, 만약 존재하지 않는 경우 Assert 에 걸리는 문제를 수정했습니다.
복합키와 크기가 지정된
Integer
타입을 동시에 사용할 때 컴파일 오류를 수정했습니다.
- System¶
상속된 이벤트 이름이 최대 80 글자를 넘지 않도록 수정했습니다.
이벤트 이름이 없어서 부모 이벤트 이름 뒤에
_#N
을 붙여서 자동 생성할 때, 80 글자를 초과할 경우...
으로 처리됩니다.예) EventExample_#1_#1_#1(생략…)_#1_#1…
- Distribution¶
이제, World 기능을 Redis RPC Backend 설정 에서도 사용할 수 있습니다.
v1.0.0-4236 (2019-08-06)¶
2019-08-06 16:48:39
- Object¶
이제 분산 환경에서 오브젝트에 대한 잠금 업그레이드를 지원합니다.
kReadCopyNoLock
타입으로 오브젝트를 읽을 때, 다른 쓰레드에서kWriteLock
으로 쓴 값이 반영되는 문제를 수정했습니다.엔진에서 이벤트를 처리하는 과정에서 발생하는 타임아웃과 오류에 대한 로그를 보다 명확하게 출력하도록 개선했습니다.
오브젝트 반환을 요청한 이벤트가 타임아웃될 때 크래시 할 수 있는 문제를 수정했습니다.
- System¶
종료처리 시 최대 대기 시간을 60 초에서 20 초로 변경하였습니다.
- Network¶
세션 기능에 대한 로그를 보다 명확하게 남기도록 변경했습니다.
- misc.¶
데디케이티드서버 호스트 에이전트 서비스에
user_data
설정값을 추가했습니다.이제 18.04 bionic 운영체제를 지원합니다.
iFun Engine 1.0.0-4183 이상 버전에서 데디케이티드서버 호스트 이에전트 서비스를 실행할 수 없는 문제를 수정했습니다.
v1.0.0-4177 (2019-07-05)¶
2019-07-05 11:07:35
- System¶
iFun Engien Centos 버전의
ResourceManager::Reload()
함수에서 사용하는 MariadbConnector 구현의 버전문제로 메모리 릭이 발생하는 문제를 수정했습니다.ResourceManager::Reload()
함수가enable_game_data_mysql
를 무시하는 문제를 수정했습니다.
v1.0.0-4165 (2019-07-03)¶
2019-07-03 08:39:25
Warning
Breaking Changes
- 다음 변경사항으로 인해 서버를 다시 빌드해야 합니다.¶
Google Play 플랫폼 인증과 관련한 API 에서 사용하는
GooglePlayGameAuthenticationRequest
와GooglePlayGameAuthenticationResponse
객체에app_id
대신 사용할app_provider_client_id
멤버변수를 추가했습니다.app_provider_client_id
는app_id
와 동일하며 차후 완전히 대체할 예정입니다.
- Service¶
이제 Steam 플랫폼의 사용자 인증 기능을 지원합니다.
사용자가 Steam 에 로그인하고 게임에 접속했는지 엔진을 통해서 검증 할 수 있습니다.
Google Play 플랫폼 인증과 관련한 API 에서 사용하는
GooglePlayGameAuthenticationRequest
와GooglePlayGameAuthenticationResponse
객체에app_id
대신 사용할app_provider_client_id
멤버변수를 추가했습니다.app_provider_client_id
는app_id
와 동일하며 차후 완전히 대체할 예정입니다.
이제 Google Play 플랫폼 인증 요청에 대한 응답은 유저의 Google ID 를 포함합니다.
- Network¶
이제 웹소켓 서버도 SSL 기능을 사용 할 수 있습니다.
AES-128 암호화 알고리즘에 대한 지원을 중단할 예정입니다.
AES-128 알고리즘 대신 다른 알고리즘(chacha20) 사용을 고려해주세요.
WebSocket 트랜스포트를 단독으로 사용할 때에도 연결 닫힘 메시지를 클라이언트로 전송하도록 수정했습니다.
- Object¶
이제 분산 환경에서 사용하는 오브젝트에 대한 락 타입을 업그레이드 할 수 있습니다.
EventProfiler 에
object_upgrade_count
값을 추가했습니다.이벤트 안에서 발생하는 락 타입 업그레이드 횟수의 평균값입니다.
ORM 에서 두 개 이상의 KEY 속성을 정의한 오브젝트를 사용할 수 없던 문제를 수정했습니다.
- System¶
라이센스를 검증하는 코드에서 잘못된 메모리에 접근하는 문제를 수정했습니다.
이벤트 타임아웃이 발생한 이벤트와 Event Tag 가 같더라도 후속 이벤트가 실행될 수 있는 기능을 추가했습니다.
- Database¶
RedisClient 객체의 재연결 기능에 대한 버그를 수정했습니다.
- Framework¶
크래시로 엔진이 종료될 때 로그에 Thread 이름을 출력하도록 개선했습니다.
- misc.¶
funtest 객체가 서버 이동 중 세션 닫힘 핸들러를 호출하지 않도록 수정했습니다.
클라이언트 플러그인 동작과 동일한 환경을 테스트할 수 있도록 더 이상 서버 이동 중에는 세션 닫힘 핸들러를 호출하지 않습니다.
C# 지원 API 에
funtest.RegisterRedirectionHandler()
함수를 추가했습니다.서버에서 해당
funtest.Session
으로 리다이렉션 호출 시 이 콜백을 호출합니다.
C# 코드에 대한 빌드가 항상 Debug 타입으로 동작하는 문제를 수정했습니다.
CMAKE_BUILD_TYPE 을 지정하지 않을 때 빌드 에러가 나는 문제 수정했습니다.
C# 지원 API 중
Billing.ValidateReceiptRequest()
의 콜백이 불릴 때 Request 객체가 해제될 수 있는 문제를 수정했습니다.
v1.0.0-4096 (2019-06-04)¶
2019-06-04 14:39:15
- Network¶
이제 서버에서 관리하는 각각의 funapi 세션 별로 세션 타임아웃을 설정할 수 있습니다.
HandlerRegistry::OverrideSessionTimeout(session, timeout_in_ms)
함수를 유효한 세션에 대해서 사용하면, MANIFEST.json 의SesisonTimeout
속성을 덮어씁니다.
이제부터 세션 타임아웃 값을 0으로 설정할 경우 타임아웃 기능을 비활성화 합니다. (기존에는 타임아웃 0초로 설정하면 바로 타임아웃이 발생.)
- Object¶
Event Profiling 결과 내 특정 항목의 오차를 개선했습니다.
Event Profiling 결과에
존재하지 않는(NULL) 오브젝트에 대한 접근 비율
을 추가했습니다.Event Profiling Summary 에 오브젝트 관련 통계를 추가했습니다.
Slow Event 로그 에 좀더 자세한 정보를 포함하도록 개선했습니다.
- Service¶
AccountManaget::SetLoggedOutGlobal
함수가 특정 상황에서 실패하면 재시도하도록 수정했습니다.Zookeeper 연결이 닫혔거나 재연결을 진행하는 도중에 이 함수를 호출할 경우에 한하여 3초 후 다시 시도합니다.
- System¶
로그 파일을 삭제하지 못하고 실패했을 때, 예외를 처리하여 로그를 출력하도록 개선했습니다.
Event Thread 의 TPS 를 볼 수 있는 funapi/event_thread 카운터를 추가했습니다.
Event Tag 별 Queue 의 길이를 볼 수 있는 funapi/event_tag 카운터를 추가했습니다.
- Management¶
아이펀 디플로이 API 에 다음 기능을 추가했습니다.
환불(C++/C#)
실시간 공지(C++/C#)
미션(C++/C#)
- misc.¶
이제, iFunEngine C# API 에 빠져있던 멀티캐스트 함수들을 사용할 수 있습니다.
void MulticastServer.CreateMulticastChannel(string channel, string token); bool MulticastServer.GetMulticastChannel(string channel, out string token); long MulticastServer.GetMulticastChannelTokenMap(out Dictionary<string, string> tokenMap); void MulticastServer.DisallowToCreateClientsideMulticastChannel();
v1.0.0-4022 (2019-05-08)¶
2019-05-08 16:27:02
Warning
Breaking Changes
이제, Zookeeper 노드를 여러 개 설정하면 샤딩을 지원합니다.
ORM 기능 사용 시, Object ID 또는 Key 를 기준으로 샤드를 구분합니다.
단, 다음 기능들은 첫번째 (0번) 샤드만 사용합니다.
RpcService
AccountManager
World
Object External Lock
이 변경사항을 적용하기 위해서는 모든 서버를 함께 업데이트 해야 합니다.
- Distribution¶
서버 간 RPC 연결이 끊기고 재연결할 때, 크래시 할 수 있는 문제를 수정했습니다.
RPC 콤포넌트의 소켓 상태를 관리하는 코드를 개선했습니다.
RPC 연결 관련 로그 레벨을
WARNING
으로 변경했습니다.서버의 RPC 연결 정보를 1분마다 로그에 출력하도록 했습니다.
잘못된 RPC 응답을 무시하도록 수정하였습니다.
- Network¶
UDP I/O 처리를 전담하는 스레드를 사용할 수 있는 기능을 추가했습니다.
모든 UDP 전송이 실패하는 상태에 빠질 수 있는 문제를 수정했습니다.
- System¶
Event Thread 가
Install()
함수를 모두 실행 한 다음에 시작되도록 수정했습니다.코어 덤프 데이터가 정상적으로 남지 않는 문제를 수정했습니다.
- Framework¶
enable_breakpad
플래그가 정상적으로 동작하지 않는 문제를 수정했습니다.
- Service¶
멀티캐스트 서비스에서 유효하지 않은 포인터를 참조할 수 있는 문제를 수정했습니다.
- misc.¶
funtest::Session
을 재사용 할 때 Assert 로 서버가 종료 할 수 있는 문제를 수정했습니다.funtest::Session
을 사용하면서 UDP, HTTP 세션을 생성할 수 없는 문제를 수정했습니다.funtest
클라이언트가 간헐적으로 리다이렉트 후 응답이 없는 문제를 수정했습니다.
v1.0.0-3986 (2019-04-01)¶
2019-04-01 20:25:06
Important
1.0.0-3986 Stable 버전을 마지막으로 Ubuntu 14.04 (Trusty Tahr) 에 대한 지원을 종료합니다.
Warning
Breaking Changes
- 다음 변경사항으로 인해 서버를 다시 빌드해야 합니다.¶
특수한 UTF-8 문자가
Key
에 포함되어 있을 때,FetchByXXX()
로 불러올 수 없는 문제를 수정했습니다.Session 콤포넌트에 다음 함수를 추가했습니다.
GetPingSamplingInterval()
:ping_sampling_interval
설정을 조회.GetPingTimeout()
:ping_timeout
설정을 조회.
- Object¶
특수한 UTF-8 문자가
Key
에 포함되어 있을 때,FetchByXXX()
로 불러올 수 없는 문제를 수정했습니다.ORM Object 를
Key
로 가져 올 때, 락을 획득 할 수 없는 경우 락을 휙득하기 위해 경합하는 로그를 출력하지 않는 문제를 수정했습니다.
ORM Object 를
Key
로 가져 올 때, 락을 획득 할 수 없는 경우에 필요하지 않는 Zookeeper 요청 및 Query 를 수행하는 것을 제거했습니다.
- Utility¶
이제 base64 인코딩/디코딩 함수를 사용할 수 있습니다.
변환 함수를 사용하기 위해서는
funapi/utility/base64_helper.h
헤더 파일을 추가해야 합니다.
- Network¶
Session 콤포넌트에 다음 함수를 추가했습니다.
GetPingSamplingInterval()
:ping_sampling_interval
설정을 조회.GetPingTimeout()
:ping_timeout
설정을 조회.
- misc.¶
이제 C# 이벤트 내에서 Unhandled Exception 이 발생했을 때 실행하는 Handler 를 등록할 수 있습니다.
Event.SetUnhandledExceptionHandler(...)
: 이 함수로 등록된 핸들러로 이벤트 실행 중의 Unhandled Exception 을 처리할 수 있습니다. 이 함수로 Exception 을 수신하면 해당 이벤트는 Abort 처리됩니다.
v1.0.0-3948 (2019-03-08)¶
2019-03-08 15:17:09
Important
Ubuntu 14.04 (Trusy Tahr) 에 대한 iFun 엔진 업데이트가 2019년 3월부로 종료되고, 18.04 (Bionic Beaver) 를 지원할 예정입니다.
Important
2019년 3월 7일부터 Google+ 와 관련된 모든 API 를 사용할 수 없습니다. 따라서, 본 버전부터 아이펀 엔진의 Google+ 관련 API 들은 사실상 동작하지 않으며 추후 완전히 삭제할 예정입니다. 계정 데이터 이전과 관련해 질문이 있거나 도움이 필요한 경우 iFun Engine Q&A 게시판 에 문의해 주시기 바랍니다.
Warning
Breaking Changes
- 다음 변경사항으로 인해 서버를 클린빌드 해야 합니다.¶
Mariadb Connector 에 연결에 장애가 발생했다고 판단할 때에 호출하는 핸들러를 추가했습니다.
- 데디케이티드 서버 호스트 매니저(이하 데디서버 호스트 매니저) 의 HTTP 메시지¶
- 규격을 변경했습니다.¶
확장성을 향상시키기 위한 방향으로 메시지 규격을 변경하였으며, 새 엔진 버전은 기존 데디서버 호스트 매니저와의 하위호환을 유지하지만, 추후 지원하지 않을 수 있기 때문에 데디서버 호스트 매니저와 엔진을 함께 업데이트 할 것을 권장합니다.
- 엔진 콤포넌트 중 MaintenanceService 가 기본적으로 비활성화 되도록¶
- 수정되었습니다.¶
MaintenanceService 를 사용하는 사용자께서는 MANIFEST 의존성에 MaintenanceService 를 추가 해 주시기 바랍니다.
- 리더보드의 점수를 삭제하는 API 인 DeleteScore 의 콜백 함수 인자를¶
- 수정했습니다.¶
리더보드의 점수를 삭제한 후 호출하는 ScoreDeletionResponseaHandler 콜백의 error 변수의 값이 의도와 반대로 전달되는 문제를 수정했습니다.
이제 리더보드 점수가 정상적으로 삭제되면 error 변수는
false
를 반환합니다.
- Service¶
AccountManager 콤포넌트가 Redis RPC Backend 설정에서 동작할 때, 주기적으로 키를 갱신하는 동작을 비활성화하는 플래그를 추가했습니다.
MANIFEST.json 파일의 RPC 항목 안에
rpc_redis_disable_key_refresh
플래그를true
로 설정하면 AccountManager 관련 키 갱신 기능을 비활성화합니다(기본 값: false).불필요한 동작이기 때문에 추후 완전히 제거할 예정입니다.
스팟 인스턴스 가격 조회 중 크래시할 수 있는 문제를 수정했습니다.
데디케이티드 서버 호스트 매니저(이하 데디서버 호스트 매니저) 의 HTTP 메시지 규격을 변경했습니다.
확장성을 향상시키기 위한 방향으로 메시지 규격을 변경하였으며, 새 엔진 버전은 기존 데디서버 호스트 매니저와의 하위호환을 유지하지만, 추후 지원하지 않을 수 있기 때문에 데디서버 호스트 매니저와 엔진을 함께 업데이트 할 것을 권장합니다.
데디케이티드 서버 콤포포넌트의 커스텀 콜백 호출이 매치 ID 로 직렬화되지 않는 문제를 수정했습니다.
이제 매치 ID 로 직렬화한 이벤트 위에서 콜백을 실행합니다.
이벤트 타임아웃 시 멀티캐스트 서버에 등록한 세션을 처리하지 않던 문제를 수정했습니다.
Google+ API 를 지원하는 모든 기능을 사용할 수 없도록 수정했습니다.
- Object¶
생성 중인 ORM 오브젝트를 kReadLock 으로 가져 온 후 롤백하면서 충돌할 수 있는 문제를 수정했습니다.
ORM 기능에서 DB 연결에 장애가 발생하며 설정에 따라 점검 모드로 전환 또는 서버 종료 가 되도록 기능을 추가했습니다.
DB 연결에 장애가 발생했는지 판단하기 위해서
db_connection_failure_threshold_time_in_sec
플래그를 추가했습니다.기본값은 0이며, 기존과 동일하게 연결될 때까지 재시도합니다.
이 플래그 설정이 0 이상이면 설정한 시간을 넘어서는 동안 DB 연결이 복구되지 않으면 다음과 같이 동작합니다.
MaintenanceService 콤포넌트가 있으면 점검 모드로 전환합니다.
그렇지 않을 경우 서버를 강제 종료합니다. 기본 값은 0 이며 기존과 동일하게 작동합니다.
ORM 에서 캐시에 데이터를 올릴 때, 낮은 확률로 해시값이 충돌할 수 있는 문제를 수정했습니다.
게임 서버 시작 시, ORM 데이터베이스 스키마 검증 속도를 개선했습니다.
검사에 필요한 여러 쿼리들을 한 번에 실행하게 변경했습니다.
게임 서버 시작 시, DB 스킴에 대한 전체 검사를 생략하는 기능을 추가했습니다.
use_db_schema_simple_validation
을true
로 설정하면 DB 스킴을 검사해야 할 때, 전체 Table 및 Procedure 에 대한 검사는 생략합니다. 만약, DB 스킴을 업데이트 해야 하는 상황에서 이 플래그가 설정되어 있다면, 오류 메시지를 출력하고 서버는 종료합니다.
- Network¶
HTTP Transport 및 ApiService 를 사용할 때, 바디 길이가 http_max_body_bytes 설정보다 긴 경우 HTTP 응답코드 500 을 보내는 대신 413 (Payload Too Large) 을 보내도록 변경했습니다.
HTTP status code enum 값의 오타를 수정했습니다.
kNonAuthoriativeInformation -> kNonAuthori
t
ativeInformation
새로운 SSL 활성화 플래그를 추가했습니다.
use_ssl_on_{protocol}_{encoding}
대신{protocol}_use_ssl
을 사용해주시기 바랍니다.
엔진 콤포넌트 중 MaintenanceService 가 기본적으로 비활성화 되도록
수정되었습니다.
MaintenanceService 를 사용하는 사용자께서는 MANIFEST 의존성에 MaintenanceService 를 추가 해 주시기 바랍니다.
HTTP 로 등록되지 않은 메시지 타입을 수신할 때 Assert 에 걸려 충돌하는 문제를 수정했습니다.
서버를 종료할 때,
IoService::Uninstall()
에서 멈출 수 있는 문제를 수정했습니다.데디케이티드 서버 오케스트레이터 콤포넌트에서 호스트 매니저와의 연결에 실패했을 때 더 자세한 로그를 출력하도록 수정했습니다.
- Management¶
C# 개발 환경에서 ApiService 의 API 로 보내는 데이터는 UTF-8 문자열만 허용하도록 변경했습니다.
ApiService 포트로 바이너리 데이터를 수신하면 서버가 크래시하는 대신 415 (Unsupported Media Type) 코드를 반환합니다.
서버가 실행 중인 상태에서 점검 모드로 전활 할 수 있는
StartMaintenance()
함수가 추가되었습니다.이 함수는
MaintenanceService
콤포넌트가 활성화 되어있어야 작동합니다.
ApiService 가 받은 body 데이터를 로그에 출력할 수 있도록 로그 레벨을 조정했습니다.
api_service_logging_level
설정의 의미가 다음과 같이 변경됐습니다.0: 오류에 한해서만 로그를 출력합니다.
1: 기존 2 와 같습니다. body 를 제외하고 출력합니다.
2: 1 의 내용과 body 를 함께 출력합니다. UTF-8 문자열이 아닌 경우 앞 256 bytes 를 HEX 문자열로 출력합니다.
- System¶
세션 닫힘 핸들러를 호출할 수 없거나, 세션 만료 핸들러가 NULL 세션을 받는 문제를 수정했습니다.
크래시 덤프에 덤프 생성을 위한 스택 프레임이 보여지는 것을 최소화했습니다.
크래시 발생 시
terminate called recursively
메시지가 대량으로 출력되는 문제를 수정했습니다.이제 이벤트 타임아웃 핸들러를 두 개 이상 등록할 수 있습니다.
이벤트 타임아웃 발생 시
Event::RegisterTimeoutHandler()
에 등록한 핸들러들을 등록한 순서대로 호출합니다.
이벤트 이름을 가진 이벤트 내에서
Event::Invoke()
를 호출하면 이벤트 이름을 상속하도록 수정했습니다.이벤트 이름이 있는 경우에만 이름을 상속합니다.
새로 생성된 이벤트의 이름은
<이벤트이름>_#<상속 횟수>
형식을 따릅니다.상속 횟수는 1부터 시작합니다.
- Leaderboard¶
리더보드의 점수를 삭제하는 API 인 DeleteScore 의 콜백 함수 인자를 수정했습니다.
리더보드의 점수를 삭제한 후 호출하는 ScoreDeletionResponseaHandler 콜백의 error 변수의 값이 의도와 반대로 전달되는 문제를 수정했습니다.
이제 리더보드 점수가 정상적으로 삭제되면 error 변수는
false
를 반환합니다.
MANIFEST 에 ‘leaderboard_implicit_start’ 설정을 추가했습니다.
MANIFEST.json 파일의 LeaderboardClient 항목에 위의 설정을 추가한 후
true
로 설정하면 서버 시작 시에 리더보드에 연결 할 수 없더라도 서버가 동작합니다.이후 엔진은 주기적으로 리더보드 연결을 시도하며 연결하기 전에 호출하는 리더보드 함수들은 모두 실패를 반환합니다.
- Database¶
Mariadb Connector 가 요청한 쿼리가 일정 시간 이상 경과해도 끝나지 않으면 로그를 출력하도록 추가했습니다.
Mariadb Connector 의
Create()
함수에slow_query_logging_time_in_ms
를 인자로 전달할 수 있습니다.기본값은 5000 ms 입니다.
Mariadb Connector 에 연결에 장애가 발생했다고 판단할 때에 호출하는 핸들러를 추가했습니다.
Mariadb Connector 를 사용할 경우 서버를 다시 빌드해야 합니다.
Mariadb::Create()
의default
인자의 값에 해당하는 상수 정의가 추가되 었습니다.kDefaultConnectionCharset, kDefaultAutoRetryOnDeadlock, kDefaultClientFlags,
kDefaultSlowQueryLoggingTime, `kDefaultConnectionFailureHandler
서버 종료가 1분가량 지연될 수 있는 문제를 수정했습니다.
- Distribution¶
Redis 를 RPC 백엔드로 사용하는 환경에서 AccountManager 의 키 관리 방식을 개선했습니다.
오브젝트 락 해제 메커니즘과 동일하게, AccountManager 콤포넌트가 등록한 계정 정보 키를 미처 삭제하지 못하고 서버를 종료한 경우 마스터가 이를 찾아 삭제합니다.
확인 주기는
rpc_redis_session_timeout_in_seconds (기본 값: 10초)
설정을 따릅니다.
네트워크에 장애가 발생했을 때, RPC 연결의 안정성 개선
RPC 연결이 완전히 정리되지 않은 상태에서 재연결을 수행할 때 무시하는 문제 를 수정했습니다.
- Billing¶
biller_implicit_start
설정을 추가했습니다.MANIFEST.json 파일 내
BillingClient
항목에 이 설정을 추가하고true
로 설정하면 빌러 연결 없이 엔진을 시작할 수 있습니다.이후 엔진은 주기적으로 Biller 서버에 연결을 시도하며 연결하기 전에 호출하는 빌러 함수들은 모두 실패를 반환합니다.
- Framework¶
세션 연결 및 메시지 전송과 관련한 로그 메시지 내용을 개선했습니다.
이제 언어 설정에 따라 한국어로 된 로그 메시지를 볼 수 있습니다.
크래시할 때 덤프 파일이 안 남을 수 있는 문제를 수정했습니다.
이벤트 처리 중 크래시하여 종료 될 때 이벤트 이름이 로그에 출력되지 않을 수 있는 문제를 수정했습니다.
- misc.¶
C# ApiService.RegisterHandler 함수의 URI 인자에 대한 검사를 개선했습니다.
URI 인자 마지막에 / 가 없는 경우 추가하도록 변경했습니다.
이 수정으로 / 이 없는 API URI 를 등록할 경우 API 를 찾지 못하는 문제를 해결합니다.
데디서버 호스트 매니저가 출력하는 로그 메시지를 개선했습니다.
더 많은 로그를 출력합니다.
verbose
플래그를 활성화하면 상세 내역까지 출력합니다.
데디서버 호스트 매니저 기동할 때, 초기화에 실패하면 초기화 시 생성했던 프로세스를 종료합니다.
서버가 크래시하여 종료되면 GDB 로 콜스택을 확인 할 수 있는 명령어를 출력합니다.
정상 종료(SIGTERM, SIGQUIT 등) 일 때도 크래시로 표시되는 문제를 수정했습니다.
v1.0.0-3837 (2019-02-11)¶
2019-02-11 16:26:17
- Service¶
Google+ API 사용 시 에러 로그를 출력합니다.
2019년 3월 7일에 Google+ 와 관련된 모든 API 가 삭제됩니다. 만약 게임 서버에 Google+ 관련 인증 로직이나 코드가 있다면 3월 7일 전까지 모두 제거해주시기 바랍니다. 계정 데이터 이전과 관련해 질문이 있거나 도움이 필요한 경우 iFun Engine Q&A 게시판 에 문의해 주시기 바랍니다.
- Network¶
Session Reliability 기능 사용 시 간혈적으로 세션을 종료하는 문제를 수정했습니다.
experimental 3782 이후 버전부터 발생할 수 있습니다.
v1.0.0-3820 (2019-02-07)¶
2019-02-07 13:52:36
Important
Ubuntu 14.04 (Trusy Tahr) 에 대한 iFun 엔진 업데이트가 2019년 3월부로 종료되고, 18.04 (Bionic Beaver) 를 지원할 예정입니다.
- Distribution¶
레디스 기반 RPC 서비스를 사용하는 경우, ORM 관련 Key 들을 주기적으로 갱신하는 기능을 끌 수 있는 설정을 추가했습니다.
ORM 관련 Key 들을 주기적으로 갱신하는 기능을 끄기 위해서는 MANIFEST.json 파일의 RPC 항목의 하위 설정인
rpc_redis_disable_key_refresh
플래그를 true 로 설정하면 됩니다. (기본값: false)ORM 관련 Key 갱신 기능은
cache_expiration_in_ms
설정에 설정된 주기로 동작하며, 더 이상 엔진의 동작에 아무런 영향을 주지 않기 때문에 가까운 미래에 삭제 할 예정입니다.이 기능을 비활성화하면 일정 주기마다 발생하는 부하를 크게 줄일 수 있습니다.
레디스 기반 RPC 서비스를 사용하면서 전체 Key 를 삭제할 경우 멈추는 문제 수정
레디스의 flushall 명령을 수행했을 때, 의도한 대로 종료하지 않는 문제를 수정했습니다.
레디스 기반 RPC 서비스를 사용하는 경우, 서버를 종료할 때 키가 추가될 수 있는 문제 수정
- Network¶
닫힌 세션으로 클라이언트를 리다이렉션하는 경우, 충돌하지 않고 경고를 출력하도록 수정했습니다.
use_session_reliability
기능을 활성화 한 경우 충돌했으나, 더 이상 충돌하지 않습니다.
Session 및 Transport 객체 사용과 관련한 로그를 시스템 언어 설정에 따라 출력하고, 내용을 알기 쉽게 수정했습니다.
Transport 연결 및 옵션과 관련한 로그를 시스템 언어 설정에 따라 출력하고, 내용을 알기 쉽게 수정했습니다.
HttpClient 객체 사용과 관련한 로그를 시스템 언어 설정에 따라 출력하고, 내용을 알기 쉽게 수정했습니다.
소켓 사용과 관련한 로그를 시스템 언어 설정에 따라 출력하고, 내용을 알기 쉽게 수정했습니다.
- System¶
Event 와 관련한 로그를 시스템 언어 설정에 따라 출력하고, 내용을 알기 쉽게 수정했습니다.
- misc.¶
로그 디렉터리가 있는 파티션의 저장 공간이 없으면, 서버 실행에 실패하도록 수정했습니다.
v1.0.0-3805 (2019-01-24)¶
2019-01-24 13:41:02
Warning
Breaking Changes
- CentOS 7 패키지 저장소 업데이트 이후에는 반드시 이 엔진 버전을 사용해야 합니다.¶
CentOS 7 패키지 저장소(YUM) 업데이트 시 아이펀 엔진에서 사용하는 패키지와 충돌하는 문제를 수정했습니다.
- misc.¶
CentOS 7 패키지 저장소(YUM) 업데이트 시 아이펀 엔진에서 사용하는 패키지와 충돌하는 문제를 수정했습니다.
이 문제는 CentOS 7 버전에서만 발생하며 우분투를 사용 중이시면 무시해도 됩니다.
만약 엔진 버전을 업데이트할 수 없는 상황이라면 다음 명령어로 충돌하는 패키지들의 업데이트를 막을 수 있습니다.
$ sudo yum update –exclude=libwebsockets,libwebsockets-devel,libsodium
또는 /etc/yum.conf 파일을 열어 다음 구문을 추가해주셔도 됩니다.
exclude=libwebsockets-* libsodium
이미 저장소 업데이트를 하여 문제가 발생하는 경우는 iFun Engine Q&A 게시판 에 문의해 주시기 바랍니다.
v1.0.0-3790 (2019-01-09)¶
2019-01-08 17:05:48
Important
Ubuntu 14.04 (Trusy Tahr) 에 대한 iFun 엔진 업데이트가 2019년 3월부로 종료되고, 18.04 (Bionic Beaver) 를 지원할 예정입니다.
Warning
Breaking Changes
- 다음의 변경 사항은 클라이언트 플러그인도 함께 업데이트 해야합니다.¶
AccountManager 와 Redict 기능에서 웹소켓을 지원하도록 수정하였습니다.
- 다음의 변경 사항을 적용하기 위해서 모든 엔진 패키지를 업데이트하고,¶
- 프로젝트를 다시 빌드해야 합니다.¶
ORM 에서 복합키를 정의할 때, 키들의 나열 순서가 알파벳 역순이면 DB 생성에 실패하는 문제를 수정하기 위해 오브젝트 모델 핑거프린트를 계산하는 방식을 변경했습니다.
RPC 백엔드로 Redis 를 사용하는 경우, 오브젝트 관리 매커니즘을 변경했습니다.
변경 전: 서버들은 자신의 오브젝트 락을 유지하기 위해 30초마다 Redis 명령을 전송. (소유한 서버가 정리)
변경 후: Redis RPC 를 사용하는 서버들 중 Master 를 선정하고, 이 서버는 주기적으로 연결이 끊어진 서버를 찾아서 그 서버가 소유하는 모든 오브젝트 락을 해제. (다른 서버가 정리)
연결이 끊어진 서버를 찾는 주기는 ‘rpc_redis_session_timeout_in_seconds(기본 값: 10초)’ 값으로 설정합니다.
- Distribution¶
RPC 메시지를 보낼 때, 직렬화 태그를 지정할 수 있는 기능을 추가했습니다.
이전 버전에서 모든 RPC 메시지는 하나의 흐름으로 직렬화 되었으나 이번 수정으로 메시지를 보낼 때 설정한 태그를 기준으로 여러 흐름으로 직렬화 할 수 있게 됐습니다.
RPC 백엔드로 Redis 를 사용하는 경우, 오브젝트 관리 매커니즘을 변경했습니다.
변경 전: 서버들은 자신의 오브젝트 락을 유지하기 위해 30초마다 Redis 명령을 전송. (소유한 서버가 정리)
변경 후: Redis RPC 서버들 중 Master 를 선정하고, 이 서버는 주기적으로 연결이 끊어진 서버를 찾아서 그 서버가 소유하는 모든 오브젝트 락을 해제. (다른 서버가 정리)
연결이 끊어진 서버를 찾는 주기는 ‘rpc_redis_session_timeout_in_seconds(기본 값: 10초)’ 값으로 설정합니다.
- Network¶
서버에서 WebSocket 트랜스포트를 사용할 때, ife1 / chacha20 / AES-128 알고리즘을 사용할 수 있도록 수정하였습니다.
Unity 에서 WebGL 플랫폼을 사용하는 클라이언트를 지원하기 위해서 CORS (Cross Origin Resource Sharing) 규격을 지원하기 위한 설정을 추가했습니다.
HTTP 교차 출처 자원 공유 (CORS) 를 참고하시기 바랍니다.
메시지 압축 기능을 사용할 경우 서버 시작 시 관련 로그를 출력하도록 변경했습니다.
아이펀 엔진에서 세션을 닫을 때 간헐적으로 마지막 메시지를 누락하는 문제를 수정하였습니다.
세션 메시지 핸들러 후킹 내용 중, Pre 메시지 후킹 함수가 event 실행 전에 호출하도록 수정했습니다.
Warning
이번 수정으로 내부 구현이 바뀌어 pre 메시지 후킹 함수 내에서 더 이상 ORM 을 직접 호출할 수 없습니다. Event::Invoke 를 사용하여 ORM을 호출하는 코드를 이벤트 내부에서 실행 될 수 있도록 변경해야 합니다.
- Database¶
이제 Database 와 연결이 유휴상태(IDLE) 일 때, 끊어질 때까지 기다리지 않고 연결을 유지하기 위해서 다음과 같은 동작을 수행합니다.
마지막으로 쿼리를 실행한 지 30초가 지난 경우
서버로 간단한 쿼리를 전송해 연결이 끊어지지 않게 합니다.
use_db_char_type_for_object_id 를 설정했을 때, Object::FetchRandomly() 함수가 정상적으로 동작하지 않는 문제를 수정했습니다.
RedisClient 객체도 Redis Sentinel 을 지원합니다.
Redis 객체는 MANIFEST 의 Redis 설정에 따라서 Sentinel 을 지원하지만, RedisClient 객체는 객체 생성 시에 인자로 설정합니다.
아이펀 엔진의 RPC 백엔드로 zookeeper 대신 redis 를 사용하는 경우, 내부적으로는 RedisClient 객체를 사용하기 때문에 이번 수정으로 Sentinel 을 지원합니다.
- Object¶
- ORM 에서 복합키를 정의할 때, 키들의 나열 순서가 알파벳 역순이면 DB
생성에 실패하는 문제를 수정하기 위해 오브젝트 모델 핑거프린트를 계산하는 방식을 변경했습니다.
- System¶
AccountManager 와 Redis 기능에서 웹소켓을 지원하도록 수정하였습니다.
언어 설정에 따라 한국어로 된 메시지를 볼 수 있도록 부분적으로 수정을 진행하고 있습니다.
- misc.¶
클라이언트가 접속할 데디케이티드 서버의 IP를 지정할 수 있도록 수정했습니다.
이제 호스트 매니저의 funapi-dedicated-server-host.flag 파일에 game_ip 를 설정할 수 있습니다.
데디케이티드 서버 호스트 매니저에서 Redis 인증 정보를 설정할 수 있습니다.
v1.0.0-3764 (2018-12-05)¶
2018-12-05 06:31:56
Important
Ubuntu 14.04 (Trusy Tahr) 에 대한 iFun 엔진 업데이트가 2019년 3월부로 종료되고, 18.04 (Bionic Beaver) 를 지원할 예정입니다.
Warning
Breaking Changes
- 다음 변경 사항으로 인해 프로젝트를 다시 빌드해야 합니다.¶
funtest 모듈을 사용해서 TCP SSL 연결을 맺을 수 있습니다.
funtest::ConnectTcp() 함수의 인자로 use_ssl(기본값:false) 파라미터가 추가되었습니다.
funtest 모듈을 사용하는 프로젝트는 프로젝트를 다시 빌드해야 합니다.
- Billing¶
funapi-biller 에 요청을 보내고 일정 시간동안 응답이 없으면 타임아웃 처리하도록 수정했습니다.
이제 funapi-biller 가 정상적으로 응답하지 않는 상황에서 응답을 무한정 기다리지 않습니다.
MANIFEST.json
파일 안의BillingClient
항목에서biller_request_timeout_seconds(기본 값: 30)
을 통해 값을 변경할 수 있습니다.
funapi-biller 요청과 관련한 오류 메시지를 업데이트했습니다.
- Leaderboard¶
funapi-leaderboard 에 요청을 보내고 일정 시간동안 응답이 없으면 타임아웃 처리하도록 수정했습니다.
이제 funapi-leaderboard 가 정상적으로 응답하지 않는 상황에서 응답을 무한정 기다리지 않습니다.
MANIFEST.json
파일 안의LeaderboardClient
항목에서leaderboard_request_timeout_seconds(기본 값: 30)
을 통해 값을 변경할 수 있습니다.
funapi-leaderboard 요청과 관련한 오류 메시지를 업데이트했습니다.
- Database¶
RedisClient 객체의 동기 함수 사용 시 특정 상황에서 이벤트 전체가 멈출 수 있는 버그를 수정했습니다.
이 문제는 invoke_as_event 옵션을 true 로 생성한 RedisClient 객체에 대해서 여러 이벤트에서 동시에 동기 함수를 호출 할 때 간헐적으로 발생합니다.
DB 연결 시, DB 서버에서 Too many connections 오류를 받으면 크래시 할 수 있는 문제를 수정했습니다.
DB 에서 에러가 발생했지만 DB 클라이언트 라이브러리의 처리를 거치면서 오류 정보를 얻을 수 없는 경우 알 수 없는 오류 로그를 출력하도록 수정했습니다.
- Service¶
리더보드를 사용하도록 설정하지 않은 상태에서 관련 기능을 사용하면 WARNING 로그를 출력하도록 수정했습니다.
인증 서비스를 테스트 모드로 사용 할 때 출력되는 로그를 알기 쉽게 개선했습니다.
- Network¶
서버에서 TCP 와 HTTP 프로토콜을 지원하는 경우, 서버 시작 시에 SSL 옵션의 활성화 여부를 출력하도록 수정했습니다.
서버 시작 시, TCP, UDP, HTTP 각각에 대해서 BIND할 네트워크 인터페이스를 지정할 수 있게 되었습니다.
이제 TCP와 UDP 가 포트 뿐만 아니라 분리된 네트워크 인터페이스 위에서 동작하도록 설정할 수 있습니다.
- Dedicated Server Manager¶
AWS 의 스팟 인스턴스를 사용하는 경우, 인스턴스 당 이용 요금의 상한 금액을 지정할 수 있습니다.
스팟 인스턴스는 AWS 에 의해서 수시로 가격이 변하며, 고정 요금이 책정되는 온디맨드 인스턴스의 요금을 넘어 설 수 없습니다. 그러나, 온디맨드 인스턴스 요금 보다 낮은 요금에서 더 이상 호스트를 생성하고 싶지 않을 때에 유용할 것입니다.
스팟 인스턴스의 요금이 장기간 높은 가격을 유지하는 경우 가용 호스트가 부족할 수 있으니 주의하시기 바랍니다.
- misc.¶
이제 호스트의 언어를 한글로 설정하면, 에러 메시지를 한글로 볼 수 있습니다.
기능 별로 한글로 출력되지 않는 부분이 남아 있습니다. 앞으로 지속적으로 추가될 예정입니다.
C# 프로젝트에서 flavor 를 설정하고 생성한 데비안(deb) 패키지를 설치할 수 없는 문제를 수정했습니다.
v1.0.0-3686 (2018-11-02)¶
2018-11-02 11:14:56
- Framework¶
JSON 해석할 때 UTF-8 BOM 무시하게 하는 옵션 추가
fun::Json::FromStringWithComments
,FromStreamWithComments
는 이제 지원을 중단(deprecated)했습니다.fun::Json::FromString
,fun::Json::FromStream
에kAllowComment
옵션을 추가하면 기존과 동일하게 사용할 수 있습니다.
- Time¶
WallClock::FromTimestring() 함수 동작을 개선했습니다.
파싱 값을 저장할 변수가 NULL 인 경우 적절한 에러 메시지를 출력합니다.
v1.0.0-3624 (2018-10-10)¶
2018-10-10 09:53:38
- Network¶
서버 시작과 관련된 로그 규칙 수정
HttpServer, HttpSocket 에서 Undefined Behavior 가 발생하는 문제 수정
- Service¶
AccountManager 에서 RedirectClient 시 서버의 rpc tags 도 같이 반환하게 수정
스팟 인스턴스 기능 추가
- System¶
AWS 환경에서 IPv4 주소 얻을 때 호스트 이름도 같이 얻게 수정
- misc.¶
funtest 압축 기능 추가
이제 웹소켓 프로토콜을 funtest에서 사용할 수 있습니다.
이제 C#에서 InstallJsonMessageChecker() 함수를 사용할 수 있습니다.
이제 C#에서 InstallProtobufMessageChecker() 함수를 사용할 수 있습니다.
v1.0.0-3579 (2018-09-18)¶
2018-09-18 06:36:47
- Service¶
3553 stable에서 빌드한 클라이언트 dll 사용 시 에러가 발생하는 문제 수정
v1.0.0-3553 (2018-09-05)¶
2018-09-05 10:55:09
- Object¶
ORM: 지연 업데이트 기능 사용 시 맵 요소 생성, 삭제가 지연 반영되는 문제 수정
ORM: 지연 업데이트 기능 사용 시 배열 요소 생성, 삭제가 지연 반영되는 문제 수정
- Distribution¶
레디스 기반 분산 환경에서 키 삭제 시 서버가 멈출 수 있는 버그 수정
- Network¶
session reliability 를 사용할 때 send queue threshold 를 수정할 수 있도록 변경
- misc.¶
funtest C#: 정수형 메시지 타입 핸들러 추가
funtest C#: 정수형 메시지 타입
SendMessage
추가
v1.0.0-3468 (2018-08-01)¶
2018-08-01 14:18:46
Warning
Breaking Changes
- 다음의 변경 사항으로 인해 연결되는 모든 서버의 엔진 업데이트가 필요합니다.¶
RPC: 서버간 연결 관련 처리 개선.
- 다음의 변경 사항으로 인해 서버를 다시 빌드해야 합니다.¶
RedisClient: Create() 할 때 database 선택할 수 있도록 수정.
Maraidb Connector 에 Client Flags 를 설정할 수 있게 수정
영수증 검증 시 product 구매 정보가 없는 경우에 대한 에러코드 추가
영수증 검증 시 트랜잭션 id를 가져올 수 있도록 추가 인터페이스 제공
ArrayRef에 IList<T>를 지원 인터페이스 추가(C#)
- 다음의 변경으로 Custom API 를 사용하는 경우 다시 빌드해야 합니다.¶
아이펀 디플로이의 드랍다운 리스트 기능 사용 가능하게 수정
- 다음의 변경으로 iFun Biller Stable 1.0.0-2564 버전 이상으로 업데이트가 필요할 수 있습니다.¶
영수증 검증 시 트랜잭션 id를 가져올 수 있도록 추가 인터페이스 제공
- 다음의 변경으로 DSM 기능 이용 시 아래 작업이 필요합니다.¶
데디케이티드 서버 매니저
콤포넌트에서image_id
를 변경했을 때 인스턴스들을 식별하지 못하는 문제가 수정되었습니다.
- 다음의 변경으로 코드 수정이 필요할 수 있습니다.¶
ProgressCallback 에 JSON match_context 인자가 추가
ProgressCallback의 MatchContext 정보가 삭제되고 새로운 콜백(ProgressCallback2)이 추가됐습니다.
MatchContext를 계속 사용하려면 ProgressCallback2의 Match 정보를 사용하면 됩니다.
UpdateMatchPlayerContext C++ 함수가 추가되었습니다.
이 함수는 매치메이킹 대기열에 있는 플레이어의 컨텍스트(Json)를 변경할 때 사용합니다.
TStore Interface를 OneStore 인터페이스로 변경
기존의 TStore 인터페이스는 deprecated 처리되었습니다. MakeTStoreReceipt 함수를 MakeOneStoreReceipt 함수로 변경하셔야 합니다.
- Service¶
World 기능 추가
World 범위 검색 알고리즘 개선
WorldManager::Create() 함수의 zone 인자를 Json 에서 ZoneVector 로 변경
WorldManager::Create() 함수에 index_block_length 인자 추가
World Channel 지원
world 에서 distance 대신 distance_square 를 받는 함수들 추가.
World::Object 에 mutex 락 추가
World::Object 의 ID 를 생성자의 인자로 받아 임의로 할당할 수 있도록 수정
World::InsertObject() 가 ID 가 중복될 때 Assert 대신 0 을 반환하도록 수정
World::Object 가 Point 뿐만 아니라 Sphere 도 될 수 있도록 수정
World 의 모든 Object 를 가져오는 World::GetAllObject() 추가
World::Find*2() 제거 및 FindOption 을 받아 동일한 처리를 대신하도록 수정
World 의 Find*() 의 거리 계산 시 Sphere 의 중심을 기준으로 하는 옵션 추가
World::Find*(), World::Broadcast() 함수들이 기준 좌표 대신 Object ID 를 받을 수 있는 기능 추가
World 의 Find*() 에 정렬, 범위 검색 옵션 추가
World::Broadcast() 함수 인자에 FindOption 추가
World::FindObject() 가 Filter 함수를 받을 수 있도록 개선
World::FindObject() 를 위한 Type Filter 추가
World 내의 특정 Type Object 유무를 통지 받을 수 있는 기능 추가
World::MakeRectangleFilter() 추가
World::MakeCircularSectorFilter() 추가
World 의 boundary 검색 시 option 에 지정된 수 보다 더 많이 검색되는 버그 수정
World::InsertStaticObject, World::FindStaticObject 추가
World::FindObject() 에서 distances 인자가 NULL 일 때 Filter 를 쓰면 크래시하는 버그 수정
WorldManager::Create/Get/FindServer 함수의 channel 인자 위치 변경
다른 서버와 공유하지 않는 World 지원
World 삭제 기능 추가
World 를 MANIFEST 에 기술하여 생성할 때 Channel 과 Local 여부를 설정할 수 있게 수정
World::MonitorTypeExistence() 버그 수정
World::GetName() 추가
World 사각형, 부채꼴 내장 필터가 입력 높이가 음수이면 무한대로 처리하도록 수정
World 사각형, 부채꼴 필터의 무한대 높이 처리의 잘못된 Assert 제거
DSM: OAuth 토큰 획득에 실패하면 콜백 오류 처리하게 수정
Matchmaking: ProgressCallback 에 JSON match_context 인자 추가.
World 부채꼴 필터의 각도 계산 오류 수정
World 의 부채꼴 필터 버그 수정
월드에서 부채꼴 필터가 구체를 검색할 수 있도록 추가
FindObject에서 FindOption을 사용 시 Z 축을 무시하는 옵션 추가
World 사각형 필터에 구체 검사 추가
World Object가 구체인지 검사하는 함수와 반지름을 얻는 함수 추가
RPC Redis backend 일 때 간헐적으로 서버 종료 안되는 문제 수정.
DSM 에서 JWT 토큰 확인할 수 있는 콜백 함수 추가
TStore Interface를 OneStore 인터페이스로 변경
World에서 MoveObject, MoveObjectTo가 bool을 반환하도록 수정
World 내의 모든 세션에게 메시지를 보내는 기능 추가
World GetAllObject가 Type으로 필터할 수 있는 기능 추가
World에서 삭제된 오브젝트를 다시 삭제할 때 ASSERT 제거
DSM Region별 인스턴스 통계 API 추가
DSM Region별 서버 사용량 평균, 표준편차 API 추가
DSM에서 생성/종료된 EC2 인스턴스 수를 가져올 수 있는 API 추가
DSM 퍼포먼스 카운터 API에서 JWT 인증을 지원하도록 변경
DSM 인스턴스 버전 태깅 기능 추가
DSM에서 실행 중인 EC2 호스트 수가 1개로 고정되는 문제 수정
DSM 호스트 버전이 명시된 경우 최신 버전만 사용하도록 변경
DSM 인스턴스 버전이 명시된 경우 확장시 항상 최신 버전을 사용하도록 변경
리셋 시간 전에 리더보드를 조회할 경우 assert가 발생할 수 있는 문제 수정
리더보드 최초 리셋 전에 스케줄을 조회할 때 잘못된 정보를 받는 문제 수정
2663 experimental에서 DSM 호스트 버전을 인식하지 못하는 문제 수정
World GetAllObject에 오브젝트 필터 추가
DSM에서 사용 중인 Redis 키가 삭제될 경우에도 복구될 수 있도록 변경
DSM: AWS 설정의 user_data 를 파일에서 읽을 수 있게 수정
ProgressCallback의 MatchContext 정보가 삭제되고 새로운 콜백(ProgressCallback2)이 추가됐습니다.
MatchContext를 계속 사용하려면 ProgressCallback2의 Match 정보를 사용하면 됩니다.
UpdateMatchPlayerContext C++ 함수가 추가되었습니다.
매치메이킹 대기열에 있는 플레이어의 컨텍스트(Json)를 변경할 때 사용합니다.
C# 매치메이킹 완료 시 크래시가 발생하던 문제가 수정됐습니다.
클라이언트 리소스 파일을 필터링할 수 있는 .funignore 파일이 추가되었습니다.
필터링 기능은 funapi_client_resource_generator 및 엔진의 클라이언트 리소스 기능에서 사용 가능하며 .funignore 파일 안에 정의된 Perl 정규 표현식 패턴과 일치하는 파일들을 리소스 목록에서 제외합니다.
매치메이킹 ProgressCallback2에서 Match context가 누락되는 문제 수정
데디케이티드 서버 매니저 상세 로그 옵션이 추가되었습니다.
DedicatedServerManager 콤포넌트의
dedicated_server_verbose_log
플래그를true
로 설정할 경우 상세 로그를 볼 수 있습니다.
데디케이티드 서버에서 사용하는
user_data
가 빈 문자열일 때 크래시하는 문제가 수정되었습니다.데디케이티드 서버에서 사용하는
image_id
가 8글자 미만일 때도 정상적으로 동작하도록 수정되었습니다.2808 experimental의 DedicatedServerManager 콤포넌트에서 image-id 파싱이 실패하던 문제가 수정되었습니다.
DedicatedServerManager 콤포넌트에서 AWS setting 값을 불러오거나 업데이트 할 때 setting 내용을 보여주는 로그가 추가되었습니다.
이 때 api key, secret과 같이 민감한 값들은
*****
와 같이 표시됩니다.
데디케이티드 서버에서 EC2 인스턴스 태깅 시 같은 리전만 참조하게 변경
데디케이티드 서버에서 유휴 인스턴스 계산 시 같은 리전만 참조하게 변경
데디케이티드 서버 컴포턴트의 AWS 관련 주요 로그들은 기본적으로 출력되며 추가된 목록은 다음과 같습니다.
인스턴스 생성 요청 전, 종료 요청 전, 태깅 요청 성공, 인스턴스 조회 후
종료 조건에 부합하는 인스턴스 발견 시, 매치 요청에 부합하는 인스턴스 발견 시
데디케티이드 서버 콤포넌트에서 AWS EC2 목록과 일치하지 않는 Redis 키가 발견되면 자동으로 삭제합니다.
데디케이티드 서버 사용 시 일부 인스턴스가 종료되지 않는 문제 수정
데디케이티드 서버 매니저
에서 Describe API 함수 호출이 실패할 때 이제 지수 백오프 알고리즘을 사용하여 재시도합니다.데디케이티드 서버 매니저
에서 사용할 수 있는PreRedirectionHook
함수가 추가되었습니다.이 함수는
데디케이티드 서버 매니저
가 클라이언트로 리다이렉션 메시지를 보내기 전 호출되며false
를 반환할 경우 클라이언트로 리다이렉션 메시지를 보내지 않습니다.
데디케이티드 서버 매니저
가 AWS 인스턴스를 계산할 때instance_name
이 설정된 경우image_id
와instance_name
과 일치하는 인스턴스만 식별합니다.데디케이티드 서버 매니저
콤포넌트의 aws_settings 업데이트 API 호출이 실패할 때 적절한 에러 로그를 출력합니다.데디케이티드 서버 매니저
콤포넌트에서image_id
를 변경했을 때 인스턴스들을 식별하지 못하는 문제가 수정되었습니다.데디케이티드 서버 매니저
콤포넌트에서image_id
를 변경했을 때 오래된 버전의 인스턴스를 종료하지 못하는 문제가 수정되었습니다.데디케이티드 서버 매니저
콤포넌트에서/version
API 호출 시 AWS 및 버전 정보가 있을 경우 오래된 버전을status
:deprecated
로 구분합니다.데디케이티드 서버 매니저
콤포넌트의 인스턴스 생성/종료 로직이 개선되었습니다. 개선된 내용은 다음과 같습니다.버전이 명시된 경우 항상 새 버전을 기준으로 인스턴스를 생성합니다. 이 변경으로 인해 버전이 바뀌는 순간 일시적으로 인스턴스 개수가
max_instances
값보다 커질 수 있습니다.인스턴스 종료는 항상 전체 인스턴스를 기준으로 합니다. 이 변경으로 인해 버전이 바뀌는 순간에도
reversed_instances
값만큼 대기 중인 인스턴스들이 종료되지 않습니다.새 버전의 인스턴스가 모두 준비된 이후에는 더 이상 이전 버전 인스턴스를 사용하지 않으며, 남아있는 이전 버전 인스턴스들은 모든 매치가 끝나는 순서대로 죵로됩니다.
데디케이티드 서버 매니저
콤포넌트를 통해 생성했지만 일정 시간 동안 Redis에 등록되지 않은 서버들을 출력합니다.dedicated_server_defunct_timeout_seconds=<정수>
(기본 값:300, 5분)을 사용합니다.
DSM: Spawn 요청이 중복 발생할 수 있던 문제가 수정되었습니다.
DSM: 인스턴스 생성 실패 로그가 구체적으로 변경되었습니다.
생성 인스턴스 대기 / 용량 부족 / 잘못된 요청 등으로 구분됩니다.
DSM: Spawn 요청이 실패한 경우 로그로 출력
DSM: 호스트 서버 연결 실패 시 연결을 시도했던 주소를 로그로 출력하게 변경했습니다.
dedicated-server-host 로그를 추가했습니다.
인증 실패, 매치 관련 로그들을 추가했습니다.
ds state 서버에서 JWT 인증 실패 시 추가 로그를 출력합니다.
DS Host 서비스 요청 타임아웃 옵션 추가
매치 요청에 대한 프로세스가 지정된 시간(
request_timeout_seconds
, 기본 값: 10초) 초 안에 실행되지 않으면 매치 실패로 간주합니다.
DS Host: 호스트 서비스에서 생성한 프로세스가 비정상적으로 종료된 경우 에러를 출력합니다.
dedicated_server_defunct_timeout_seconds 플래그 이름 변경
dedicated_server_launch_timeout으로 변경되었습니다.
dedicated_server_terminate_defunct_instances 플래그 추가
이 값이 true로 설정된 경우
dedicated_server_launch_timeout
시간 안에 ready API를 받지 못한 인스턴스들을 자동으로 종료시킵니다.
World 의 Broadcast, FindSession 의 잘못된 Assert 제거
- Network¶
TCP SSL 지원 추가
ECDH/ECDHE 키 교환 알고리즘을 인식하지 못하는 문제 수정
SSL 기본 알고리즘 순서 변경 및 허용 목록 축소
웹소켓 프로토콜 지원
분당 처리할 세션당 메시지 수 제한 추가
HTTP 에도 rate limit 적용 (HTTP 429)
Session Reliability를 사용할 때 delayed ack, piggy back 기능 추가
해당 옵션은 delayed_ack_interval_in_ms를 0이상의 값으로 설정했을 때 사용 할 수 있습니다.
메시지 압축 기능 추가
압축 옵션 설정 (transport 별 옵션으로 분리)
- Object¶
C# - kReadLock 으로 Fetch 후 쓰기를 할 때 더 자세한 로그가 출력되도록 개선
ORM 오브젝트 GetLockType() C++ 함수 추가
ORM 오브젝트 GetLockType() C# 함수 추가
C# Object.WriteAllImmediately, {Object}.WriteImmediately 함수 추가
C# RegisterAttributeTrigger 함수 추가
C# SelectBy{AttributeName} 함수 추가
동일한 ORM 객체를 다른 LockType으로 Fetch할 때 죽는 문제 수정
ORM 사용 시 자료형 추가 지원
ORM 에 자료형을 더 상세하게 입력할 수 있게 추가되었습니다. 지원되는 타입: int8, int16, int32, int64, float, timestamp, datetime
DateTime을 String에서 WallClock/DateTime으로 변경
DateTime, timestamp는 Map, Array로 사용할 수 없습니다.
Jinja2 2.9 미만 버전에서 복합키 생성이 되지 않는 문제 수정
- Distribution¶
Unreal Dedicated Server 와 RPC 통신하는 기능 추가.
Unreal 클라이언트 플러그인 95 Stable 버전 이상이 필요합니다.
DedicatedServerRpc: bytes 대신 FunDedicatedServerRpcMessage 를 사용하도록 수정.
자동으로 Dedicated Server RPC server 를 알아내는 기능 추가.
DedicatedServerRpc: Dedicated Server 에서 입력한 Tag 로 peer 목록 가져오는 기능 추가
DedicatedServerRpc 기능을 사용할 경우 Dedicated Server 에서 사용하는 Unreal 클라이언트 플러그인을 95 Stable 버전 이상으로 업데이트하셔야 합니다.
DedicatedServerRpc: ConnectHandler 에서 tag 를 조회할 수 없는 문제 수정.
DedicatedServerRpc: Tag 를 얻을 수 있는 GetPeerTag() 함수 추가
RPC: 서버간 연결 관련 처리 개선.
데이터베이스 비활성화시 레디스 기반 RPC를 사용할 수 없던 문제가 해결되었습니다.
- Database¶
Redis 콤포넌트에 database 선택할 수 있는 기능 추가.
RedisClient: Create() 할 때 database 선택할 수 있도록 수정.
MariaDB 연결 실패 시 크래시할 수 있던 문제 수정
RedisClient: 알 수 없는 이유로 연결 실패하여 재연결할 때 크래시되는 버그 수정.
이제 MariaDB Connector가 SQL 타임스탬프 타입을 읽을 수 있습니다.
이제 MariaDB Connector에 Client 플래그를 설정할 수 있습니다.
- Management¶
아이펀 디플로이의 드랍다운 리스트 기능 사용 가능하게 수정
아이펀 디플로이의 반복 캠페인 처리 추가
DeployApiService 에서 지급 가능한 아이템 목록을 순서대로 보내게 수정
Deploy Api Service에 다수의 유저를 제재하거나 제재 해제할 수 있는 API 추가
이제 Http::Request, http::Request2 객체를 통해 클라이언트의 IP를 확인할 수 있습니다.
Counter API 정보에 캐시 메모리 크기(
cachedram
)가 추가되었습니다.
- Account¶
영수증 검증 시 product 구매 정보가 없는 경우에 대한 에러코드 추가
영수증 검증 시 트랜잭션 id를 가져올 수 있도록 추가 인터페이스 제공
- System¶
등록되지 않은 Activity Log 사용 시 크래시 하지 않도록 수정
Docker CE 에서 실행 실패하는 문제 수정
- Framework¶
C# - 서버 크래시 시 콜스택 정보가 로그에 항상 포함되도록 개선
- misc.¶
일부 플랫폼에서 C# 패키징이 실패하는 문제 수정
아이펀 디플로이 추가 설정 기능 및 캠페인 설명 문서화
C# 프로젝트 생성 시 불필요한 .cc/.h 파일을 생성하지 않도록 변경
프로젝트 생성 시 predefined 매크로 템플릿이 동작하지 않던 문제 수정
Ubuntu 16.04에서 mdb 파일이 만들어지지 않던 문제 수정
funapi_client_resource_generator Windows 지원 추가
하위 디렉터리에 .proto 파일이 있는 경우에 오작동하는 부분 수정 (C#)
ORM 사용 시 자료형 추가 지원(C#)
ArrayRef에 IList<T>를 지원 인터페이스 추가(C#)
Mono에서 타이머 취소 시 exception이 발생하던 문제 수정
AppleGameCenter(C#) 지원
C#에서 페이스북 인증시 크래시하는 문제 수정
Dedicated server manager(C#) 지원
RedisClient 의 StringCallback 이 크래시하는 문제 수정(C#)
Dedicated Server Rpc C# 지원
압축관련 사항 문서화
Deploy Api Service에 다수의 유저를 제재하거나 제재 해제할 수 있는 API 추가(C#)
funapi_client_resource_generator를 이용한 목록 추출 시 .funignore 파일 지원
.funignore 파일은 POSIX 정규 표현식을 따르며 패턴과 일치하는 파일을 json 결과물 목록에서 제외시킵니다.
C#에서 빈 프로토버프 메시지를 보낼 때 서버가 크래시하던 문제 수정
2794 experimental 버전에서 C# Protobuf 메시지 생성이 실패할 수 있던 문제가 수정되었습니다.
데디케이티드 호스트 서비스에서 AWS 리전이 아닌 AZ 정보를 가져오는 문제가 수정되었습니다
영수증 검증 시 트랜잭션 id를 가져오는 인터페이스 추가(C#)
영수증 검증 시 product 구매 정보가 없는 경우 에러 코드 추가(C#)
dedicated-server-host 로그를 추가했습니다.
인증 실패, 매치 관련 로그들을 추가했습니다.
ds state 서버에서 JWT 인증 실패 시 추가 로그를 출력합니다.
DS Host: 호스트 서비스에서 생성한 프로세스가 비정상적으로 종료된 경우 에러를 출력합니다.
v1.0.0-2619 (2018-02-02)¶
2018-02-02 10:19:18
- Service¶
Matchmaking 시 enable_dynamic_match = false 면 시간순으로 우선권을 갖도록 수정
v1.0.0-2586 (2018-01-09)¶
2018-01-09 08:32:14
Warning
Breaking Changes
- Network¶
funtest::Session 이 RedirectClient 처리할 수 있게 수정
v1.0.0-2582 (2018-01-05)¶
2018-01-05 16:52:17
- Management¶
1.0.0-2574 Stable 버전에서 ApiService가 동작하지 않는 문제 수정
v1.0.0-2562 (2017-12-29)¶
2017-12-29 13:31:59
v1.0.0-2558 (2017-12-28)¶
2017-12-28 16:51:38
- Service¶
–matchmaking_server_logging_level 추가.
MatchmakingServer 에 REST API 들 추가
matchmaking 관련 counter 추가
- Distribution¶
크래시했을 때 서버 프로세스가 종료되지 않을 수 있는 문제 수정
- Management¶
matchmaking_server_logging_level 을 runtime flag 로 지정.
v1.0.0-2517 (2017-12-07)¶
2017-12-07 01:45:04
- Service¶
Google Play Game 인증 검증 시 웹 콘솔 id로도 통과하도록 수정
Apple Game Center 인증 검증 기능 추가
v1.0.0-2477 (2017-11-23)¶
2017-11-23 02:44:35
- Service¶
Dedicated Server 관리하는 컴퍼넌트 추가
서버 빌드시 Unity3D DLL 빌드가 실패하는 문제 수정
DSM: 유저 난입이 가능하게 구현 수정
DedicatedServerManager 에 AWS Subnet ID 를 지정할 수 있도록 수정
aws_settings 의 subnet_id 가 빈 문자열일 때 발생하는 문제 수정
DedicatedServerManager 가 2 대 이상일 때 발생되는 문제 수정
DedicatedServerManager 가 요청을 Queueing 하도록 수정
DedicatedServerManager::Cancel() 추가
Master DedicatedServerManager 가 종료될 때 즉시 Master 권한을 포기하도록 수정
데디케이티드 서버에 유저 진출입, 커스텀 콜백 기능 추가
ConfigureReservedInstanceCountCallback 라는 콜백을 이용해서 EC2 상의 데디케이티드 서버 호스트 수를 입력 받고, 이후에 사용할 예약 인스턴스 수를 동적으로 조절할 수 있는 기능이 추가되었습니다.
데디케이티드 서버 매니저 서버에서 사용 중인 Redis 키가 삭제될 경우 복구될 수 있도록 변경됐습니다.
DS host에 서버를 띄울 공간이 없을 때 지나치게 빨리 재시도하는 문제 수정
데디케이티드 서버를 강제 종료하는 시간 지정할 수 있게 수정
v1.0.0-2458 (2017-11-13)¶
2017-11-13 11:35:54
Warning
Breaking Changes
- 다음의 변경 사항으로 인해 서버를 다시 빌드해야 합니다.¶
Timer 에 Event Tag 를 지정하여 병렬처리 할 수 있게 수정
- 다음의 변경 사항으로 인해 연결되는 모든 서버의 엔진 업데이트가 필요합니다.¶
분산 환경에서 Object Model 이 다른 서버는 구동되지 않도록 수정
- 다음의 기능 추가로 인해 리더보드 업데이트가 필요합니다.¶
Leaderboard 월간 랭킹 리셋 기능 추가
1.0.0-1803 stable 버전 이상의 리더보드로 업데이트 해야 합니다.
- 다음의 변화로 인해 코드 수정 및 빌드가 필요할 수도 있습니다.¶
DeployAPI: 선물 지급 API 수정
선물 지급 API가 수정되어 GiveGiftToCharacter API 삭제. 새로 추가된 GiveGift를 사용해서 수정 및 새로 빌드해야 정상 동작합니다.
Deploy API 수정 사항 반영
캠페인 시작 콜백 함수에 전달하는 CampaignArgument 에 시작/종료 시간 관련 인자를 추가했습니다. 해당 인자를 접근하기 위해선 새로 빌드해야 합니다. 아이템 지급 API에 유저에게 지급하는 것인지 캐릭터에게 지급하는 것인지 구분하는 인자가 추가되었습니다. (해당 인자는 account, character 중 하나의 값을 씁니다.)
개별 timespan 랭킹 삭제에서 모든 랭킹 삭제하도록 LeaderboardResetRequest 인터페이스 변경.
LeaderboardResetRequest 객체를 만들 때 입력하는 timespan 이 제거되었습니다. 해당 구조체를 사용하시는 경우 코드 수정이 필요합니다.
iFun Authenticator deprecated 처리
iFun Authenticator 를 이용한 인증 검증 기능은 Deprecated 되어 향후 제거될 예정이오니 각 플랫폼별 인증 검증 함수로 변경하시기 바랍니다.
GooglePlayGame AuthenticationResponse 에러 관련 변수명 변경(C#)
해당 구조체를 사용하시는 경우 코드 수정이 필요합니다.
- Service¶
iFun Authenticator deprecated 처리
개별 timespan 랭킹 삭제에서 모든 랭킹 삭제하도록 LeaderboardResetRequest 인터페이스 변경.
Leaderboard 월간 랭킹 리셋 기능 추가
GooglePlayGameService 인증 검증 지원
GooglePlayGameService 인증 검증 지원(C#)
C# AccountAuthentication deprecated 처리
C# SessionClosedHandler 에서 AccountManager 로그아웃 처리 할 수 없던 버그 수정.
GooglePlus Authenticate/GetPersonalInfo C# 함수 추가
NexonPlatform Authenticate C# 함수 추가
NexonToy Authenticate C#함수 추가
Facebook Authenticate/GetPersonalInfo C# 함수 추가
LINE Authenticate/GetPersonalInfo C# 함수 추가
GooglePlayGame AuthenticationResponse 에러 관련 변수명 변경(C#)
- Network¶
TCP transport 가 attach 되는 경우 호출되는 handler 등록 가능하게함
Session::GetLastSendTime() 추가
Session::GetExpirationTime() 추가
메세지 핸들러 호출 전/후를 후킹할 수 있는 함수 추가
메세지 핸들러 호출 전/후를 후킹할 수 있는 C# 함수 추가
Session::GetExpirationTime() 의 값이 부정확하게 나오는 문제 수정
- Time¶
Timer 에 Event Tag 를 지정하여 병렬처리 할 수 있게 수정
Repeating Timer 가 밀릴 때 과도하게 이벤트를 생성하지 않도록 수정
서버 프로세스의 구동시간을 얻는 WallClock::GetUptime(), WallClock::GetUptime2() 추가
서버 프로세스의 구동시간을 얻는 funapi/uptime Counter 추가
- Distribution¶
MySQL, Zookeeper 처리 속도 모니터링 기능 추가
Rpc: peer 연결 여부를 확인할 수 있는 IsPeerConnected() 함수 추가.
RPC Disconnect Handler 에서 접속 끊긴 Peer 의 Tag 와 Status 를 읽을 수 있게 수정
분산 환경에서 Object Model 이 다른 서버는 구동되지 않도록 수정
- System¶
event_profiling 카운터에 함수 처리 시간 추가(handler_time)
execution_time 으로 내림차순 정렬하는 event_profiling_execution_time_order 카운터 추가
handler_time 으로 내림차순 정렬하는 event_profiling_handler_time_order 카운터 추가
io_wait_time 으로 내림차순 정렬하는 event_profiling_io_wait_time_order 카운터 추가
v1.0.0-2410 (2017-10-12)¶
2017-10-12 15:00:33
- Management¶
C# DeployApiService 가 잘못된 캠페인 형식을 사용하는 버그 수정
v1.0.0-2407 (2017-10-12)¶
2017-10-12 10:32:42
- Network¶
C# http.Method.GetString(), http.StatusCode.GetString() 추가
- Management¶
DeployApiService 를 native/mono 중 선택해서 활성화하게 수정
C# iFunDeploy API 연동 지원 (1) - 유저 관리 기능
C# iFunDeploy API 연동 지원 (2) - 커스텀 API
C# iFunDeploy API 연동 지원 (3) - 캠페인 기능 연동
C# iFunDeploy 연동 지원 (4) - 인벤터리 삭제 지원
DeployAPIService에서 ORM 롤백 처리가 되지 않는 문제 수정(C#)
C#에서 추가한 Restful API가 목록 조회 시 정상적으로 포함되도록 변경
- misc.¶
DeployApiService 문서 업데이트
v1.0.0-2404 (2017-10-11)¶
2017-10-11 15:00:05
- Service¶
Client redirection 할 때 IP 대신 hostname 줄 수 있게 수정
- System¶
IP resolver 의 nat 타입에 DNS 주소 허용
v1.0.0-2401 (2017-09-29)¶
2017-09-29 12:05:50
- Service¶
게임 서버에서 리더보드 랭킹을 초기화할 수 있는 ResetLeaderboard() 함수 추가
이 기능을 사용하려면 1.0.0-1744 stable 버전 이상의 리더보드 에이전트가 필요합니다.
- Database¶
일부 머신에서 RedisClient 연결이 해제되는 문제 수정.
RedisClient: Pub/Sub 처리시 간헐적으로 assertion 에 걸리는 문제 수정.
- Object¶
분산환경에서 Object Cache 메모리 사용량 개선
v1.0.0-2363 (2017-09-15)¶
2017-09-15 14:21:08
- Network¶
Protobuf field 로 메세지 핸들러 등록시 메모리릭이 발생되는 문제 수정
Protobuf field 로 메시지 핸들러 등록시 이름에 > 가 포함되는 버그 수정
- Framework¶
크래시할 때 엔진 버전을 로그로 출력
v1.0.0-2334 (2017-09-01)¶
2017-09-01 14:00:14
- Distribution¶
Segmentation Fault 로 크래시했을 때도 Zookeeper 연결을 끊고 종료하도록 수정.
- Object¶
ORM 관련 잘못된 Assert 제거
v1.0.0-2312 (2017-08-25)¶
2017-08-25 14:04:25
- Object¶
Object Cache 가 trailing spaces 들을 MySQL general_ci 와 동일하게 다루도록 수정
- Network¶
session id 를 한 번만 보내 트래픽을 줄이는 기능 관련 크래시 문제 수정
v1.0.0-2300 (2017-08-22)¶
2017-08-22 17:10:44
- Object¶
kReadCopyNoLock 으로 Array, Map Fetch 할 때 NULL 오브젝트가 있으면 크래시 하는 버그 수정.
v1.0.0-2282 (2017-08-17)¶
2017-08-17 14:31:37
Warning
Breaking Changes
다음의 변화로 인해 코드 수정 및 빌드가 필요할 수도 있습니다.
Deploy API: 버그 수정 및 바뀐 인터페이스 대응
DeployApiService 의 일부 인터페이스가 수정되어 서버를 다시 빌드해야합니다. SearchUsers, GetInventory 함수의 경우 구현을 수정하셔야 합니다.
DeployAPI: 선물 지급 API 수정
선물 지급 API가 수정되어 GiveGiftToCharacter API 삭제. 새로 추가된 GiveGift를 사용해서 수정 및 새로 빌드해야 정상 동작합니다.
Deploy API 수정 사항 반영
캠페인 시작 콜백 함수에 전달하는 CampaignArgument 에 시작/종료 시간 관련 인자를 추가했습니다. 해당 인자를 접근하기 위해선 새로 빌드해야 합니다. 아이템 지급 API에 유저에게 지급하는 것인지 캐릭터에게 지급하는 것인지 구분하는 인자가 추가되었습니다. (해당 인자는 account, character 중 하나의 값을 씁니다.)
- Management¶
Deploy API: 버그 수정 및 바뀐 인터페이스 대응
DeployAPI: 선물 지급 API 수정
DeployAPI: 캠페인 취소, 아이템 대량 지급 API 추가
Deploy API 수정 사항 반영
DeployApiService: 인벤터리 아이템 다중 회수 API 지원
C# ApiService URL 매칭하는 방식 개선
- Network¶
이벤트 프로파일링 시 Protobuf 핸들러 이름이 정수 값으로 보이는 문제 수정
- misc.¶
C# HTTP API 통신 예제 코드 추가
v1.0.0-2256 (2017-08-10)¶
2017-08-10 10:02:30
Warning
Breaking Changes
다음의 변화로 인해 DB 권한 확인이 필요할 수도 있습니다.
만약 DB 권한이 충분하지 않을 경우 서버가 실행되지 않습니다. 이 경우 필요한 DB 권한 에서 설명하는
export_db_schema
옵션을 사용하여 관리자 DB 계정으로 DB 스키마를 업데이트할 수 있습니다.use_db_char_type_for_object_id 옵션 사용시 캐릭터셋이 지정되지 않는 버그 수정.
이 옵션을 true 로 설정하셨을 경우 엔진 업데이트 후 서버 실행 시 프로시저를 재생성하기 위해 DDL 쿼리를 실행합니다.
오브젝트를 DB 에서 가져올 때 트래픽 줄이도록 수정 - 1.
오브젝트 DB 테이블의 col__tag 사용하지 않도록 수정.
Array 또는 Map 만 가지는 오브젝트의 프로시저를 만들 수 없는 버그 수정.
본 수정으로 인해 DB 스키마 해시가 변경되어 프로시저를 재 생성하는 DDL 쿼리가 실행됩니다.
다음의 변화로 인해 모든 서버의 엔진 업데이트가 필요합니다.
ORM 분산 처리 시 발생하는 네트워크 트래픽 개선
이전 버전의 서버와 연결되면 크래시합니다. 모든 서버를 함께 업데이트 하시기 바랍니다.
다음의 변화로 인해 플러그인 업데이트가 필요할 수도 있습니다.
UDP 에서 Session ID 를 첫 메시지일 때만 전송하는 기능을 쓸 때 버그 수정
UDP 와 send_session_id_only_once 를 사용하실 경우 다음 버전 이상의 플러그인으로 업데이트하시기 바랍니다.
Unity3D: 228
Unreal4: 67
Cocos2d-x: 67
- Object¶
ORM 롤백 처리 중 Assert 로 크래시할 수 있는 문제 수정
하나의 Object 가 서로 다른 두 서버에서 동시에 캐싱될 수 있는 문제 수정
Object Cache 의 Index 성능 개선
생성된 Object 가 DB Update 완료 전에 Cache 에서 내려갈 수 있는 문제 수정
use_db_char_type_for_object_id 옵션 사용시 캐릭터셋이 지정되지 않는 버그 수정.
Object ID Pool 관련 Assert 수정
Object 가 cache_expiration_in_ms 보다 더 빨리 캐시에서 내려갈 수 있는 문제 수정
분산 환경에서 ORM Object Cache 적중률 개선
Object 삭제 관련 Assert 로 크래시할 수 있는 문제 수정
분산 처리 과정의 Lock 관련 Assert 수정
ORM 분산 처리 시 발생하는 네트워크 트래픽 개선
오브젝트 쿼리 용량 줄이도록 수정.
프로시저를 사용하지 않을 때 불필요한 쿼리 제거.
ORM 지연 업데이트 관련 Assert 로 크래시하는 문제 수정
오브젝트를 DB 에서 가져올 때 트래픽 줄이도록 수정 - 1.
오브젝트를 DB 에서 가져올 때 트래픽 줄이도록 수정 - 2.
오브젝트 DB 테이블의 col__tag 사용하지 않도록 수정.
더이상 col__tag 컬럼이 사용되지 않습니다. 엔진에서 자동으로 해당 컬럼을 제거하지는 않습니다.
종료 처리가 멈출 수 있는 문제 수정
Array 또는 Map 만 가지는 오브젝트의 프로시저를 만들 수 없는 버그 수정.
오브젝트 프로시저명을 축약하여 사용할 수 있는 기능 추가
MANIFEST/Object 에 use_db_stored_procedure_full_name 를 false 로 지정하면 축약된 오브젝트 프로시저명으로 DB 서버와 통신합니다. 이 경우 DB 스키마 해시가 변경되어 프로시저를 재 생성하는 DDL 쿼리가 실행됩니다. 만약 DB 권한이 충분하지 않을 경우 서버가 실행되지 않습니다. 이 경우 필요한 DB 권한 에서 설명하는
export_db_schema
옵션을 사용하여 관리자 DB 계정으로 DB 스키마를 업데이트할 수 있습니다.ORM Object 를 생성 후 바로 삭제할 때 Assert 로 크래시하는 문제 수정
한 이벤트에서 동일한 Key 의 ORM 오브젝트의 생성 삭제를 반복할 때 발생하는 문제 수정
삭제한 오브젝트를 다시 삭제하는 잘못된 코드를 ASSERT 로 막던 것 허용.
- Network¶
UDP 에서 Session ID 를 첫 메시지일 때만 전송하는 기능을 쓸 때 버그 수정
send_session_id_only_once 관련 Assert 로 크래시할 수 있는 문제 수정
Session::CloseTransport() 로 UDP 를 닫을 때 버그 수정
- Service¶
C# AccountManager 관련 콜백이 간헐적으로 호출되지 않는 문제 수정
- Framework¶
ArgumentMap 에 FindDoubleArgument() 함수 추가.
- Distribution¶
분산 환경에서 불필요한 Zookeeper 요청 제거
- misc.¶
MANIFEST.json double 타입 인자 지원.
v1.0.0-2214 (2017-07-27)¶
2017-07-27 09:23:33
Warning
Breaking Changes
다음의 변화로 인해 Multicast Protobuf 수정 및 플러그인 업데이트가 필요할 수도 있습니다.
Multicast protobuf extension 관련 사용 가능한 필드 번호 범위가 수정되었습니다.
만약 FunMulticastMessage 를 확장하여 사용할 경우 필드 번호를 16 부터 사용하도록 수정해야 합니다. 그리고 다음 버전 이상의 플러그인으로 업데이트해야 합니다. (Stable 버전 기준)
Unity3D: 220
Unreal4: 65
Cocos2d-x: 66
다음의 변화로 인해 서버 빌드 및 플러그인 업데이트가 필요합니다.
Protobuf 의 Message Type 을 String 대신 Integer 를 쓸 수 있는 기능 추가
이 기능을 사용하려면 다음 버전 이상의 플러그인으로 업데이트 해야 합니다. (Stable 버전 기준)
Unity3D: 220
Unreal4: 65
Cocos2d-x: 66
다음 변화로 인해 코드 수정 및 인증 서버 업데이트가 필요합니다.
Kakao 인증 제거
변경된 Kakao 운영정책으로 인해 서버 사이드 인증 API 가 제거되었습니다. 만약 Kakao 인증 API 를 사용중이시라면 직접 Kakao API 를 호출하여 인증 처리해야 합니다. 직접 구현하실 경우 다음 GitHub 에서 구현 샘플을 참고하실 수 있습니다.
https://github.com/iFunFactory/engine-example-kakao-game-authentication
다음의 변화로 인해 MANIFEST.json 파일 수정이 필요합니다.
네트워크 I/O 처리를 위한 스레드 수 설정 이름 변경
IoService/io_service_threads_size 에서 SessionService/network_io_threads_size 로 변경 되었으며, 기존 설정도 당분간 유효하게 작동합니다. 가급적 빠른 시일내에 새로운 설정 이름으로 변경하시기 바랍니다.
Google Log 보관 기간 옵션 추가
30 일이 지난 디버그(glog) 로그가 삭제됩니다. 더 오래 보관하기 위해서는 glog_retention_period_in_days 설정 값을 변경해야 합니다.
다음의 변화로 인해 코드 수정 또는 서버를 다시 빌드 해야합니다.
Matchmaking 서버를 선택할 수 있도록 개선
StartMatchmaking() 함수에 target_server 파라미터가 추가되었습니다. kRandom(무작위), kLeastNumberOfPlayers(요청이 적은 서버 우선), kMostNumberOfPlayers(요청이 많은 서버 우선) 중 하나 또는 직접 PeerId 를 선택할 수 있습니다.
Session::LastSentMessageType() 함수 오타 수정
세션의 API 가 변경되어 소스 코드 수정이 필요합니다.
서버 테스트 기능(funtest::Session) UDP 지원
funtest::Session 을 사용할 경우 서버를 다시 빌드해야합니다.
Object Model 을 다루는 내부 코드 개선
JsonSchema::Type kDouble 오타 수정
- Service¶
Matchmaking 서버를 선택할 수 있도록 개선
GetMatchmakingServerInfo() 함수가 추가 되었습니다. 모든 MatchmakingServer 의 PeerId 와 Matchmaking 요청 수를 알 수 있습니다.
Nexon Platform 인증 관련 변경사항 반영
멀티캐스트 메시지를 검사할 수 있는 기능 추가
Kakao 인증 제거
AccountManager RedirectClient 호출 후 엔진에서 세션을 종료하도록 수정
- Network¶
네트워크 I/O 처리를 위한 스레드 수 설정 이름 변경
Session::LastSentMessageType() 함수 오타 수정
TCP, UDP 에서 Session ID 를 첫 메시지일 때만 전송하고 그 이후에는 생략하여 네트워크 트래픽을 줄이는 기능 추가
Protobuf 의 Message Type 을 String 대신 Integer 를 쓸 수 있는 기능 추가
Protobuf Extension Identifier 를 Message Type 으로 쓸 때 빌드 오류 수정
close_transport_when_session_close 옵션이 작동하지 않는 문제 수정
use_session_relibility 와 send_session_id_only_once 기능을 함께 쓸 때 Encryption 관련 ASSERT 로 크래시할 수 있는 문제 수정
use_session_relibility 와 send_session_id_only_once 기능을 함께 쓸 때 Session Reliability 에 의한 재연결에 안될 수 있는 문제 수정
UDP 관련 불필요한 ASSERT 제거
- C#¶
C# 지원(Ubuntu)
CentOS 는 향후 지원할 예정입니다.
C# 으로 개발하기 위해서는 다음과 같은 명령을 입력하여 프로젝트를 다시 만들어야 합니다.
$ funapi_initiator {ProjectName} --mono
서버 테스트 기능(funtest::Session) UDP 지원
서버 테스트 기능(funtest::Session) 의 HTTP 관련 버그 수정
Install/Start/Uninstall 함수의 Return Type 을 void -> bool 로 변경
오브젝트 ArrayRef, MapRef 에 Has, Clear, FindFirstEmptySlot 함수 추가
Monodevelop 5.x 버전에서 디버깅이 시작되지 않는 문제 수정
Session::SetTransport(…) 지원
Event::Abort() 지원
ORM Object 에 Bool 타입이 있을 때 빌드 오류 수정
Mariadb(MySQL) Connector 사용 시 크래시할 수 있는 문제 수정
ORM Database 와 연결된 Mariadb Connector 를 얻을 수 있는 API 추가
RedisClient 추가
ApiService Handler 에서 ORM 을 사용할 수 없는 문제 수정
Object Array, Map Fetch 함수 성능 개선
Object Create() 함수로 전달된 String Key 가 모델에 정의된 길이를 초과하면 NullReferenceException 이 발생하는 문제 수정
null 인 Object 를 좌변에 두고 ‘==’ 연산자로 비교할 때 NullReferenceException 이 발생하는 문제 수정
Object 를 JSON 으로 초기화 하는 기능 지원
Map 의 Key 에 String Type 이 있을 때 빌드가 안되는 문제 수정
C# 지원 업데이트
- Object¶
ORM Object 의 Delete() 를 두 번 이상 호출할 때 걸리는 ASSERT 제거
Object Fetch 함수 성능 개선
Object Model 을 다루는 내부 코드 개선
ORM 분산처리 관련 잘못된 ASSERT 제거
DB, Zookeeper Write I/O 지연시 정상적인 Key 가 Dangling Key 로 처리되는 문제 수정
존재하지 않는 Key 의 Object 를 Create 또는 Fetch 할 때 일시적으로 CPU 를 과도하게 사용하는 문제 수정
프로시저를 사용하지 않을 때 간헐적으로 Array 데이터를 지우지 못하던 버그 수정.
- System¶
Google Log 보관 기간 옵션 추가
이벤트 유입, 처리량 카운터가 실제 보다 낮고 부정확하게 측정되는 문제 수정
간헐적으로 서버 종료 처리에 지연이 생기는 문제 수정
- Distribution¶
주키퍼 성능 카운터 주소를 zookeeper_stat 에서 distribution_profiling 으로 변경
- Management¶
SystemInfo Counter 가 구동 후 일정 시간 동안 출력되지 않는 문제 수정
- Database¶
RedisClient 명령 호출 후 메모리 반환에 지연이 생기는 버그 수정
RedisClient 추가
Mariadb Connector 가 재연결될 때 쿼리가 유실될 수 있는 문제 수정
- misc.¶
서버 크래시 발생시 종료안될 수 있는 문제 수정
Json::HasAttribute({AttrName}, {AttrType}) 함수 추가
CLion 개발 환경 구성 문서 업데이트(2017.1.2 버전 기준)
JsonSchema::Type kDouble 오타 수정
Mongodb logger에 SSL/TLS 활성화하는 플래그 추가
Object Type 의 JSON 을 다룰 때 내부의 불필요한 함수 호출 제거
ResourceManager 문서중 기획데이터 사용하기 예제 잘못된 것 수정
리더보드에 추가된 mysql_local_account_column_length 옵션 설명 추가
v1.0.0-2164 (2017-06-27)¶
2017-06-27 14:46:25
- Network¶
TransportProtocol 값에 대한 Assert 처리 강화
다음 함수들이 kDefaultProtocol 을 인자로 받을 수 있도록 수정
Session::GetRemoteEndPoint()
Session::IsTransportAttached()
Session::CloseTransport()
- Object¶
Object Lock/Lease 재시도 로그 표현 수정
v1.0.0-2130 (2017-05-31)¶
2017-05-31 14:00:37
- Object¶
Object Model Error 로그에 더 많은 정보를 출력하도록 개선 및 FATAL 로그로 변경
누락된 Object Model 검사 추가
- Framework¶
Google Protobuf 관련 오류 로그를 stderr 대신 로그 파일에 기록되도록 수정.
- Distribution¶
Zookeeper 장애에 대한 예외처리 개선
- misc.¶
Ubuntu 16.04 에서 패키지 생성시 systemd 서비스가 실행되지 못하는 문제 수정
Flavor 사용시 systemd 패키지 생성시 서비스 실행이 정상적으로 안되는 문제 해결
v1.0.0-2066 (2017-04-20)¶
2017-04-20 11:03:36
Warning
Breaking changes
다음의 변화 때문에 게임 서버를 다시 빌드해야 합니다.
브로드캐스팅할 때 kDefaultProtocol 를 지정하면 동작하지 않던 버그 수정
Session(AccountManager)::BroadcastLocally/Globally() 함수의 Encryption, TransportProtocol 디폴트 인자값 제거.
Json::From*(…) 에서 파싱 실패 시 콜백을 받을 수 있도록 개선
Json::From*(…) 함수에 파싱 에러 콜백을 받을 수 있도록 인자가 추가되었습니다.
다음의 변화 때문에 RPC 로 연결되는 모든 서버를 업데이트해야 합니다.
Rpc::SetStatus() 를 호출할 때 엔진 내부 Status 를 덮어쓰지 않도록 수정
- Network¶
Network: 모든 세션에 메시지 보내는 함수 추가
AccountManager: 로그인한 모든 세션에 메시지 보내는 함수 추가
브로드캐스팅할 때 kDefaultProtocol 를 지정하면 동작하지 않던 버그 수정
HTTP 에서 핸들러가 등록되지 않은 메시지를 받으면 후속 메시지가 무시되는 문제 수정
Session Message Log 에 Transport Protocol (TCP or UDP or HTTP) 을 함께 남기도록 수정
Network 관련 로그에 클라이언트 주소 등 더 많은 정보를 남기도록 수정
Session 이 닫힐 때 로그를 남기도록 수정
funtest::Session 이 닫힐 때 Transport 를 자동으로 닫도록 수정
서버 테스트 기능의 메모리 누수 버그 수정
- Framework¶
SIGSEGV 로 크래시할 때 종료처리가 지연되는 문제 수정
- Distribution¶
rpc_use_public_address 라는 flag 추가
Rpc::SetStatus() 를 호출할 때 엔진 내부 Status 를 덮어쓰지 않도록 수정
- Service¶
Multicast: 메시지 전송시 불리는 hook 추가
LINE 인증 추가
AccountManager 에서 이미 로그인된 세션으로 다른 Account ID 로 로그인할 때 ASSERT 에 걸리는 문제 수정
- Object¶
서버 여러개가 동시에 스키마 설치시 크래시할 수 있는 버그 수정
Object 를 JSON 으로 초기화할 때 Foreign Attribute 도 지원 하도록 수정
- Database¶
Mariadb(MySQL) Connector 의 타임아웃 처리 개선
- System¶
MANIFEST에 Activity Log Schema 출력 여부 결정 플래그 추가
event_profiling 카운터에서 롤백 횟수가 잘못 출력될 수 있는 버그 수정
- misc.¶
Json::From*(…) 에서 파싱 실패 시 콜백을 받을 수 있도록 개선
Multicast: 메시지 전송 후킹 문서화
Session 의 BroadcastLocally(), BroadcastGlobally() 함수 문서화
AccountManager 의 BroadcastLocally(), BroadcastGlobally() 함수 문서화
Json::FindAttribute() 함수 추가
setup_build_environment 가 symbolic link 가 아닐 때도 작동 되도록 수정
v1.0.0-1945 (2017-02-06)¶
2017-02-06 14:12:37
Warning
Breaking changes
클라이언트 플러그인 갱신이 필요한 부분은 다음과 같습니다.
Protobuf 의 세션아이디를 바이트로 보낼 수 있도록 기능 추가
반드시 아래 버전 이상으로 클라이언트 플러그인을 업데이트하고 Protobuf DLL 을 다시 빌드해야 합니다.
Unity3D: 190
Unreal4: 35
Cocos2d-x: 35
다음의 변화 때문에 게임 서버를 다시 빌드해야 합니다.
“Assert failed: ObjectCache::Delete(…)” 로 크래시할 수 있는 문제 수정
다음의 변화 때문에 서버 실행시 DB DDL 쿼리가 수행될 수 있습니다.
오브젝트 DB 프로시저가 변경되었을 때만 재생성하도록 수정
본 수정으로 인해 테이블이 추가되었으며 관련 DDL 쿼리를 실행할 수 있습니다. 만약 DB 권한이 충분하지 않은 경우 서버가 크래시할 수 있습니다.
col__tag 컬럼 길이를 36 으로 고정
본 수정으로 인해 col__tag 컬럼 길이를 36 으로 변경하는 DDL 쿼리를 실행할 수 있습니다. 만약 DB 권한이 충분하지 않은 경우 서버가 크래시할 수 있습니다.
오브젝트 관련 TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 설정 옵션 추가
use_db_stored_procedure: true 일 때 이 옵션값을 수정하면 프로시저를 재생성하는 DDL 이 실행될 수 있습니다. 만약 DB 권한이 충분하지 않은 경우 서버가 크래시할 수 있습니다.
- Object¶
Object: “Assert failed: IsValid()” 로 크래시할 수 있는 문제 수정
Object: string 컬럼 길이가 늘어난 경우 자동으로 수정되도록 기능 추가
Object: 오브젝트 관련 DB 테이블 스키마 검증 기능 추가
Object: 오브젝트 관련 DB 프로시저 스키마 검증 기능 추가
오브젝트 DB 프로시저가 변경되었을 때만 재생성하도록 수정
col__tag 컬럼 길이를 36 으로 고정
“Assert failed: ObjectCache::Delete(…)” 로 크래시할 수 있는 문제 수정
오브젝트 관련 TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 설정 옵션 추가
스키마 설치후 테이블 검증이 실패할 수 있는 문제 수정
오브젝트 DB 스키마 추출시 서버가 정상 종료되지 않던 문제 수정
Assert failed: cache_for_lease_.Remove(object_id)
로 크래시할 수 있는 문제 수정event 가 timeout 될 때 일부 자원이 해제되지 않을 수 있는 문제 수정
Centos 에서 DB Schema 업데이트 중 크래시할 수 있는 문제 수정
object 카운터 추가, 일부 카운터를 object 하위로 변경
기존 objects 가 object 카운터 하위의 “object_count” 로 변경되었습니다.
기존 outstanding_update_query 가 object 카운터 하위로 변경되었습니다.
기존 outstanding_fetch_query 가 object 카운터 하위로 변경되었습니다.
- System¶
event thread hang checker 성능 개선
event 처리 성능 개선
event 처리 중 assert 로 크래시할 수 있는 문제 수정
이벤트 프로파일링에 큐에서 머문 시간 추가(queue_time_xxx)
이벤트 프로파일링의 wait_time_xxx 을 io_wait_time_xxx 로 이름 변경
이벤트 큐의 각 통계 항목 이름 변경
completion_xxx
->execution_time_xxx
로 변경되었습니다.wait_xxx
->io_wait_time_xxx
로 변경되었습니다.
event_queue_stat 을 event_profiling_summary 으로 변경
event 카운터 추가, 일부 카운터를 event 하위로 변경
기존 event_queue_length 가 event 카운터 하위로 변경되었습니다.
기존 event_injection_per_sec 이 event 카운터 하위로 변경되었습니다.
기존 event_complete_per_sec 이 event 카운터 하위로 변경되었습니다.
- Distribution¶
비정상 RPC 메시지 수신에 대한 예외 처리 개선
- Framework¶
콤포넌트 설치중에 서버 종료시 정상 종료되지 않는 문제 수정
- misc.¶
proto 파일이 {project}-source/src 외의 디렉터리 있는 것 허용
Protobuf 의 세션아이디를 바이트로 보낼 수 있도록 기능 추가
send_session_id_as_string 옵션 설명을 참고하세요.
v1.0.0-1904 (2016-12-15)¶
2016-12-15 12:07:12
- Object¶
object_db_migrator.py 툴이 일부 DB 데이터를 잘못 처리할 수 있는 버그 수정
v1.0.0-1853 (2016-11-21)¶
2016-11-21 14:45:52
Warning
Breaking changes
Unity 클라이언트 플러그인 갱신이 필요한 부분은 다음과 같습니다.
Multicast: iOS 에서 Protobuf 멀티캐스트 메시지 보낼 때 클라이언트가 크래시할 수 있는 버그 관련 수정
멀티캐스트를 사용하실 경우 반드시 플러그인 186 버전 이상을 사용하셔야 하며 Protobuf DLL 을 새로 빌드해야 합니다.
- Service¶
Multicast: iOS 에서 Protobuf 멀티캐스트 메시지 보낼 때 클라이언트가 크래시할 수 있는 버그 관련 수정
v1.0.0-1849 (2016-11-18)¶
2016-11-18 11:38:03
- Distribution¶
Centos 에서 잘못된 빌드 옵션으로 분산 처리 기능이 작동하지 않을 수 있는 문제 수정
v1.0.0-1841 (2016-11-15)¶
2016-11-15 15:37:02
Warning
Breaking Changes:
다음 변화 때문에 게임 서버를 다시 빌드 해야됩니다.
Session::GetLastReceiveTime(msgtype), SendMessage() 시 불리는 hook 추가.
- Network¶
Session::GetLastReceiveTime(msgtype), SendMessage() 시 불리는 hook 추가.
HttpClient: DNS 조회 문제 발생시 재시도하게 수정
- System¶
MulticastServer 사용 시 “Assert failed: IsValid()” 로 크래시하는 문제 수정
하나의 event type 에 2 개 이상의 event handler 가 등록했을 때 “Assert failed: IsValid()” 로 크래시하는 문제 수정
- Distribution¶
“failed to unpublish” 로그가 출력되며 발생되는 문제 수정
v1.0.0-1815 (2016-10-28)¶
2016-10-28 16:59:15
- Object¶
export_db_schema 옵션 사용 시 일부 프로시저가 drop 되는 버그 수정
Insert, Update 프로시저에 변경된 스키마가 반영되지 못할 수 있는 버그 수정
v1.0.0-1809 (2016-10-26)¶
2016-10-26 11:48:08
Warning
Breaking Changes:
코드 변경이 필요한 부분은 다음과 같습니다.
Leaderboard: ScoreSubmissionRequest::kUpdate 제거
ScoreSubmissionRequest::kHighScore
로 변경해야 합니다.Redis: Command(Async) 함수 제거
ExecuteCommand(Async)
함수로 변경해야 합니다.
추가된 감지 코드에 영향을 받을 수 있는 부분은 다음과 같습니다.
Array, Map Attribute 의 타입 변경을 감지 못하던 버그 수정
서버 실행 시 만약 Array, Map Attribute 의 타입이 변경되었다면 서버가 크래시할 수 있습니다.
Unity 클라이언트 플러그인 갱신이 필요한 부분은 다음과 같습니다.
AccountManager: 클라이언트의 서버간 이동을 위한 메시지 추가
서버간 이동 기능을 사용하실 경우 반드시 플러그인 버전을 180 이상으로 업데이트 해야 합니다.
- Object¶
“failed to lease” 로그를 일정 횟수까지는 출력하지 않도록 완화
object 의 소유권이 변경되고 있을 때 lease 를 지연 시켜 불필요한 재시도 줄임
Array, Map Attribute 의 타입 변경을 감지 못하던 버그 수정
- Service¶
AccountManager: 클라이언트의 서버간 이동을 위한 메시지 추가
Leaderboard: ScoreSubmissionRequest::kUpdate 제거
- Database¶
Redis: Command(Async) 함수 제거
- Distribution¶
분산처리 관련 성능 개선
분산처리 관련 ASSERT 로 크래시할 수 있는 문제 수정
서버가 비정상 종료될 때 RPC 연결이 안될 수 있는 버그 수정
Rpc::SetStatus() 가 접속 처리 중인 peer 에 반영되지 않는 문제 수정
- Time¶
WallClock 에 Timestamp 및 Timestring 변환 기능 추가
- misc.¶
Document: 클라이언트 이동 관련 문서 추가
funapi_profile 이 서버 프로세스가 여러개일 때 동작하지 않는 버그 수정
v1.0.0-1797 (2016-10-12)¶
2016-10-12 10:01:11
- Management¶
Counter: concurrent_user 카운터 추가
- misc.¶
Document: 엔진에서 지원하는 카운터 목록 추가
v1.0.0-1795 (2016-10-11)¶
2016-10-11 09:28:56
Warning
ChaCha20, AES128 암호화를 사용하실 경우 반드시 플러그인 버전을 176 이상으로 업데이트를 해야 합니다.
- Distribution¶
일부 zookeeper client 가 통계에서 누락되는 버그 수정
- Network¶
Transport encryption 에 ChaCha20 / AES128 지원 추가
- misc.¶
Document: C# Runtime 테스트 샘플 설명 업데이트
Document: Zookeeper 최대 힙 사이즈 Java 옵션 설정 설명 추가
Document: Zookeeper auto purge 옵션 설명 추가
v1.0.0-1790 (2016-10-05)¶
2016-10-05 16:08:02
Warning
Breaking Changes:
가변길이 스트링의 길이 변경을 감지 못하던 버그 수정
서버 실행 시 DB 스키마 업데이트를 시도할 수 있습니다. DB 권한이 제한적인 경우 DB 스키마 업데이트가 실패하며 서버가 크래시할 수 있습니다. 이 경우 필요한 DB 권한 에서 설명하는
export_db_schema
옵션을 사용하여 관리자 DB 계정으로 DB 스키마를 업데이트할 수 있습니다.
- Object¶
분산처리 관련 ASSERT 로 크래시할 수 있는 문제 수정
가변길이 스트링의 길이 변경을 감지 못하던 버그 수정
object 처리하는 코드 생성할 때 python 코드에 생겼던 버그 수정
v1.0.0-1782 (2016-09-28)¶
2016-09-28 18:30:20
- Object¶
Object Fetch 관련 ASSERT 로 서버가 크래시하는 버그 수정
- Service¶
ClientResourceServce MANIFEST 에 누락된 Curl 의존성 추가
- misc.¶
Json::Copy() 성능 개선
v1.0.0-1777 (2016-09-28)¶
2016-09-28 10:25:56
- Distribution¶
일시적으로 object 를 가져오지 못하는 버그 수정
서버 종료시 간헐적으로 크래시할 수 있는 문제 수정
서버 시작 시 간헐적으로 Zookeeper 와 연결에 실패하는 문제 수정
크래시 후 종료 과정에서 비정상 처리될 수 있는 문제 수정
엔진 내부 RPC 의 finisher 가 누락될 수 있는 문제 수정
RPC disconnect handler 실행 순서 관련 버그 수정
- Object¶
원격 서버가 종료될 때 낮은 확률로 ASSERT 로 크래시할 수 있는 버그 수정
분산 처리 관련 ASSERT 로 크래시할 수 있는 버그 수정
종료처리 개선
- Framework¶
MANIFEST 에 주석이 있을 때 “make check_features” 가 작동하지 않는 버그 수정
MANIFEST 에 주석이 있을 때 일부 IDE 개발환경에서 서버가 구동되지 않는 버그 수정
- misc.¶
주석을 포함한 JSON 을 파일과 스트림에서 읽는 Json::FromFileWithComments(), Json::FromStreamWithComments() 추가
v1.0.0-1763 (2016-09-22)¶
2016-09-22 18:05:19
Warning
ife1, ife2 암호화를 사용하실 경우 반드시 플러그인 버전을 176 이상으로 업데이트 해야합니다.
- Network¶
ife1, ife2 암호화 버그 수정
v1.0.0-1739 (2016-09-08)¶
2016-09-08 12:27:23
- Object¶
object lock downgrade 관련 버그 수정
Object 처리 관련 잘못된 ASSERT 제거
특정 상황에서 이벤트가 과도하게 롤백되는 문제 수정
특정 상황에서 동일한 object 를 lock type 을 다르게하여 Fetch 할 때 버그 수정
분산처리 관련 ASSERT 로 서버가 종료될 수 있는 문제 수정
null object id 를
kReadCopyNoLock
으로 fetch 할 때 버그 수정
- Distribution¶
오브젝트 관련 처리시 크래시할 수도 있는 버그 수정
분산처리 관련 잘못된 ASSERT 제거
종료 과정중에 크래시할 수 있는 버그 수정
- Framework¶
서버 실행중 크래시될 때 종료처리가 지연되는 문제 수정
종료처리 개선
- Management¶
Counter: 카운터값이 threshold 를 넘으면 로그를 출력하는 기능 추가
- System¶
Event: 이벤트 큐 관련 처리 시간 통계 추가
- misc.¶
패키지 버전 고정하는 법 문서화
Document: Leaderboard: 랭킹 스케쥴 리셋 여부 확인하기 추가
Document: CLion 빌드 설정 설명 수정
Document: 리더보드 문서에서 링크 깨진 것 수정
외부 라이브러리 사용하는 방법 문서화
Document: 플러그인 FunapiSession 설명 추가
v1.0.0-1694 (2016-08-18)¶
2016-08-18 17:25:42
- Object¶
Object 반납 관련 처리에서 ASSERT 에 걸릴 수 있는 문제 수정
event timeout 처리 관련 버그 수정
깨진 Object 를 Fetch 할 때 누락된 주키퍼 소유권 해제 처리 추가
- Distribution¶
분산 처리 관련 버그 수정
v1.0.0-1680 (2016-08-12)¶
2016-08-12 17:04:52
Warning
Breaking Changes:
지연 업데이트가 추가된 버전 업데이트 후 서버를 다시 빌드해야 합니다.
RPC 기능을 사용하실 경우 게임서버를 다시 빌드 하셔야합니다. (Rpc::Call()
함수 관련)
String(n)
기능을 사용하게 변경되었으며 프로젝트를 다시 빌드해야 합니다.
- Object¶
Object ReadLock 관련 잠재적 버그 수정 및 로그 가독성 개선
Object ID 를 SELECT 하는 기능 추가
일부 상황에서 Object Lock 검사가 생략되는 것 수정
Object Lock Table 성능 개선
Object Lock Table 성능 개선
Object:Array PushBack 성능 개선
Database 지연 업데이트 기능 추가
Distribution:
enable_database
를 켜지 않아도 분산 처리 가능하도록 수정Matchmaking:
enable_database
를 켜지 않아도 사용 가능하도록 수정Multicast:
enable_database
를 켜지 않아도 사용 가능하도록 수정Document: 분산, 매치메이킹, 멀티캐스트 문서에서
enable_database
설명 제거종료 처리 개선
Object:
db_key_string_length
,db_string_length
값 변경 적용이 안될 수 있는 버그 수정Document: 다음 항목에 대한 설명 추가 혹은 보강
copy_cache_expiration_in_ms
use_db_stored_procedure
db_string_length
,db_key_string_length
Document: Object: 새로 추가된 롤백을 감지하는 함수 설명 추가
System: Event: EventProfiler 에 이벤트 대기 시간 추가
서버가 크래시할 때 최대한 미수행 쿼리를 수행하고 종료 하도록 개선
Document: EventProfiler 통계 개선
event profiler 에 event timeout 과 object 사용 관련 통계 추가
kReadCopyNoLock
성능 개선Object: 데이터베이스 별 쿼리 처리 시간 통계 추가
Object: 테이블 DDL 이 존재하지 않을 때 export_db_schema 시 크래시하는 버그 수정
Object: 오브젝트 데이터베이스 통계에 write, read 구분하도록 수정
Document: 오브젝트 데이터베이스 통계에 write, read 구분된 설명 추가
ORM attribute 별로 String 길이 따로 줄 수 있게 수정
Object 처리 성능 개선
- Distribution¶
불필요한 Zookeeper 요청 제거
서버간 RPC 연결을 1 개로 줄임
Rpc::Call()
함수의 반환값이 Xid 에서 void 로 변경되었습니다. (Reply Handler 와 리턴값으로 예외처리가 분산되는 문제를 해결)서버간 자동으로 공유되는 Status 기능 추가
RPC 성능 개선
일부 zookeeper operation 이 실패할 경우 재시도가 아닌 FATAL LOG 로 처리되는 문제 수정
Zookeeper session timeout 을 MANIFEST 로 설정할 수 있도록 수정
서버가 크래시할 때 오브젝트 소유권을 더 빨리 해제하도록 개선
Distribution: Zookeeper 관련 처리 통계 추가
Document: Zookeeper 프로파일링 문서 추가
Distribution: ZookeeperClient 여러개 사용하도록 수정
Distribution: ZookeeperClient 별 통계 추가
Document: Distribution: ZookeeperClient 별 통계 추가
- Database¶
Redis의 key 또는 value 에 공백이 있을 때 실패하던 버그 수정
Redis::Command()
,Redis::CommandAsync()
함수가 deprecated 처리되었습니다.2016년 8월에 제거될 예정이며 새로 추가된
Redis::ExecuteCommand()
,Redis::ExecuteCommandAsync()
함수로 대체 해야 합니다.Redis: 연결이 끊겼을 때 대기하지 않고 연결끊김 처리되도록 수정
Redis: 서버 Install 단계에서 명령 사용시 레디스 연결 끊김 처리되는 문제 수정
- Network¶
Session 이 닫히면 모든 Transport 를 자동으로 닫도록 설정할 수 있는 기능 추가
session timeout 기본값을 1 시간에서 5 분으로 변경
세션이 열려 있는지 확인 가능한
IsOpened()
함수 추가 및 문서 추가CloseTransport()
직전에SendMessage()
로 보낸 메시지가 전송되지 않을 수 있는 버그 수정
- Service¶
Document: CrossServerStorage 콤포넌트 추가
Matchmaking 의 Progress CB 와 Match CB 가 직렬화되어 실행되도록 수정
- Framework¶
MANIFEST.json 에 javascript 형식의 주석을 허용하게 수정
특정 상황에서 크래시 후 종료가 안되는 버그 수정
- Time¶
Mariadb Connector 가 DateTime, Time, Date 타입을 지원하도록 수정
Timer: Timer id 값이 kInvalidTimerId 가 나올 수 있는 버그 수정
- System¶
ResourceManager 가 DateTime, Time, Date 타입을 지원하도록 수정
- misc.¶
Document: Object:
export_db_schema
옵션 관련 설명 추가Document:
Leaderboard:DeleteScoreSync()
함수 예제 오타 수정Mariadb Connector 설명 추가
Document: 빌링 에이전트에 새로 추가된 옵션 설명 추가
Document: MO 게임 제작 가이드 오타 수정
Document: MO 가이드 예제 버그 수정
Document: 매치메이킹 가이드문서 수정
object_model JSON 파일에 주석 넣을 수 있게 수정
Document: 게임 서버 관리 -> 기획 데이터 취급하기 문서 오류 수정
업데이트 채널(저장소) 선택하는 방법 문서화
String(n)
타입에 관한 설명 레퍼렌스 매뉴얼에 추가Document: Redis:
ExecuteCommand()
함수 추가Document: Redis:
ZCount
,ZRem
추가Document: Redis:
Discard
,Exec
,Multi
추가
v1.0.0-1651 (2016-08-02)¶
2016-08-02 15:52:55
- Service¶
Matchmaking 의 Progress CB 와 Match CB 가 직렬화되어 실행되도록 수정
- misc.¶
Document: Object:
export_db_schema
옵션 관련 설명 추가Document: Leaderboard:
DeleteScoreSync()
함수 예제 오타 수정
v1.0.0-1582 (2016-06-02)¶
2016-06-02 21:56:55
Warning
Breaking Changes:
Multicast 관련 업데이트를 사용하려면 최신 버전의 플러그인이 필요합니다.
새 오류 코드 (ErrorCode
) EC_CLOSED
가 추가되었으며, 해당 오류 코드를
수신하면 채널에 재입장하는 처리를 추가해야 합니다. 이를 위해 새 버전의 플러그인을
사용해야 합니다.
- Service¶
Multicast: rpc_enabled:false 일 때 실행 실패하도록 수정
Multicast: MANIFEST.json 설명에서 강조 위치가 잘못된 것 수정
Multicast: 서버간 연결 끊길 때 크래시할 수 있는 버그 수정
Authentication: Nexon Toy 추가
Authenticator: NexonToy 변경된 프로토콜 반영
MulticastServer 가 channel 갯수와 사용자 수를 반환할 수 있음.
Service:Multicast:채널 입장, 나가기 관련 처리 개선
ErrorCode
에EC_CLOSED
가 추가되었습니다. 해당 error code 를 수신하면 채널에 재입장하는 처리가 필요합니다. 이 처리를 하기 위해서는 최신의 플러그인으로 업데이트를 해야 합니다.클라이언트 리소스 목록을 CDN에서 받아오는 기능 추가
Leaderboard: 랭킹 리셋 날짜가 지나면 다음 날짜가 나오도록 수정 랭킹 리셋 날짜가 지나면 L``eaderboardResetSchedule`` 구조체 멤버인
upcoming_date_time
,next_date_time
,latest_date_time
의 값이 다음 리셋 날짜가 나오도록 수정되었습니다.
- Network¶
session context 를 multi-thread 에서 접근할 때 동기화를 위한 mutex 를 얻는 기능 추가
TCP 연결이 끊김과 동시에 새 연결이 맺어질 때 발생되는 불필요한 Assert 제거
TcpTransportDetachedHandler
가 session id 를 event tag 로 하여 실행되도록 수정서버가 구동될 때 매우 낮은 확률로 크래시할 수 있는 버그 수정
session reliability 를 사용하지 않고 TCP, HTTP 메시지의 sequence number 를 검사하여 중복 메시지를 막는 sequence number validation 기능 추가
지정된 시간 내에 ping 응답을 하지 않는 연결을 자동으로 끊는 기능 추가
서버 테스트를 위하여 다른 서버의 client 로 연결할 수 있는 기능 추가
ping sampling interval, timeout 을 session 별로 runtime 에 변경 가능하게 개선
HttpClient 를 대량으로 만들었을 때 일부 요청이 실패하는 버그 수정
긴급 메시지 전송 기능 추가
엔진에서 생성되는 thread 에 이름을 할당하도록 수정
HTTP 로 유효하지 않은 JSON message 를 받을 때 처리 개선
유효하지 않은 message 를 수신할 때 message type 을 로그로 출력
HTTP request uri 의 unescape 처리 추가
- Management¶
ApiService 를 처리할 event tag 수를 설정하는 기능 추가
AppInfo: Compatible client version Set/Get 함수 추가
RuntimeConfiguration:AppInfo 의 compatible client version 추가 다음과 같이 Http GET 으로 요청하면 compatible client versions 을 얻을 수 있습니다.
GET http://ip:api_service_port/v1/configurations/compatible_client_versions
HTTP POST 로 요청해서 compatible client versions 를 수정할 수 있습니다. HTTP body 에 JSON array type 으로 버전을 입력합니다. (비어있는 JSON array 도 입력 가능합니다.)
POST http://ip:api_service_port/v1/configurations/compatible_client_versions
RuntimeConfiguration:AppInfo 의 client_current_version 추가
ApiService log level 을 설정할 수 있는 기능 추가
ApiService: 비동기 핸들러 처리 지원
- Object¶
array type getter method 를 const 로 변경
timeout 된 event 에서 fetch 된 object 가 cache 에서 과도하게 유지되는 문제 수정
복수의 key 들로 object 를 fetch 할 때 중복된 Key 가 있으면 발생되는 불필요한 assert 제거
DB character set 을 MANIFEST 로 설정할 수 있도록 수정
Object Shard 와 별개로 Key Shard 의 연결 수를 설정할 수 있도록 수정
- Framework¶
Manifest 암호화 기능 추가
라이선스 정보를 출력하는 기능 추가 서버 실행시
--license
플래그를 지정하면 다음 형식으로 라이선스 정보를 출력합니다.License info: {"production":true,"expires":"2017-Dec-31 23:59:59"}
- Account¶
Leaderboard:랭킹 리셋 여부를 확인할 수 있는 API 추가
API 를 사용하려면 리더보드 에이전트 업데이트가 반드시 필요합니다.
- Time¶
WallClock::FromSec, MonotonicClock::FromSec 추가
서버 종료 처리 중 Timer 에서 assert 가 발생될 수 있는 문제 수정
- Distribution¶
RPC reply 를 5 초 이내에 보내지 않으면 경고하는 기능 추가
서버 실행중 Zookeeper 서버와 연결 실패시 서버 종료하도록 수정
- Database¶
Redis: 낮은 확률로 처리가 지연될 수 있는 버그 수정
- System¶
공통 event tag(timer, api service handler)는 자동으로 상속되지 않도록 수정
- Leaderboard¶
Leaderboard: 리셋 여부 확인하는 API 버그 수정
- misc.¶
한글 레퍼런스 문서 일부 수정
Document:Biller 를 서비스로 시작시키는 명령어 설명이 잘못된 것 수정
프로젝트를 생성할 때 모든 compile time warning 을 켜도록 수정
component model 설명에 최신 업데이트 반영
Document: 레퍼런스 문서의 이벤트 관련 설명 개선
Document: 패킷 리플레이 공격 차단 기능 설명 추가
미니덤프를 코어덤프로 변환하고 GDB 실행하는 스크립트 추가
flavor 를 service 로 실행할 때 log 경로가 잘못 지정되는 버그 수정
Document: 플러그인 문서 업데이트
Document: 서버 테스트 문서 업데이트
Document: 플러그인 로그 설명 추가
local launcher 로 실행할 때 MANIFEST override 를 지원하도록 수정
Document: RuntimeConfiguration 문서 추가
Document: 플러그인 디버그 로그 설명 추가
funapi_core_analyze bash script 배포가 누락된 문제 수정
이벤트 타임아웃 핸들러 설명 추가
DB 권한 설정 설명 추가
Document: 플러그인 Ping 설명 업데이트