更新履歴

NEX 3系 からの変更点のまとめについては NEX3系からの変更点 を参照してください。

Version 4.4.0 2017-12-19

機能追加/変更点

全般

マッチメイク

ドキュメントの修正点

全般

  • NEX 4.1.1 でアプリケーション設定値の製品環境、ロットチェック環境へのコピーに関する挙動の記述を NEX ガイドに移設しましたが、マニュアルからの削除漏れがあったため修正しました。
  • DateTime::GetSystemTime() について、 UTC 時刻で取得すると記載されていましたが、取得される時刻のタイムゾーンはプラットフォームに依存すると API リファレンスを修正しました。

マッチメイク

  • MatchMakingClient::GetSessionURLs() について、 QERROR(RendezVous, SessionVoid) の発生条件として P2P 通信のホスト情報が設定されていない場合を追記しました。

ランキング2

デバッグ補助

既知の不具合

  • NEX 4.4.0 のクライアントを使い、NEX 4.3.0 向けなどの古いゲームサーバーにログインしようとすると QERROR(Core, Timeout) の結果となります。古いゲームサーバーに接続しようとすると本来は QERROR(Authentication, ServerVersionIsOld) の結果となります。

Version 4.3.0 2017-10-31

機能追加/変更点

マッチメイク

データストア

  • データの論理削除と物理削除」について、論理削除状態へ変更されたときのデータの有効期限を変更しました。
  • データ ID を指定して DataStore サーバーにメタ情報をアップロードする DataStoreClient::PostObject() において DataStorePreparePostParam::SetPeriod() でデフォルト期限以外を指定してアップロードした場合にエラーとしていたのを、エラーではなく指定された期限は無視して無期限にするようにしました。
  • データ ID とデータコード文字列の間の変換を行う WebAPI を追加しました。詳細は 「データコード文字列の変換」を参照してください。

ランキング2

デバッグ補助

不具合修正点

全般

  • ProtocolCallContext のコンストラクタに Credentials を渡して RMC を発行する場合、事前に ServiceClient (DataStore を除く) に対して任意の Credentials をバインドしていないと非同期処理が完了しない問題がありました。これを修正しました。

マッチメイク

  • ある NEX ユニーク ID をプリンシパル ID に紐付けた後に紐付けを解除し、再度同じ NEX ユニーク ID とプリンシパル ID を紐付けた後に MatchmakeRefereeClient::GetOrCreateStats() を呼び出すと QERROR(MatchmakeReferee, AlreadyExists) の結果となってしまう問題を修正しました。

ドキュメントの修正点

全般

  • ログ出力設定」に NEX ライブラリのログの有効化について説明を追加しました。
  • データストアの WebAPI のドキュメントに、いままで利用可能だったが記載されていなかったパラメーターを追記しました。

マッチメイク

  • AutoMatchmakeOption の API リファレンスに AUTO_MATCHMAKE_OPTION_UNIQUE_GATHERING_BY_CODEWORD の説明を追加しました。
  • MatchmakeExtensionClient::AutoMatchmake() の API リファレンスに AUTO_MATCHMAKE_OPTION_UNIQUE_GATHERING_BY_CODEWORD に関するエラーの説明を追加しました。

ランキング2

サンプルデモ

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 を指定できるようにしました。

デバッグ補助

NetZ

ドキュメントの修正点

全般

マッチメイク

Version 4.1.1 2017-02-24

機能追加/変更点

全般

  • CTR 向け NEX4 の初期公開バージョンです。
  • 変更点の詳細は、NEX3系からの変更点 を参照してください。