更新履歴
NEX 3系 からの変更点のまとめについては NEX3系からの変更点 を参照してください。
Version 4.4.0 2017-12-19
機能追加/変更点
全般
- Chrono::Pause() 、Chrono::Check() 、Chrono::Stop() の返り値の型を TimeInterval から LargeTimeInterval に変更しました。
- Pacer::GetStats() の引数の型を TimeInterval から LargeTimeInterval に変更しました。
マッチメイク
- MatchmakeReferee 機能に個人統計を取得する WebAPI を追加しました。詳細は「個人統計の取得」を参照してください。
- MatchmakeReferee 機能に個人統計をリセットする MatchmakeRefereeClient::ResetStats() とその WebAPI を追加しました。 WebAPI の詳細は「個人統計のリセット」を参照してください。
ドキュメントの修正点
全般
- NEX 4.1.1 でアプリケーション設定値の製品環境、ロットチェック環境へのコピーに関する挙動の記述を NEX ガイドに移設しましたが、マニュアルからの削除漏れがあったため修正しました。
- DateTime::GetSystemTime() について、 UTC 時刻で取得すると記載されていましたが、取得される時刻のタイムゾーンはプラットフォームに依存すると API リファレンスを修正しました。
マッチメイク
- MatchMakingClient::GetSessionURLs() について、 QERROR(RendezVous, SessionVoid) の発生条件として P2P 通信のホスト情報が設定されていない場合を追記しました。
ランキング2
- 「シーズン情報の初期化」WebAPI について、本 API 使用直後にシーズン情報を取得したい場合、数秒間待ってから行う必要がある旨を記載しました。
- 「ランキングチャートデータの取得」の昇順、降順の記述が誤っていたので正しく修正しました。
デバッグ補助
- 「API名対応表」に、MatchmakeRefereeClient::ResetStats() 、 Ranking2Client::GetEstimateScoreRank() と Ranking2Client::GetRankingChart() についての情報を追加しました。
既知の不具合
- NEX 4.4.0 のクライアントを使い、NEX 4.3.0 向けなどの古いゲームサーバーにログインしようとすると QERROR(Core, Timeout) の結果となります。古いゲームサーバーに接続しようとすると本来は QERROR(Authentication, ServerVersionIsOld) の結果となります。
Version 4.3.0 2017-10-31
機能追加/変更点
マッチメイク
- 「スコア換算設定のセット」と「スコア換算前の変換設定のセット」で、 設定できる score_setting を最大 200 個から最大 400 個に増やしました。また、同じ setting_index と type ごとの値は最大 16 個から最大 64 個に増やしました。
- 「スコア換算前の変換設定のセット」の value で -1 を指定すると無変換になるようにしました。
データストア
- 「データの論理削除と物理削除」について、論理削除状態へ変更されたときのデータの有効期限を変更しました。
- データ ID を指定して DataStore サーバーにメタ情報をアップロードする DataStoreClient::PostObject() において DataStorePreparePostParam::SetPeriod() でデフォルト期限以外を指定してアップロードした場合にエラーとしていたのを、エラーではなく指定された期限は無視して無期限にするようにしました。
- データ ID とデータコード文字列の間の変換を行う WebAPI を追加しました。詳細は 「データコード文字列の変換」を参照してください。
ランキング2
- スコアのヒストグラムを作成する ランキングチャート 機能を追加しました。ランキングチャートのデータを取得する Ranking2Client::GetRankingChart() を追加しました。
- スコアから順位を推定する Ranking2Client::GetEstimateScoreRank() を追加しました。最低順位より上位の場合には正しい順位が、下位の場合には推定順位が取得できます。
- ポピュレーションの WebAPI で、 正規分布と対数正規分布 のデータを生成できるようにしました。また、データ生成の上限を 1 万件から 2 万件にしました。
- スコア削除の WebAPI のカテゴリ指定削除、もしくは、全削除時に、結果として削除されたスコア総数を返していましたが、削除されたカテゴリとシーズンの組の数を返すようにしました。
デバッグ補助
- 「エラーシミュレーションの実行ログの取得」WebAPI について facility、error_code、network_error_code をレスポンスボディに追加しました。
不具合修正点
全般
- ProtocolCallContext のコンストラクタに Credentials を渡して RMC を発行する場合、事前に ServiceClient (DataStore を除く) に対して任意の Credentials をバインドしていないと非同期処理が完了しない問題がありました。これを修正しました。
マッチメイク
- ある NEX ユニーク ID をプリンシパル ID に紐付けた後に紐付けを解除し、再度同じ NEX ユニーク ID とプリンシパル ID を紐付けた後に MatchmakeRefereeClient::GetOrCreateStats() を呼び出すと QERROR(MatchmakeReferee, AlreadyExists) の結果となってしまう問題を修正しました。
ドキュメントの修正点
全般
マッチメイク
- AutoMatchmakeOption の API リファレンスに AUTO_MATCHMAKE_OPTION_UNIQUE_GATHERING_BY_CODEWORD の説明を追加しました。
- MatchmakeExtensionClient::AutoMatchmake() の API リファレンスに AUTO_MATCHMAKE_OPTION_UNIQUE_GATHERING_BY_CODEWORD に関するエラーの説明を追加しました。
ランキング2
- 「ランキングチャート」、「ランキングチャートデータ設定 API」、「ランキングチャートデータ API」を追加しました。
- 「順位推定」を追加しました。
- 「データのポピュレーション」に、正規分布と対数正規分布でのデータ生成の説明を追加しました。
サンプルデモ
- Ranking2 のサンプルデモでランキングチャート関連の API (Ranking2Client::GetRankingChart()) を呼び出すようにしました。
Version 4.2.0 2017-06-09
機能追加/変更点
全般
- VSocket を公開しました。VSocket を使うと NEX のサーバー機能や NAT トラバーサル機能や暗号化・改ざん検知機能を利用しつつクライアント同士の P2P 通信に任意のサードパーティー製のネットワークエンジンを利用できるようになります。
- VSocket::ProbeStations() の第三引数でタイムアウト時間を指定できましたが、内部で自動的にタイムアウト値を設定するようにし、指定した値を無視するように変更しました。また、タイムアウトする場合は以前は QERROR(Core, Timeout) の結果となっていましたが、QERROR(Transport, NatTraversalError) となるようにしました。
- Initialize() 及び Finalize() を新規追加しました。この関数を使うと Core オブジェクトの初期化タイミングを制御できます。意図しないタイミングで初期化されて正しくスレッドモードなどが設定されないという問題を防ぎます。Initialize() 及び Finalize() の呼び出しは必須ではありません。
- GlobalVariables::AcquireInstance() 及び GlobalVariables::ReleaseInstance() の呼び出しを不要にしました。これまで通り呼び出していても問題ありません。
- ゲームサーバーとの接続が切れた場合、従来は QERROR(Transport, ConnectionFailure) が NgsFacade::IsConnected() から返されたり非同期処理の結果として取得されましたが、 QERROR(RendezVous, ConnectionDisconnected) が返されるようにしました。
- CallContext::Cancel() を呼び出して状態が CallContext::CallCancelled となった場合は CallContext::GetOutcome() で結果を取得できない仕様でしたが、結果を取得できるように仕様を変更し QERROR(Core, Cancelled) の結果となるようにしました。
- CallContext (及びそのサブクラス) に CallContext::RegisterCompletionCallbackGeneric() を新規追加しました。これを使うと CallContext- を引数に取る任意の関数ポインタ、関数オブジェクト、ラムダ式をコールバックに指定できます。AddCallContextArgumentAdapter() を併用することで引数を取らない関数を指定することもできます。
- ほとんどの RMC の非同期処理関数呼び出しではサーバーから切断されている場合に false を返していました。このケースでも非同期処理を開始し、true を返すように変更しました。これにより非同期処理関数から false が返されるケースは使用中の CallContext オブジェクトを指定したケースに限定されます。ただし、非同期処理を行う関数が qBool を返さない場合や、特記事項がある場合は API リファレンスの記載に従ってください。
- CallContext::RegisterCompletionCallback() でコールバックを設定して RMC の非同期処理を呼び出したときに、関数から戻る前に関数内部からコールバックされるケースがありました。(サーバーから切断されている状態で RMC を呼び出したときなど) この場合に関数内部からコールバックせずに Scheduler::Dispatch() からコールバックするように変更しました。
- これまでは Scheduler::Dispatch(), Scheduler::DispatchAll(), CallContext::Wait() はそれぞれお互いに複数のスレッドから並列に呼び出せませんでしたが、スレッドセーフモードの場合は呼び出せるようにしました。(CallContext::Wait() 同士や Scheduler::Dispatch() 同士でも並列に呼び出せます。呼び出しがお互いにブロックし合うこともありません。) この変更に伴い、Scheduler::Dispatch() は残った実行可能なジョブの数を返す仕様でしたが必ず 0 を返すように変更しました。
- CallContext::WaitWithoutDispatch() を新規追加しました。この関数は内部で Scheduler::Dispatch() を呼び出さないため、スレッドアンセーフモードの場合でも Scheduler::Dispatch() を並列に呼び出すことができます。
- Scheduler::GetReadyJobsSize() を新規追加しました。これは現在実行可能なジョブの数を返します。
- ThreadedJob を新規追加しました。これは任意の処理を別のスレッドで非同期処理として実行するものです。
- スレッドアンセーフモードときに NEX のスレッドアンセーフ API を複数のスレッドから同時に呼び出した場合に、警告をデバッグログに出力すると共に Assert により実行を停止するようにしました。この機構はリリースビルド以外で有効になります。また、 CriticalSection::SetEnableDetectRaceCondition(), CriticalSection::GetEnableDetectRaceCondition() を新規追加しました。この関数はこのスレッド競合をチェックする機構を無効化するものです。これらの関数はテスト目的でのみ使用可能です。
- String::GetLiteralStringAs() 及び String::LiteralStringHolder を新規追加しました。これを使うと String オブジェクトから qChar8 や qChar16 に容易に変換出来ます。
- 短い文字列を String に格納する場合はメモリ確保を伴わないようにしました。これにより String::String(String::NoAllocTag) はデフォルトコンストラクタと同じ挙動になります。今までは String オブジェクトに代入したときはメモリ確保を伴いましたが、すでに確保されているバッファより小さい文字を代入する場合はメモリ確保をしないようにしました。
- String::ShrinkToFit() を新規追加しました。内部のバッファを文字列長に切り詰めます。
- String::Capacity() を新規追加しました。メモリの再確保なしに格納できる文字列長(終端含まない)を返します。
- String::Reserve() は終端を含めた長さを指定する仕様でしたが、終端を含めない長さを指定する仕様に変更しました。
- String::SetBufferPtr() を非公開にしました。
- String::SetStringToPreReservedBuffer() を非公開にしました。
- ServiceClient::Bind() 及び ServiceClientを継承しているクラスの Bind() は一つのオブジェクトにつき一度しか呼び出せませんでしたが、一度 Credentials をバインドしていても再度 Bind() を呼び出してバインドする Credentials を変更できるようにしました。また、Unbind() を Bind() が呼び出されていなくても呼び出せるように変更しました。
- Scheduler::Dispatch() にかかる CPU 負荷を軽減しました。定常的な呼び出し時に 3 割程度 CPU 時間が削減されます。
- SingleStepJob::OnCancelled() を新規追加しました。SingleStepJob::OnCancelled() をオーバーライドすると非同期処理中にキャンセルされた場合に呼び出されます。
マッチメイク
- オートマッチメイクのあいことば機能を利用する際に、同一のあいことばに対して 1 つのみマッチメイクセッションを作成する設定ができるようになりました。AutoMatchmakeParam::SetAutoMatchmakeOption() で AUTO_MATCHMAKE_OPTION_UNIQUE_GATHERING_BY_CODEWORD を指定することにより利用が可能です。
- プリンシパル ID を指定したマッチメイクセッションの検索時に指定可能なプリンシパル ID のリストの最大サイズの定数名が適切でなかったため、従来の MAX_MATCHMAKE_BROWSE_SIZE_BY_PARTICIPANT を MAX_PRINCIPALID_SIZE_TO_FIND_MATCHMAKE_SESSION に置き換えました。従来の MAX_MATCHMAKE_BROWSE_SIZE_BY_PARTICIPANT は非公開となりますが利用可能です。
- MatchMakingClient::GetParticipantsURLs() を公開しました。これは VSocket::ProbeStations() と併用するためのものです。
- MatchMakingClient::GetParticipantsURLs() はギャザリングが存在しない場合に空の StationURL のリストを取得する動作をしていましたが、その場合に QERROR(RendezVous, SessionVoid) の結果となるようにしました。また、ギャザリングの参加者でなくても取得できましたが、参加者で無い場合は QERROR(RendezVous, PermissionDenied) の結果となるようにしました。
- MatchMakingClient::EndParticipation(), MatchMakingClient::GetDetailedParticipants(), MatchMakingClient::GetSessionURLs(), MatchMakingClient::MigrateGatheringOwnership(), MatchmakeExtensionClient::UpdateProgressScore() の各 API で、INVALID_GATHERINGID が引数に渡された場合に QERROR(Core, InvalidArgument) の結果となるようにしました。また、この場合リリースビルド以外では Assert により停止します。以前は false を返し非同期処理を開始しないという動作をしていました。
データストア
- DataStoreClient::PostObject() の引数 dataId に NULL を指定できるようにしました。
デバッグ補助
- 「登録済みのエラーシミュレーション設定の取得」WebAPI について facility、error_code、network_error_code をレスポンスボディに追加しました。
NetZ
- スレッドセーフモードでは Station::GetApprovedStationNum() 呼び出し時 Scheduler::SystemLock() を取得していないと Assert により停止していましたが、Scheduler::SystemLock() の取得を不要にしました。
ドキュメントの修正点
全般
- すべての通知イベントを取得するためには NgsFacade::RegisterNotificationEventHandler() を NgsFacade::Login() よりも前に呼び出す必要がある旨を記載しました。
- 「共通で発生するエラー」を追加しました。全ての API で共通で発生するエラーについての説明を記載しています。
- 推奨するスレッドモードを Core::ThreadModeUnsafeTransportBuffer から Core::ThreadModeSafeTransportBuffer に変更しました。
- String::CopyString() は NULL 終端を含めない長さを返すと記載されていましたが、NULL 終端を含めた長さを返すと API リファレンスを修正しました。
- ServiceClient::Bind() 及び ServiceClientを継承しているクラスの Bind() は与えられた Credentials が NULL でない限り true を返すと記載しました。また、Unbind() は明示的に呼び出す必要はないことを記載しました。
マッチメイク
- 「メンテナンス開始通知イベントをハンドリングする」の記述を NEX4 での挙動に合わせて訂正しました。
Version 4.1.1 2017-02-24
機能追加/変更点
全般
- CTR 向け NEX4 の初期公開バージョンです。
- 変更点の詳細は、NEX3系からの変更点 を参照してください。