セッション操作をカプセル化するクラスです。 [詳解]
#include <NetZ/src/Core/DOCore/Session.h>
公開型 | |
typedef void(* | JoinSessionOperationCallback) (JoinSessionOperation *pOperation) |
セッションへの参加可否を決定するためのコールバックです。 [詳解] | |
公開メンバ関数 | |
Session () | |
Sessionクラスのインスタンスは自動的に作成されます。ユーザーはこのコンストラクタを呼び出さないでください。 [詳解] | |
virtual | ~Session () |
Sessionクラスのインスタンスは自動的に破棄されます。ユーザーはこのデストラクタを呼び出さないでください。 [詳解] | |
qBool | CheckGameIsOver () |
Net-Zのセッションが終了中であるかどうかを取得します。 [詳解] | |
void | DestroySession () |
ネットワークから切断されたときに、フォルト処理なく強制的にセッションから離脱する関数です。 [詳解] | |
qBool | GameOver () |
すべてのセッション参加者にこのセッションが終了したことを通知します。 [詳解] | |
size_t | GetNumOfRoutingConnections () |
セッション全体に存在するマスター経由通信の数を取得します。 [詳解] | |
const qChar * | GetSessionName () |
このセッションの名前を取得します。 [詳解] | |
qUnsignedInt32 | GetUserDefinedState () |
ユーザー定義の値を取得します。 [詳解] | |
virtual void | OperationBegin (DOOperation *pOperation) |
複製オブジェクトシステム操作が開始されるたびに呼び出されます。 [詳解] | |
virtual void | OperationEnd (DOOperation *pOperation) |
複製オブジェクトシステム操作が終了されるたびに呼び出されます。 [詳解] | |
qBool | SetUserDefinedState (qUnsignedInt32 uiNewState) |
ユーザー定義の値を設定します。 [詳解] | |
virtual void | Trace (qUnsignedInt64 uiTraceFlags) const |
この複製オブジェクトの状態をトレースします(デバッグ用)。 [詳解] | |
静的公開メンバ関数 | |
static qBool | CreateOrJoinSession (void(*pfCreateCallback)()=NULL, SessionDescription *(*pfSessionSelection)(qList< SessionDescription > &lstSessions)=NULL) |
セッションへの参加を試み、失敗した場合はセッションを新規作成します。 [詳解] | |
static qBool | CreateSession (const qChar *szSessionName=NULL, qBool bNetworked=true) |
セッションを作成します。 [詳解] | |
static size_t | GetDetectStationInconsitencyThresholdCount () |
ステーション不一致を検出するチェック回数の閾値を取得します。 [詳解] | |
static Session * | GetInstance () |
Sessionオブジェクトのインスタンスを取得します。 [詳解] | |
static DOHandle | GetInstanceHandle () |
Sessionオブジェクトの複製オブジェクトハンドルを取得します。 [詳解] | |
static SessionDescription * | GetLocalSessionDescription () |
ローカルステーションのセッション記述子へのポインタを取得します。 [詳解] | |
static qByte | GetRole () |
セッションオブジェクトに対する役割を取得します。 [詳解] | |
static TimeInterval | GetSyncStationListInterval () |
ステーション不一致を検出するためセッションマスターからステーション数を通知する間隔取得します。 [詳解] | |
static qBool | JoinSession (const StationURL &refStationURL) |
セッションに参加します。 [詳解] | |
static qBool | JoinSession (const qChar *szMachine) |
セッションに参加します。 [詳解] | |
static qBool | JoinSession (SessionDescription *pSessionDescription) |
セッションに参加します。 [詳解] | |
static qBool | JoinSession (const qList< StationURL > &lstURLs) |
セッションに参加します。 [詳解] | |
static qBool | JoinSession (CallContext *pCallContext, const StationURL &refStationURL) |
セッションに参加します。 [詳解] | |
static qBool | JoinSession (CallContext *pCallContext, const qList< StationURL > &lstStationURL) |
セッションに参加します。 [詳解] | |
static size_t | QuerySessions (qList< SessionDescription > *pOutputList, qBool bFilterMatching=true, qUnsignedInt32 uiTimeout=1000) |
LAN上に存在するセッションを検索します。 [詳解] | |
static qBool | QuerySessions (CallContext *pContext, qList< SessionDescription > *pOutputList, qBool bFilterMatching=true, qUnsignedInt32 uiTimeout=1000) |
LAN上に存在するセッションを検索します。 [詳解] | |
static JoinSessionOperationCallback | RegisterJoinApprovalCallback (JoinSessionOperationCallback pfOperationCallback) |
セッションへの参加可否を決定するためのコールバックを設定します。 [詳解] | |
static void | SetDetectStationInconsitencyThresholdCount (size_t count) |
ステーション不一致を検出するチェック回数の閾値を指定します。 [詳解] | |
static void | SetSyncStationListInterval (TimeInterval time) |
ステーション不一致を検出するためセッションマスターからステーション数を通知する間隔を設定します。 [詳解] | |
非公開型 | |
typedef RefTemplate< DuplicatedObject > | Ref |
複製オブジェクトへの安全な参照を行うためのtypdef | |
typedef SelectionIteratorTemplate< DuplicatedObject > | SelectionIterator |
複製オブジェクトを列挙するためのイテレータのtypedef | |
非公開メンバ関数 | |
virtual qBool | ApproveEmigration (qUnsignedInt32 uiReason) |
複製オブジェクトがマイグレーションを行うかどうかを返します。 [詳解] | |
virtual qBool | ApproveFaultRecovery () |
複製オブジェクトに障害回復機能をつけるかどうかを返します。 [詳解] | |
qBool | AttemptEmigration (DOHandle hNewLocation) |
この複製オブジェクトを指定されたステーションに対してエミグレーションさせます。 [詳解] | |
virtual qReal | ComputeDistance (DuplicatedObject *pOtherObject) |
推測航法において、距離ベースの推定エラーを計算する際の距離計算を行います。 [詳解] | |
qBool | CreateDuplica (DOHandle hNewDuplicaStation) |
この複製オブジェクトのデュプリカを作成します。 [詳解] | |
qBool | DeleteMainRef () |
複製オブジェクトの主参照を削除するように指示します。 [詳解] | |
qBool | Emigrate (MigrationContext *pContext, DOHandle hTargetStation) |
この複製オブジェクトを指定されたステーションに対してエミグレーションさせます。 [詳解] | |
const qChar * | GetClassNameString () const |
複製オブジェクトのクラス名を文字列として取得します。 [詳解] | |
const qChar * | GetDatasetNameString (qByte byDatasetIndex) const |
この複製オブジェクトに関連付けられているデータセットの名称を取得します。 [詳解] | |
DOClassID | GetDOClassID () const |
この複製オブジェクトの複製オブジェクトクラスIDを取得します。 [詳解] | |
DOHandle | GetHandle () const |
この複製オブジェクトの複製オブジェクトハンドルを取得します。 [詳解] | |
qUnsignedInt32 | GetHandleValue () const |
この複製オブジェクトのインスタンスを表すqUnsignedInt32 型の値を取得します。 [詳解] | |
StationID | GetMasterID () const |
この複製オブジェクトのマスターのステーションのStationIDを取得します。 [詳解] | |
DOHandle | GetMasterStation () const |
この複製オブジェクトの複製マスターとなっているStation オブジェクトの複製オブジェクトハンドルを取得します。 [詳解] | |
qBool | HasAuthority () const |
この複製オブジェクトが権限を持っているかどうかを取得します。 [詳解] | |
virtual void | InitDO () |
複製オブジェクトが初期化されたときにシステム側から呼び出されます。 [詳解] | |
qBool | IsA (DOClassID idDOCID) const |
この複製オブジェクトインスタンスが指定された複製オブジェクトクラスのインスタンスであるかを調べます。 [詳解] | |
virtual qBool | IsACoreDO () const |
この複製オブジェクトがCoreDOであるかどうかを取得します。 [詳解] | |
qBool | IsADuplica () const |
この複製オブジェクトがデュプリカであるか、そうでないかを取得します。 [詳解] | |
qBool | IsADuplicationMaster () const |
この複製オブジェクトが複製マスターであるか、そうでないかを取得します。 [詳解] | |
qBool | IsAKindOf (DOClassID idDOCID) const |
この複製オブジェクトインスタンスが指定された複製オブジェクトクラス、またはその派生関係であるかどうかを調べます。 [詳解] | |
qBool | IsAUserDO () const |
この複製オブジェクトがUserDOであるかどうかを取得します。 [詳解] | |
qBool | IsAWellKnownDO () const |
この複製オブジェクトが既知オブジェクトクラスのインスタンスであるかどうかを取得します。 [詳解] | |
qBool | IsGlobal () const |
このインスタンスがグローバル複製オブジェクトであるかどうかを取得します。 [詳解] | |
qBool | IsPublished () const |
この関数が発行されたかどうかを取得します。 [詳解] | |
qBool | MainRefIsDeleted () const |
DeleteMainRef 関数がこのオブジェクトに対して呼び出されたかどうかを取得します。 [詳解] | |
qBool | MigrationInProgress () const |
この複製オブジェクトがマイグレーションを行っている最中かどうかを取得します。 [詳解] | |
qBool | Publish (qUnsignedInt32 uiTimeout=DEFAULT_PUBLISH_TIMEOUT) |
この複製オブジェクトのインスタンスをセッションにいるステーションに発行します。 [詳解] | |
qBool | Refresh () |
デュプリカのデータセットの情報をバッファから転送します。 [詳解] | |
qBool | Refresh (const Time &tRefreshTime) |
デュプリカのデータセットの情報をバッファから転送します。 [詳解] | |
qBool | Refresh (DataSet &refDataset) |
デュプリカのデータセットの情報をバッファから転送します。 [詳解] | |
qBool | Refresh (DataSet &refDataset, const Time &tRefreshTime) |
デュプリカのデータセットの情報をバッファから転送します。 [詳解] | |
qResult | Update () |
すべてのデータセットの内容が更新されたことをセッションに存在するデュプリカに通知します。 [詳解] | |
qResult | Update (const Time &tUpdateTime) |
すべてのデータセットの内容が更新されたことをセッションに存在するデュプリカに通知します。 [詳解] | |
qResult | Update (DataSet &refDataset) |
指定されたデータセットの内容が更新されたことをセッションに存在するデュプリカに通知します。 [詳解] | |
qResult | Update (DataSet &refDataset, const Time &tUpdateTime) |
指定されたデータセットの内容が更新されたことをセッションに存在するデュプリカに通知します。 [詳解] | |
静的非公開メンバ関数 | |
static DuplicatedObject * | Create (qUnsignedInt32 uiTimeout==DEFAULT_CREATE_TIMEOUT) |
複製オブジェクトのローカルインスタンスを作成します。 [詳解] | |
static DuplicatedObject * | Create (DOID idUserDefinedID) |
複製オブジェクトのローカルインスタンスを作成します。 [詳解] | |
static DuplicatedObject * | Create (DOClassID idDOClass, qUnsignedInt32 uiTimeout=WAIT_INFINITE_TIMEOUT) |
複製オブジェクトのローカルインスタンスを作成します。 [詳解] | |
static DuplicatedObject * | Create (DOClassID idDOClass, DOID idUserDefinedID) |
複製オブジェクトのローカルインスタンスを作成します。 [詳解] | |
static DuplicatedObject * | Create (const DOHandle &dohHandle) |
複製オブジェクトのローカルインスタンスを作成します。 [詳解] | |
static DuplicatedObject * | CreateWellKnown (WKHandle &hWK) |
指定された既知オブジェクトを作成します。 [詳解] | |
static DuplicatedObject * | DynamicCast (DuplicatedObject *pDO) |
複製オブジェクトへのポインタの動的キャストを行います。 [詳解] | |
static qBool | FetchDuplica (FetchContext *pContext, DOHandle hFetchedObject) |
複製オブジェクトのデュプリカを取ってきます。 [詳解] | |
static DOOperation * | GetCurrentOperation () |
現在実行している最中の、複製オブジェクトに対する操作オブジェクトへのポインタを取得します。 [詳解] | |
static OperationManager * | GetOperationManager () |
OperationManager へのポインタを取得します。 [詳解] | |
静的非公開変数類 | |
static const qUnsignedInt32 | DEFAULT_CREATE_TIMEOUT = 1000 |
DuplicatedObject::Create で指定されるデフォルトのタイムアウト値です。単位はミリ秒です。 [詳解] | |
static const qUnsignedInt32 | DEFAULT_PUBLISH_TIMEOUT = 1000 |
DuplicatedObject::Publish で指定されるデフォルトのタイムアウト値です。単位はミリ秒です。 [詳解] | |
セッション操作をカプセル化するクラスです。
セッションの作成や参加、またセッションに対する情報の設定などが出来ます。 セッションクラスはシングルトンであり、ひとつのインスタンスしか作成されません。 このインスタンスは、NetZによって作成されます。 したがって、セッションから抜けて新しいセッションを作成したり参加したい場合は、 NetZのオブジェクトを一度破棄して、別の新しいNetZのオブジェクトを作成する必要があるということです。
この Session クラス自体も複製オブジェクトとして扱われます。 Sessionクラスの複製マスターがセッションマスターとなります。 DuplicatedObject::IsADuplicationMaster を調べることで、セッションマスターかそうでないかを区別することが出来ます。 また、 DuplicatedObject::GetMasterStation を調べると、セッションマスターのステーションを取得することが出来ます。 Session オブジェクトを保持しているマスターがセッションを抜けた場合、 自動的にフォールトトレランス(詳細はNEXプログラミングマニュアルを参照)が発生します。
typedef void(* nn::nex::Session::JoinSessionOperationCallback) (JoinSessionOperation *pOperation) |
セッションへの参加可否を決定するためのコールバックです。
nn::nex::Session::Session | ( | ) |
Sessionクラスのインスタンスは自動的に作成されます。ユーザーはこのコンストラクタを呼び出さないでください。
Net-Zシステムが、Session::CreateSession 関数を呼び出したときに、 Sessionクラスのインスタンスは自動的に作成されます。
|
virtual |
Sessionクラスのインスタンスは自動的に破棄されます。ユーザーはこのデストラクタを呼び出さないでください。
Sessionクラスのインスタンスは、NetZインスタンスが破棄されるタイミングで 自動的に実行されます。したがって、現在参加しているセッションを抜けて、別のセッションに参加したい場合は、 NetZオブジェクトのインスタンスを破棄したうえで新しいNetZオブジェクトを作成する必要があります。
|
static |
Sessionオブジェクトの複製オブジェクトハンドルを取得します。
|
static |
Sessionオブジェクトのインスタンスを取得します。
セッションクラスはシングルトンであり、ひとつのオブジェクトのみが自動的に生成されます。 この関数を呼び出すことで、唯一のインスタンスを取得することが出来ます。
|
virtual |
複製オブジェクトシステム操作が開始されるたびに呼び出されます。
この関数は、複製オブジェクトシステム操作(DOOperation)が開始されようとしているときに その複製オブジェクトシステム操作インスタンスへのポインタとともにシステム側から呼び出されます。 Operation::GetType 関数を呼び出すことによって どの種類の操作が行われようとしているかを判定することが出来ます。
※この関数はアプリケーション側から呼び出すためではなく、 システム側から呼び出されるために用意されています。
[in] | pOperation | これから実行される操作オブジェクトへのポインタが渡されます。 |
nn::nex::DuplicatedObjectを再実装しています。
|
virtual |
複製オブジェクトシステム操作が終了されるたびに呼び出されます。
この関数は、複製オブジェクトシステム操作(DOOperation)が終わった後で その複製オブジェクトシステム操作インスタンスへのポインタとともにシステム側から呼び出されます。 Operation::GetType 関数を呼び出すことによって どの種類の操作が行われようとしているかを判定することが出来ます。
※この関数はアプリケーション側から呼び出すためではなく、 システム側から呼び出されるために用意されています。
[in] | pOperation | これから実行される操作オブジェクトへのポインタが渡されます。 |
nn::nex::DuplicatedObjectを再実装しています。
|
static |
セッションオブジェクトに対する役割を取得します。
SESSION_ROLE_MASTER セッションマスター(主催者)のときに返ります。
SESSION_ROLE_DUPLICA セッションの参加者(マスターでないとき)に返ります。
SESSION_ROLE_UNDEFINED セッションに参加できていないときなどに返ります。
const qChar* nn::nex::Session::GetSessionName | ( | ) |
このセッションの名前を取得します。
セッションの名前はCreateSession 関数を呼び出したときか、 SetSessionName()を呼び出したときに設定することが出来ます。
|
static |
セッションへの参加可否を決定するためのコールバックを設定します。
セッションへ誰かが参加しようとしたときに、pfOperationCallbackで指定された 関数がNet-Zシステム側からコールバックされます。指定した関数の中で、 新規参加者がセッションへ参加してもよいか、それとも拒否するかを決定することが出来ます。 コールバックが設定されていない場合か、コールバックがJoinSessionOperation::Approve も JoinSessionOperation::Deny も返さない場合は、デフォルトではその参加要求は 承認されたものとなります。コールバックは、JoinSessionOperation::ApprovalStateが UnknownかPendingであるときのみ呼び出されます。 この段階で、Station::SelectionIteratorで取得可能なStationには、セッションへ参加してきた ステーションは含まれません。
[in] | pfOperationCallback | コールバック関数へのポインタを指定します。 |
qBool nn::nex::Session::SetUserDefinedState | ( | qUnsignedInt32 | uiNewState | ) |
ユーザー定義の値を設定します。
ユーザー定義の値はNet-Zによって利用されません。 Net-Zはただ単純にこの値をすべての参加者に対して複製します。 この関数はセッションマスターのみが呼び出すことが出来ます。 そのため、セッションマスターによって設定、配布され、他の参加者は ただそれを受け取るだけの用途に利用してください。
[in] | uiNewState | 新しいユーザー定義の値を指定します。 |
true 設定に成功した場合に返ります。
false 設定に失敗した場合に返ります。 セッションマスター以外によってこの関数が呼び出された場合、 SYSTEMERROR_OBJDUP_INVALID_ON_DUPLICAエラーがシグナルされます。
qUnsignedInt32 nn::nex::Session::GetUserDefinedState | ( | ) |
ユーザー定義の値を取得します。
この関数は、セッションのすべての参加者から呼び出すことが出来ます。 セッションマスターがSetUserDefinedState 関数を通じて呼び出した、 ユーザー定義の状態(ステート)を取得することが出来ます。
|
static |
セッションを作成します。
この関数を呼び出した場合、セッションマスターとなります。 szSessionNameとして指定した名前で、セッションの名前が決定されます。 この名前は、製品のデバッグ時に、セッションへの参加者がQuerySessions 関数を呼び出す 際にセッションを識別するために役立ちます。
bNetworked はセッションがネットワーク対応かどうかを定義する Boolean です。 bNetwork パラメータが偽の場合、他のプレイヤーがセッションに参加することはできません。 また、セッションは Session::QuerySessions が呼び出されても列挙されません。 ネットワーク対応のコードで、シングルプレイヤーモードを実装する用途で利用できます。
ローカル通信のセッションを作る際、UDSネットワークのマスターがセッションのマスターとなります。 UDSクライアントがこの関数を呼び出すと アサートエラーが発生するか、falseが返ります。
インターネット通信の場合は、本関数を呼び出すまえに Network::SetP2PDataPacketSessionSignatureKey() を用いて、 ゲームサーバーから配布される署名鍵を設定する必要があります。
[in] | szSessionName | セッションの名前を指定します(デフォルトはNULL)。 |
[in] | bNetworked | セッションがネットワーク対応かを設定します。通常trueを指定してください(デフォルト)。 |
true 正常にセッションが作成できた場合に返ります。
false 何らかのエラーが発生した場合に返ります。
すでにセッションが構築されている場合、SYSTEMERROR_DC_CLUSTER_REDEFINITIONがシグナルされます。
定義されている既知オブジェクトが初期化されていない場合、SYSTEMERROR_OBJDUP_WKHANDLE_NOT_INITIALIZEDがシグナルされます。
UDSクライアントがこの関数を呼び出すと。アサートエラーが発生するか、falseが返ります。
|
static |
セッションに参加します。
このオーバーロードは同期実行されるため、セッションへの参加が完了するまで関数は返りません。 非同期(ユーザースレッドモードの場合、Scheduler::Dispatch のタイミングで)実行するためには、 CallContext を指定するオーバーロードを利用してください。
本関数は、ローカル通信以外で利用することができません。インターネット通信での利用の際には、Assertによる停止、もしくは、失敗します。
UDSマスターがこの関数を呼び出すと アサートエラーが発生するか、falseが返ります。
[in] | refStationURL | 参加するセッションのステーションのStationURLオブジェクトへの参照を指定します。 |
true 正しく呼び出しが開始されたときに返ります(実際に成功したかどうかはpCallContextの状態を参照してください)。
false Join処理に失敗しました。NetZインスタンスはローカルセッションオブジェクトを保持するので、 再度セッションに参加するにはNetZインスタンスを作りなおす必要があります。
また、インターネット通信で、NAT超えを行っている場合には、StopNATSessionおよびStartNATSessionでNAT超えをし直す必要があります。
UDSマスターがこの関数を呼び出すと アサートエラーが発生するか、falseが返ります。
セッションに参加します。
このオーバーロードは同期実行されるため、セッションへの参加が完了するまで関数は返りません。 非同期(ユーザースレッドモードの場合、Scheduler::Dispatch のタイミングで)実行するためには、 CallContext を指定するオーバーロードを利用してください。
インターネット通信の場合は、本関数を呼び出すまえに Network::SetP2PDataPacketSessionSignatureKey() を用いて、 ゲームサーバーから配布される署名鍵を設定する必要があります。
UDSマスターがこの関数を呼び出すと アサートエラーが発生するか、falseが返ります。
※この関数はデバッグ目的に用意されています。製品版ではこの機能を利用しないでください。
[in] | szMachine | 参加する対象のPRUDPを伝送層に利用するセッションに所属するマシンの名前を指定します。 |
true 正しく呼び出しが開始されたときに返ります(実際に成功したかどうかはpCallContextの状態を参照してください)。
false Join処理に失敗しました。NetZインスタンスはローカルセッションオブジェクトを保持するので、 再度セッションに参加するにはNetZインスタンスを作りなおす必要があります。
また、インターネット通信で、NAT超えを行っている場合には、StopNATSessionおよびStartNATSessionでNAT超えをし直す必要があります。
UDSマスターがこの関数を呼び出すと アサートエラーが発生するか、falseが返ります。
|
static |
セッションに参加します。
このオーバーロードは同期実行されるため、セッションへの参加が完了するまで関数は返りません。 非同期(ユーザースレッドモードの場合、Scheduler::Dispatch のタイミングで)実行するためには、 CallContext を指定するオーバーロードを利用してください。
インターネット通信の場合は、本関数を呼び出すまえに Network::SetP2PDataPacketSessionSignatureKey() を用いて、 ゲームサーバーから配布される署名鍵を設定する必要があります。
UDSマスターがこの関数を呼び出すと アサートエラーが発生するか、falseが返ります。
[in] | pSessionDescription | セッション記述子へのポインタを指定します。 |
true 正しく呼び出しが開始されたときに返ります(実際に成功したかどうかはpCallContextの状態を参照してください)。
false Join処理に失敗しました。NetZインスタンスはローカルセッションオブジェクトを保持するので、 再度セッションに参加するにはNetZインスタンスを作りなおす必要があります。
また、インターネット通信で、NAT超えを行っている場合には、StopNATSessionおよびStartNATSessionでNAT超えをし直す必要があります。
UDSマスターがこの関数を呼び出すと アサートエラーが発生するか、falseが返ります。
|
static |
セッションに参加します。
このオーバーロードは同期実行されるため、セッションへの参加が完了するまで関数は返りません。 非同期(ユーザースレッドモードの場合、Scheduler::Dispatch のタイミングで)実行するためには、 CallContext を指定するオーバーロードを利用してください。
インターネット通信の場合は多くのケースで一つのステーションに複数のURLが割り当てられます。 このオーバーロードを利用すると接続可能なURLを自動的に選択し、接続します。
インターネット通信の場合は、本関数を呼び出すまえに Network::SetP2PDataPacketSessionSignatureKey() を用いて、 ゲームサーバーから配布される署名鍵を設定する必要があります。 MatchMakingClient::GetSessionURLs()で取得したURLリストは、加工せずにそのまま与えてください。
UDSマスターがこの関数を呼び出すと アサートエラーが発生するか、falseが返ります。
[in] | lstURLs | 参加するセッションのステーションのリストへの参照を指定します。 MatchMakingClient::GetSessionURLs()で取得したURLリストを、加工せずにそのまま与えてください。 |
true 正しく呼び出しが開始されたときに返ります(実際に成功したかどうかはpCallContextの状態を参照してください)。
false Join処理に失敗しました。NetZインスタンスはローカルセッションオブジェクトを保持するので、 再度セッションに参加するにはNetZインスタンスを作りなおす必要があります。
また、インターネット通信で、NAT超えを行っている場合には、StopNATSessionおよびStartNATSessionでNAT超えをし直す必要があります。
UDSマスターがこの関数を呼び出すと アサートエラーが発生するか、falseが返ります。
|
static |
セッションに参加します。
このオーバーロードは非同期(ユーザースレッドモードの場合、Scheduler::Dispatch のタイミングで) 実行されるため、この関数は即座に返ります。 実行状況はpCallContextで指定した呼び出しコンテキストを監視してください。
本関数は、ローカル通信以外で利用することができません。インターネット通信での利用の際には、Assertによる停止、もしくは、失敗します。
CallContextのタイムアウトは RootTransport::SetNATTraversalTimeout() に設定した値の2倍+α(5秒程度) が適切です。
UDSマスターがこの関数を呼び出すと アサートエラーが発生するか、falseが返ります。
[in] | pCallContext | 非同期実行を行うための呼び出しコンテキストを指定します。 |
[in] | refStationURL | 参加するセッションのステーションのStationURLオブジェクトへの参照を指定します。 |
true 正しく呼び出しが開始されたときに返ります(実際に成功したかどうかはpCallContextの状態を参照してください)。
false Join処理に失敗しました。NetZインスタンスはローカルセッションオブジェクトを保持するので、 再度セッションに参加するにはNetZインスタンスを作りなおす必要があります。
また、インターネット通信で、NAT超えを行っている場合には、StopNATSessionおよびStartNATSessionでNAT超えをし直す必要があります。
UDSマスターがこの関数を呼び出すと アサートエラーが発生するか、falseが返ります。
|
static |
セッションに参加します。
このオーバーロードは非同期(ユーザースレッドモードの場合、Scheduler::Dispatch のタイミングで) 実行されるため、この関数は即座に返ります。 実行状況はpCallContextで指定した呼び出しコンテキストを監視してください。
CallContextのタイムアウトは RootTransport::SetNATTraversalTimeout() に設定した値の2倍+α(5秒程度) が適切です。
インターネット通信の場合は多くのケースで一つのステーションに複数のURLが割り当てられます。 このオーバーロードを利用すると接続可能なURLを自動的に選択し、接続します。
インターネット通信の場合は、本関数を呼び出すまえに Network::SetP2PDataPacketSessionSignatureKey() を用いて、 ゲームサーバーから配布される署名鍵を設定する必要があります。 MatchMakingClient::GetSessionURLs()で取得したURLリストは、加工せずにそのまま与えてください。
UDSマスターがこの関数を呼び出すと アサートエラーが発生するか、falseが返ります。
[in] | pCallContext | 非同期実行を行うための呼び出しコンテキストを指定します。 |
[in] | lstStationURL | 参加するセッションのステーションのリストへの参照を指定します。 MatchMakingClient::GetSessionURLs()で取得したURLリストを、加工せずにそのまま与えてください。 |
true 正しく呼び出しが開始されたときに返ります(実際に成功したかどうかはpCallContextの状態を参照してください)。
false Join処理に失敗しました。NetZインスタンスはローカルセッションオブジェクトを保持するので、 再度セッションに参加するにはNetZインスタンスを作りなおす必要があります。
また、インターネット通信で、NAT超えを行っている場合には、StopNATSessionおよびStartNATSessionでNAT超えをし直す必要があります。
UDSマスターがこの関数を呼び出すと アサートエラーが発生するか、falseが返ります。
|
static |
LAN上に存在するセッションを検索します。
socketを利用して接続しているとき、同一のアクセスポイントに接続している 別のプロセスがセッションを開いていないかを調べます。 この機能を利用すると、サーバーを介したマッチング操作を省略して socketを利用したP2P機能をテストすることが出来ます。
このオーバーロードは同期実行されるため、セッションへの参加が完了するまで関数は返りません。 非同期(ユーザースレッドモードの場合、Scheduler::Dispatch のタイミングで)実行するためには、 CallContext を指定するオーバーロードを利用してください。
※この関数はデバッグ目的に用意されています。製品版ではこの機能を利用しないでください。
[out] | pOutputList | 見つかったセッションに対する記述子を受け取るためのリストへのポインタを指定します。 |
[in] | bFilterMatching | 同一のタイトルを持つセッションを列挙するかどうかを指定します(デフォルトはtrue)。 |
[in] | uiTimeout | セッション検索に対するタイムアウトをミリ秒単位で指定します(デフォルトは1000)。 |
true セッションの検索が正しく行えた場合に返ります。
false 呼び出しが実行できなかった場合に返ります。 すでにセッションに参加しているか、あるいは構築した場合はSYSTEMERROR_DC_CLUSTER_ALREADY_INITIALIZEDがシグナルされます。 セッション記述子が見つからなかった場合、SYSTEMERROR_GEN_INVALID_PARAMETERがシグナルされます。
|
static |
LAN上に存在するセッションを検索します。
socketを利用して接続しているとき、同一のアクセスポイントに接続している 別のプロセスがセッションを開いていないかを調べます。 この機能を利用すると、サーバーを介したマッチング操作を省略して socketを利用したP2P機能をテストすることが出来ます。
このオーバーロードは非同期(ユーザースレッドモードの場合、Scheduler::Dispatch のタイミングで) 実行されるため、この関数は即座に返ります。 実行状況はpCallContextで指定した呼び出しコンテキストを監視してください。
※この関数はデバッグ目的に用意されています。製品版ではこの機能を利用しないでください。
[in,out] | pContext | 実行状況をアプリケーション側から判定するための呼び出しコンテキストへのポインタを指定します。 |
[out] | pOutputList | 見つかったセッションに対する記述子を受け取るためのリストへのポインタを指定します。 |
[in] | bFilterMatching | 同一のタイトルを持つセッションを列挙するかどうかを指定します(デフォルトはtrue)。 |
[in] | uiTimeout | セッション検索に対するタイムアウトをミリ秒単位で指定します(デフォルトは1000)。 |
true 呼び出しが正常に実行された場合に返ります(実際に成功したかどうかはpContextの状態を参照してください)。
false 呼び出しが実行できなかった場合に返ります。 すでにセッションに参加しているか、あるいは構築した場合はSYSTEMERROR_DC_CLUSTER_ALREADY_INITIALIZEDがシグナルされます。 セッション記述子が見つからなかった場合、SYSTEMERROR_GEN_INVALID_PARAMETERがシグナルされます。
|
static |
セッションへの参加を試み、失敗した場合はセッションを新規作成します。
この関数はQuerySessions 、JoinSession 、およびCreateSession の、3関数を ラップした関数です。この関数が呼び出されると、まず最初にQuerySessions 関数と同様、 同一アクセスポイントに接続されているプロセスが作成しているセッションを列挙します。 もし見つかった場合、どのセッションに参加するかをpfSessionSelectionコールバックによって決定します。 セッションが見つかり、参加するセッションが決まった場合はJoinSession 関数と同様に、 セッションへの参加を行います。
もし同一アクセスポイントに接続されているプロセスがセッションを開催していない場合、 この関数を実行したデバイスが親となってCreateSession 関数と同様に、セッションを構築します。 セッションが構築される前にpfCreateCallbackで指定したコールバック関数が呼び出されます。
※この関数はデバッグ目的に用意されています。製品版ではこの機能を利用しないでください。
[in] | pfCreateCallback | セッションが構築されるときに呼び出されるコールバック関数を指定します(デフォルトはNULL)。 もしもDDL(データ定義言語)にて、既知オブジェクトが定義されている場合、このコールバック関数内で すべての既知オブジェクトを作成しておく必要があります。 また、セッション記述子(SessionDescription )の情報をセッションが構築される前に設定するためにも利用できます。 |
[in] | pfSessionSelection | 複数のセッションが見つかった場合にどのセッションに参加するかを決定するためのコールバック関数を指定します。 このポインタがNULL(デフォルト)の場合、Net-Zは自動的に一番最初に見つかったセッションに参加します。 |
true セッションへの参加か作成に成功したときに返ります。
false セッションへの参加も作成も失敗した、あるいはエラーが発生したときに返ります。 Net-Zの内部認証に失敗した場合、SYSTEMERROR_DC_CLUSTER_JOIN_DENIEDがシグナルされます。 セッションが見つかって参加しようとするときに既知オブジェクトが作成されていた場合には、 SYSTEMERROR_OBJDUP_WKHANDLE_WERE_CREATEDがシグナルされます(セッションマスターのみが既知オブジェクトを作成できます)。 セッションが見つからずに、新規作成しようとするときに、既知オブジェクトが作成されていない場合には SYSTEMERROR_OBJDUP_WKHANDLE_NOT_INITIALIZEDがシグナルされます(セッションを構築する場合は既知オブジェクトを作成しなければなりません)。 複数回セッションへ参加しようとしたり、作成しようとしたときにはSYSTEMERROR_DC_CLUSTER_REDEFINITIONがシグナルされます。
|
static |
ローカルステーションのセッション記述子へのポインタを取得します。
セッション記述子は、セッションマスターのみが変更することが出来ます。
void nn::nex::Session::DestroySession | ( | ) |
ネットワークから切断されたときに、フォルト処理なく強制的にセッションから離脱する関数です。
この関数は以下の条件でのみ使用可能です。
この関数を使用するとフォルト処理が実行されません。 フォルト処理が省かれることにより、ステーション間で共有すべき情報に 不整合が発生して、P2P セッションの継続が困難になります。
親と子を含めたP2P セッション全体を強制終了させたい場合は、 GameOver() を使用してください。
フォルト処理が必要ない場合にこの関数を使用すれば、 JobTerminateDOCoreが素早く完了できる (JobTerminateDOCore::SyncTerminationで時間がかからない) という利点があります。
この関数を使用後はホストマイグレーションが出来なくなります。
NetZ::SetTerminateImmediately()にtrueが自動設定されます。
qBool nn::nex::Session::CheckGameIsOver | ( | ) |
Net-Zのセッションが終了中であるかどうかを取得します。
セッションマスターがセッションを終了させるために GameOver() 関数によってすべての参加者にRMC(リモートメソッドコール)を 送信したときに設定されます。 また、 Station::KickStation() や、 Station::KickMe() により、 キックされたときに設定されます。
trueの場合には、Terminate処理を実行してNetZを終了してください。
クライアントサーバー型のネットワークトポロジーでは、セッションマスターに 障害が発生したときもセッションが無効になります。システムがサーバー障害を 検知したときに、フラグがtrueにセットされ、セッションがもう存在しないことをゲームに伝えます。
true セッションが終了中であるときに返ります。
false セッションが存在しているときに返ります。
qBool nn::nex::Session::GameOver | ( | ) |
すべてのセッション参加者にこのセッションが終了したことを通知します。
この関数はセッションマスターのみが呼び出すことが出来ます。 セッション参加者は自分がマスターだと思っているマスターからの呼び出しに応じて、ゲームを終了します。
マスターがセッションをシャットダウンすべきと決定したら、 このRMCを呼び出し、Net-Zのインスタンスを終了する前に すべてのセッション参加者のゲーム終了フラグをオンにします。 子は、 CheckGameIsOver() を実行して、 GameOver() が呼ばれたかチェックを行い、Terminate処理を実行してNetZを終了してください。 GameOver() を使用する場合、マイグレーションは行われません。
多数台接続時に同時に切断が行われるとマイグレーション処理が長くなり、NetZオブジェクトの終了処理がタイムアウトする可能性が高くなります。 タイムアウトを回避するためには、セッションマスターがNetZオブジェクトの終了処理を実行する直前に Session::GameOver()を呼び出し、全ステーションに対してセッションの終了を通知する方法があります。
セッションマスター、セッション参加者ともに NetZ::SetTerminateImmediately() へtrueが自動設定されます。
true すべてのセッション参加者にセッションの終了を通知したときに返ります。
false セッションへの参照が無効なときに返ります。 また、セッションマスター以外がこの関数を呼び出したときにも返ります。
|
static |
ステーション不一致を検出するためセッションマスターからステーション数を通知する間隔を設定します。
time | 送信間隔をmsec単位で指定します。 |
|
static |
ステーション不一致を検出するためセッションマスターからステーション数を通知する間隔取得します。
|
static |
ステーション不一致を検出するチェック回数の閾値を指定します。
子において、セッションマスターから通知されたステーション数とローカルのステーション数が指定回数連続して 等しくない場合に、GetFatalErrorとしてQERROR(DOCore, StationInconsistency)で 取得可能なFatalエラーが発生します。 指定する回数とGetSetSyncStationListIntervalの値を掛け合わせた値が、 RootTransport::GetNATTraversalTimeoutの値より5000から10000[msec]大きくなるように指定してください。
count | ステーション不一致検出閾値 |
|
static |
ステーション不一致を検出するチェック回数の閾値を取得します。
|
virtual |
この複製オブジェクトの状態をトレースします(デバッグ用)。
[in] | uiTraceFlag | どのフラグが有効であるときにトレースを実行するのか指定します。 |
nn::nex::DuplicatedObjectを再実装しています。
size_t nn::nex::Session::GetNumOfRoutingConnections | ( | ) |
セッション全体に存在するマスター経由通信の数を取得します。
RootTransport::GetRoutingHistoryTTL() [ms]以内に通信の発生したマスター経由通信の数を返します。 送信、受信をそれぞれカウントします。つまり、あるステーションが別の1台のステーションとマスター経由通信していた場合、この関数は2を返します。 本関数を使用する前にはあらかじめRootTransport::SetRoutingHistoryUpdateSpan で0より大きい更新間隔を設定する必要があります。 この関数はセッションマスターのみ呼び出せます。