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_connectiontrue 값으로 추가하여 기능을 활성화 할 수 있습니다.

    • 소켓에서 인지할 수 없는 네트워크 장애가 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
  • CurlHttpClient 객체의 내부 구현을 개선했습니다.

    • 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 내부에서 소멸시키지 않습니다. 따라서 요청을 호출하는 쪽에서 해당 객체를 소멸해야 합니다.

  • HttpClientDELETE 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 객체를 서버에 연결하면 서버 쪽 암호화 방식을 따라서 동작합니다.

    • 단, Chacha20AES128 를 사용할 경우에는 funtest::Network::Optionserver_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 객체를 서버에 연결하면 서버 쪽 암호화 방식을 따라서 동작합니다.

    • 단, Chacha20AES128 를 사용할 경우에는 funtest::Network::Optionserver_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::NetworkMANIFEST/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::NetworkMANIFEST/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_pingping_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-5588 (2020-07-15)

2020-07-15 10:29:46

Note

이 버전은 아이펀 엔진 윈도우 버전만 배포되었습니다.

Windows
+ VC++ Unicode 지원에 의해서 아이펀 엔진의 몇몇 함수 이름이 변경되어 컴파일에

실패하는 문제를 수정했습니다.

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()

  • FunapiSessionUDP 트랜스포트를 사용할 때, 클라이언트가 보내는 초기화 메시지를 처리하는 동작이 추가됐습니다.

  • 클라이언트 요청으로 세션을 닫는 서버 쪽 구현이 추가됐습니다.

    • 차후 클라이언트 플러그인 업데이트를 통해서 해당 기능을 사용할 수 있습니다.

    • SessionClose 핸들러의 reason 항목으로 kClosedForClientRequest 가 추가됐습니다.

Object
  • 다음 함수들의 이름이 변경됐습니다.

    변경 전

    변경 후

    DebugGetEventName()

    GetEventName()

    DebugSetEventName()

    SetEventName()

  • ORM 기능의 DateTime 타입을 Map, Array 로 사용할 수 있도록 수정했습니다.

    • DateTime ArrayFindFirstEmptySlot() 함수를 호출하면 WallClock::kEpochClockEmpty 로 판단합니다.

  • ORM 기능의 C# 인터페이스가 추가됐습니다.

    • ArrayRef<T>.Match(Func<T, bool>) 조건과 일치하는 원소의 목록을 반환합니다.

    • ArrayRef<T>.CountIf(Func<T, bool>) 조건과 일치하는 원소의 갯수를 반환합니다.

Network
  • FunapiSessionUDP 트랜스포트를 사용할 때, 클라이언트가 보내는 초기화 메시지를 처리하는 동작이 추가됐습니다.

    • 클라이언트 플러그인도 함께 업데이트해야 합니다.

    • 클라이언트 플러그인 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/SessionServiceclose_session_when_event_timeout 를 추가하고 true 로 설정하면 엔진은 Event 타임아웃이 발생했을 때, 연관된 세션을 닫고 세션 닫힘 핸들러(OnSessionClosed) 가 호출합니다.

    • 이렇게 함으로써 Event 타임아웃 핸들러에서 세션을 정리해야 하는 수고를 덜 수 있으며 게임 서버 코드의 일관성을 확보할 수 있습니다.

    • Event 타임아웃 후 불리는 세션 닫힘 핸들러의 Event 태그는 세션 ID 가 아니니 주의 하시기 바랍니다.

  • 이제 Ping 기능 사용할 때, 웹소켓 프로토콜을 사용하도록 지정할 수 있습니다.

    • MANIFEST/SessionServiceping_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 레벨 로그를 출력하도록 변경했습니다.

misc.
  • 이제, Mono 라이브러리의 최신버전(6.8)을 지원합니다.

    • 아이펀 엔진은 Mono 라이브러리 버전 4.x, 5.x, 6.x 에서 동작하는 것을 확인 했습니다만, 가급적 Mono 라이브러리 6.8 버전을 사용하도록 설정 해 주시기 바랍니다. (참고)

    • 특히, Visual Studio Code 로 개발하는 경우는 반드시 설정 해 주시기 바랍니다.

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 를 사용할 때 각 샤드에 대해서 DatabaseAUTH 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_hostsrpc_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::SessionSession 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 파일SessionServicedo_not_copy_protobuf_message_when_sendtrue 로 설정하면 엔진 내부에서 프로토버프 메시지를 복사하지 않습니다.

    • 이 기능을 사용할 때는 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# 프로젝트엔진 APINull 인자 가 입력될 경우 Assert 대신 ArgumentNullExceptionThrow 하도록 수정했습니다.

  • 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 가 발생하지 않고도 서버의 응답 속도가 느려지는 증상이 나타나면 MANIFESTnetwork_io_threads_size 설정을 조절 해 보시기 바랍니다.

  • CentOS 7 운영체제에서 libcurl 라이브러리의 동작이 중복된 소켓 지시자를 만들 수 있는 문제를 보완하도록 수정했습니다.

  • 세션 메시지 로깅 기능에 메시지 타입에 대한 필터링 기능이 추가되었습니다.

    • MANIFEST 파일에 SessionService->session_message_logging_excluded 설정을 추가하고, 메시지 타입을 의미하는 정수값 또는 문자열을 등록하면 등록된 메시지 타입에 해당하는 메시지는 출력하지 않습니다.

Object
  • 하나의 이벤트가 실행되는 동안 오브젝트를 생성하고 바로 삭제한 뒤 같은 오브젝트에 바로 접근할 때, null 포인터를 반환하는 대신 이벤트 타임아웃이 발생하는 문제를 수정했습니다.

System
  • 이제, ResourceManager 기능이 MySQLTIMESTAMP 타입을 지원합니다.

  • 같은 이벤트 태그를 부여밭은 이벤트들의 순서 처리 성능을 개선했습니다.

  • 이벤트 프로파일링 기능 중 일부 수치의 계산 오류를 수정했습니다.

    • 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

다음 변경사항으로 인해 서버를 다시 빌드해야 합니다.
  • 이제, RedisClientDisconnect Callback 을 추가할 수 있습니다.

Service
  • 이제, Facebook 이나 Line 같은 외부 서비스의 인증 검증을 지원하는 함수를 동기 방식으로 사용하면 경고 메시지를 출력합니다.

    • Nexon Toy, Nexon Platform 도 포함합니다.

    • 동기방식의 함수는 테스트를 위헤 제공하고 있으며 성능저하를 일으킬 수 있기 때문에 비동기 방식의 함수를 사용 해 주시기 바랍니다.

Database
  • 이제, RedisClientDisconnect Callback 을 추가할 수 있습니다.

  • RedisClient 에 연결 타임아웃 12 초를 적용했습니다.

Object
  • 이벤트 타임아웃 발생 시 롤백 원인을 로그로 출력하는 기능을 추가했습니다.

    • MANIFEST 파일EventDispatcherlog_rollback_causes_last_n 설정을 추가하면 이 값 만큼 롤백에 대한 원인을 로그에 출력합니다.

  • MANIFEST 파일RpcServicerpc_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

Warning

Breaking Changes

다음 변경사항으로 인해 서버를 다시 빌드해야 합니다.
  • 이제 분산 환경에서 오브젝트 락 타입을 업그레이드 할 수 있습니다.

Object
  • 이제 분산 환경에서 오브젝트에 대한 잠금 업그레이드를 지원합니다.

  • kReadCopyNoLock 타입으로 오브젝트를 읽을 때, 다른 쓰레드에서 kWriteLock 으로 쓴 값이 반영되는 문제를 수정했습니다.

  • 엔진에서 이벤트를 처리하는 과정에서 발생하는 타임아웃과 오류에 대한 로그를 보다 명확하게 출력하도록 개선했습니다.

  • 오브젝트 반환을 요청한 이벤트가 타임아웃될 때 크래시 할 수 있는 문제를 수정했습니다.

System
  • 종료처리 시 최대 대기 시간을 60 초에서 20 초로 변경하였습니다.

Network
  • 세션 기능에 대한 로그를 보다 명확하게 남기도록 변경했습니다.

misc.
  • 데디케이티드서버 호스트 에이전트 서비스에 user_data 설정값을 추가했습니다.

  • 이제 18.04 bionic 운영체제를 지원합니다.

  • iFun Engine 1.0.0-4183 이상 버전에서 데디케이티드서버 호스트 이에전트 서비스를 실행할 수 없는 문제를 수정했습니다.

v1.0.0-4200 (2019-07-10)

2019-07-10 10:30:20

Object
  • 주키퍼 동작 관련 기능들의 안정성을 개선했습니다.

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 에서 사용하는 GooglePlayGameAuthenticationRequestGooglePlayGameAuthenticationResponse 객체에 app_id 대신 사용할 app_provider_client_id 멤버변수를 추가했습니다.

    • app_provider_client_idapp_id 와 동일하며 차후 완전히 대체할 예정입니다.

Service
  • 이제 Steam 플랫폼의 사용자 인증 기능을 지원합니다.

    • 사용자가 Steam 에 로그인하고 게임에 접속했는지 엔진을 통해서 검증 할 수 있습니다.

  • Google Play 플랫폼 인증과 관련한 API 에서 사용하는 GooglePlayGameAuthenticationRequestGooglePlayGameAuthenticationResponse 객체에 app_id 대신 사용할 app_provider_client_id 멤버변수를 추가했습니다.

    • app_provider_client_idapp_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.jsonSesisonTimeout 속성을 덮어씁니다.

  • 이제부터 세션 타임아웃 값을 0으로 설정할 경우 타임아웃 기능을 비활성화 합니다. (기존에는 타임아웃 0초로 설정하면 바로 타임아웃이 발생.)

Object
  • Event Profiling 결과 내 특정 항목의 오차를 개선했습니다.

  • Event Profiling 결과에 존재하지 않는(NULL) 오브젝트에 대한 접근 비율 을 추가했습니다.

  • Event Profiling Summary 에 오브젝트 관련 통계를 추가했습니다.

  • Slow Event 로그 에 좀더 자세한 정보를 포함하도록 개선했습니다.

Service
  • AccountManaget::SetLoggedOutGlobal 함수가 특정 상황에서 실패하면 재시도하도록 수정했습니다.

    • Zookeeper 연결이 닫혔거나 재연결을 진행하는 도중에 이 함수를 호출할 경우에 한하여 3초 후 다시 시도합니다.

System
  • 로그 파일을 삭제하지 못하고 실패했을 때, 예외를 처리하여 로그를 출력하도록 개선했습니다.

  • Event ThreadTPS 를 볼 수 있는 funapi/event_thread 카운터를 추가했습니다.

  • Event TagQueue 의 길이를 볼 수 있는 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_validationtrue 로 설정하면 DB 스킴을 검사해야 할 때, 전체 Table 및 Procedure 에 대한 검사는 생략합니다. 만약, DB 스킴을 업데이트 해야 하는 상황에서 이 플래그가 설정되어 있다면, 오류 메시지를 출력하고 서버는 종료합니다.

Network
  • HTTP TransportApiService 를 사용할 때, 바디 길이가 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 ConnectorCreate() 함수에 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) 규격을 지원하기 위한 설정을 추가했습니다.

  • 메시지 압축 기능을 사용할 경우 서버 시작 시 관련 로그를 출력하도록 변경했습니다.

  • 아이펀 엔진에서 세션을 닫을 때 간헐적으로 마지막 메시지를 누락하는 문제를 수정하였습니다.

  • 세션 메시지 핸들러 후킹 내용 중, 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::FromStreamkAllowComment 옵션을 추가하면 기존과 동일하게 사용할 수 있습니다.

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-3487 (2018-08-08)

2018-08-08 10:40:00

Network
  • 압축 기능 사용할때 에이전트와 통신이 실패하는 문제 수정

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_idinstance_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-2591 (2018-01-12)

2018-01-12 08:47:46

Network
  • funtest::Session 의 TCP 닫힐 때 상태 정보 문제 수정

v1.0.0-2586 (2018-01-09)

2018-01-09 08:32:14

Warning

Breaking Changes

다음의 변경 사항으로 인해 funtest::Session 을 사용하는 경우
서버를 다시 빌드해야 합니다.
  • funtest::Session 이 RedirectClient 처리할 수 있게 수정

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-2574 (2018-01-02)

2018-01-02 15:23:00

Management
  • ApiService Port 가 0 일 때 서버 구동이 안되는 문제 수정

v1.0.0-2570 (2018-01-02)

2018-01-02 03:05:48

Management
  • ApiService 가 완전히 초기화된 후 요청을 받도록 수정

v1.0.0-2562 (2017-12-29)

2017-12-29 13:31:59

Service
  • Matchmaking 통계 출력 문제 수정.

  • Matchmaking 통계에서 매칭 min/max 초기값을 0으로 수정.

Management
  • API service 의 URL 처리 로그에 bytes 길이도 출력하도록 수정.

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-2542 (2017-12-26)

2017-12-26 10:42:12

Service
  • API 처리 시 특정 상황에서 레이스 컨디션이 발생하는 문제 수정

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-2417 (2017-10-16)

2017-10-16 17:20:05

Management
  • 캠페인 보상 정보 파싱 버그 수정 (C#)

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-2377 (2017-09-21)

2017-09-21 10:34:25

Object
  • ORM 의 메모리 사용량 관련 문제 수정

v1.0.0-2363 (2017-09-15)

2017-09-15 14:21:08

Network
  • Protobuf field 로 메세지 핸들러 등록시 메모리릭이 발생되는 문제 수정

  • Protobuf field 로 메시지 핸들러 등록시 이름에 > 가 포함되는 버그 수정

Framework
  • 크래시할 때 엔진 버전을 로그로 출력

v1.0.0-2337 (2017-09-04)

2017-09-04 23:18:55

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-2292 (2017-08-22)

2017-08-22 09:42:50

Service
  • DeployApiService: 아이템 회수 명령 인자 설정 버그 수정

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-2086 (2017-05-10)

2017-05-10 16:35:04

misc.
  • CentOS7 rapidjson 업데이트로 인해 서버 실행안되는 문제 수정.

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-1894 (2016-12-13)

2016-12-13 18:29:15

Object
  • 오브젝트 마이그레이션툴에서 값이 설정되지 않은 필드의 처리가 잘못되는 버그 수정

v1.0.0-1890 (2016-12-09)

2016-12-09 10:19:05

Object
  • 오브젝트 마이그레이션툴에서 추출 완료된 파일을 덮어쓸 수 있는 문제 수정

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:채널 입장, 나가기 관련 처리 개선

  • ErrorCodeEC_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 설명 업데이트