CTR NEX API Reference
nn::nex::Session クラス

セッション操作をカプセル化するクラスです。 [詳解]

#include <NetZ/src/Core/DOCore/Session.h>

+ nn::nex::Session の継承関係図

公開型

typedef void(* JoinSessionOperationCallback) (JoinSessionOperation *pOperation)
 セッションへの参加可否を決定するためのコールバックです。 [詳解]
 

公開メンバ関数

 Session ()
 Sessionクラスのインスタンスは自動的に作成されます。ユーザーはこのコンストラクタを呼び出さないでください。 [詳解]
 
virtual ~Session ()
 Sessionクラスのインスタンスは自動的に破棄されます。ユーザーはこのデストラクタを呼び出さないでください。 [詳解]
 
qBool CheckGameIsOver ()
 Net-Zのセッションが終了中であるかどうかを取得します。 [詳解]
 
void DestroySession ()
 ネットワークから切断されたときに、フォルト処理なく強制的にセッションから離脱する関数です。 [詳解]
 
qBool GameOver ()
 すべてのセッション参加者にこのセッションが終了したことを通知します。 [詳解]
 
size_t GetNumOfRoutingConnections ()
 セッション全体に存在するマスター経由通信の数を取得します。 [詳解]
 
const qCharGetSessionName ()
 このセッションの名前を取得します。 [詳解]
 
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 SessionGetInstance ()
 Sessionオブジェクトのインスタンスを取得します。 [詳解]
 
static DOHandle GetInstanceHandle ()
 Sessionオブジェクトの複製オブジェクトハンドルを取得します。 [詳解]
 
static SessionDescriptionGetLocalSessionDescription ()
 ローカルステーションのセッション記述子へのポインタを取得します。 [詳解]
 
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< DuplicatedObjectRef
 複製オブジェクトへの安全な参照を行うためのtypdef
 
typedef SelectionIteratorTemplate< DuplicatedObjectSelectionIterator
 複製オブジェクトを列挙するためのイテレータの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 qCharGetClassNameString () const
 複製オブジェクトのクラス名を文字列として取得します。 [詳解]
 
const qCharGetDatasetNameString (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 DuplicatedObjectCreate (qUnsignedInt32 uiTimeout==DEFAULT_CREATE_TIMEOUT)
 複製オブジェクトのローカルインスタンスを作成します。 [詳解]
 
static DuplicatedObjectCreate (DOID idUserDefinedID)
 複製オブジェクトのローカルインスタンスを作成します。 [詳解]
 
static DuplicatedObjectCreate (DOClassID idDOClass, qUnsignedInt32 uiTimeout=WAIT_INFINITE_TIMEOUT)
 複製オブジェクトのローカルインスタンスを作成します。 [詳解]
 
static DuplicatedObjectCreate (DOClassID idDOClass, DOID idUserDefinedID)
 複製オブジェクトのローカルインスタンスを作成します。 [詳解]
 
static DuplicatedObjectCreate (const DOHandle &dohHandle)
 複製オブジェクトのローカルインスタンスを作成します。 [詳解]
 
static DuplicatedObjectCreateWellKnown (WKHandle &hWK)
 指定された既知オブジェクトを作成します。 [詳解]
 
static DuplicatedObjectDynamicCast (DuplicatedObject *pDO)
 複製オブジェクトへのポインタの動的キャストを行います。 [詳解]
 
static qBool FetchDuplica (FetchContext *pContext, DOHandle hFetchedObject)
 複製オブジェクトのデュプリカを取ってきます。 [詳解]
 
static DOOperationGetCurrentOperation ()
 現在実行している最中の、複製オブジェクトに対する操作オブジェクトへのポインタを取得します。 [詳解]
 
static OperationManagerGetOperationManager ()
 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)

セッションへの参加可否を決定するためのコールバックです。

参照
JoinSessionOperation, RegisterJoinApprovalCallback

構築子と解体子

nn::nex::Session::Session ( )

Sessionクラスのインスタンスは自動的に作成されます。ユーザーはこのコンストラクタを呼び出さないでください。

Net-Zシステムが、Session::CreateSession 関数を呼び出したときに、 Sessionクラスのインスタンスは自動的に作成されます。

virtual nn::nex::Session::~Session ( )
virtual

Sessionクラスのインスタンスは自動的に破棄されます。ユーザーはこのデストラクタを呼び出さないでください。

Sessionクラスのインスタンスは、NetZインスタンスが破棄されるタイミングで 自動的に実行されます。したがって、現在参加しているセッションを抜けて、別のセッションに参加したい場合は、 NetZオブジェクトのインスタンスを破棄したうえで新しいNetZオブジェクトを作成する必要があります。

関数詳解

static DOHandle nn::nex::Session::GetInstanceHandle ( )
static

Sessionオブジェクトの複製オブジェクトハンドルを取得します。

戻り値
Sessionオブジェクトの複製オブジェクトハンドルが返ります。
static Session* nn::nex::Session::GetInstance ( )
static

Sessionオブジェクトのインスタンスを取得します。

セッションクラスはシングルトンであり、ひとつのオブジェクトのみが自動的に生成されます。 この関数を呼び出すことで、唯一のインスタンスを取得することが出来ます。

戻り値
Sessionオブジェクトインスタンスへのポインタが返ります。
virtual void nn::nex::Session::OperationBegin ( DOOperation pOperation)
virtual

複製オブジェクトシステム操作が開始されるたびに呼び出されます。

この関数は、複製オブジェクトシステム操作(DOOperation)が開始されようとしているときに その複製オブジェクトシステム操作インスタンスへのポインタとともにシステム側から呼び出されます。 Operation::GetType 関数を呼び出すことによって どの種類の操作が行われようとしているかを判定することが出来ます。

※この関数はアプリケーション側から呼び出すためではなく、 システム側から呼び出されるために用意されています。

引数
[in]pOperationこれから実行される操作オブジェクトへのポインタが渡されます。
参照
OperationEnd

nn::nex::DuplicatedObjectを再実装しています。

virtual void nn::nex::Session::OperationEnd ( DOOperation pOperation)
virtual

複製オブジェクトシステム操作が終了されるたびに呼び出されます。

この関数は、複製オブジェクトシステム操作(DOOperation)が終わった後で その複製オブジェクトシステム操作インスタンスへのポインタとともにシステム側から呼び出されます。 Operation::GetType 関数を呼び出すことによって どの種類の操作が行われようとしているかを判定することが出来ます。

※この関数はアプリケーション側から呼び出すためではなく、 システム側から呼び出されるために用意されています。

引数
[in]pOperationこれから実行される操作オブジェクトへのポインタが渡されます。
参照
OperationEnd

nn::nex::DuplicatedObjectを再実装しています。

static qByte nn::nex::Session::GetRole ( )
static

セッションオブジェクトに対する役割を取得します。

戻り値一覧:

SESSION_ROLE_MASTER セッションマスター(主催者)のときに返ります。

SESSION_ROLE_DUPLICA セッションの参加者(マスターでないとき)に返ります。

SESSION_ROLE_UNDEFINED セッションに参加できていないときなどに返ります。

const qChar* nn::nex::Session::GetSessionName ( )

このセッションの名前を取得します。

セッションの名前はCreateSession 関数を呼び出したときか、 SetSessionName()を呼び出したときに設定することが出来ます。

戻り値
セッションの名前へのポインタが返ります。
static JoinSessionOperationCallback nn::nex::Session::RegisterJoinApprovalCallback ( JoinSessionOperationCallback  pfOperationCallback)
static

セッションへの参加可否を決定するためのコールバックを設定します。

セッションへ誰かが参加しようとしたときに、pfOperationCallbackで指定された 関数がNet-Zシステム側からコールバックされます。指定した関数の中で、 新規参加者がセッションへ参加してもよいか、それとも拒否するかを決定することが出来ます。 コールバックが設定されていない場合か、コールバックがJoinSessionOperation::ApproveJoinSessionOperation::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エラーがシグナルされます。

参照
GetUserDefinedState, DuplicatedObject::IsADuplicationMaster
qUnsignedInt32 nn::nex::Session::GetUserDefinedState ( )

ユーザー定義の値を取得します。

この関数は、セッションのすべての参加者から呼び出すことが出来ます。 セッションマスターがSetUserDefinedState 関数を通じて呼び出した、 ユーザー定義の状態(ステート)を取得することが出来ます。

戻り値
セッションマスターによって設定された、ユーザー定義の値が返ります。
参照
SetUserDefinedState
static qBool nn::nex::Session::CreateSession ( const qChar szSessionName = NULL,
qBool  bNetworked = true 
)
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 qBool nn::nex::Session::JoinSession ( const StationURL refStationURL)
static

セッションに参加します。

このオーバーロードは同期実行されるため、セッションへの参加が完了するまで関数は返りません。 非同期(ユーザースレッドモードの場合、Scheduler::Dispatch のタイミングで)実行するためには、 CallContext を指定するオーバーロードを利用してください。

本関数は、ローカル通信以外で利用することができません。インターネット通信での利用の際には、Assertによる停止、もしくは、失敗します。

UDSマスターがこの関数を呼び出すと アサートエラーが発生するか、falseが返ります。

引数
[in]refStationURL参加するセッションのステーションのStationURLオブジェクトへの参照を指定します。
戻り値一覧:

true 正しく呼び出しが開始されたときに返ります(実際に成功したかどうかはpCallContextの状態を参照してください)。

false Join処理に失敗しました。NetZインスタンスはローカルセッションオブジェクトを保持するので、 再度セッションに参加するにはNetZインスタンスを作りなおす必要があります。
また、インターネット通信で、NAT超えを行っている場合には、StopNATSessionおよびStartNATSessionでNAT超えをし直す必要があります。
UDSマスターがこの関数を呼び出すと アサートエラーが発生するか、falseが返ります。

static qBool nn::nex::Session::JoinSession ( const qChar szMachine)
static

セッションに参加します。

このオーバーロードは同期実行されるため、セッションへの参加が完了するまで関数は返りません。 非同期(ユーザースレッドモードの場合、Scheduler::Dispatch のタイミングで)実行するためには、 CallContext を指定するオーバーロードを利用してください。

インターネット通信の場合は、本関数を呼び出すまえに Network::SetP2PDataPacketSessionSignatureKey() を用いて、 ゲームサーバーから配布される署名鍵を設定する必要があります。

UDSマスターがこの関数を呼び出すと アサートエラーが発生するか、falseが返ります。

※この関数はデバッグ目的に用意されています。製品版ではこの機能を利用しないでください。

引数
[in]szMachine参加する対象のPRUDPを伝送層に利用するセッションに所属するマシンの名前を指定します。
戻り値一覧:

true 正しく呼び出しが開始されたときに返ります(実際に成功したかどうかはpCallContextの状態を参照してください)。

false Join処理に失敗しました。NetZインスタンスはローカルセッションオブジェクトを保持するので、 再度セッションに参加するにはNetZインスタンスを作りなおす必要があります。
また、インターネット通信で、NAT超えを行っている場合には、StopNATSessionおよびStartNATSessionでNAT超えをし直す必要があります。
UDSマスターがこの関数を呼び出すと アサートエラーが発生するか、falseが返ります。

static qBool nn::nex::Session::JoinSession ( SessionDescription pSessionDescription)
static

セッションに参加します。

このオーバーロードは同期実行されるため、セッションへの参加が完了するまで関数は返りません。 非同期(ユーザースレッドモードの場合、Scheduler::Dispatch のタイミングで)実行するためには、 CallContext を指定するオーバーロードを利用してください。

インターネット通信の場合は、本関数を呼び出すまえに Network::SetP2PDataPacketSessionSignatureKey() を用いて、 ゲームサーバーから配布される署名鍵を設定する必要があります。

UDSマスターがこの関数を呼び出すと アサートエラーが発生するか、falseが返ります。

引数
[in]pSessionDescriptionセッション記述子へのポインタを指定します。
戻り値一覧:

true 正しく呼び出しが開始されたときに返ります(実際に成功したかどうかはpCallContextの状態を参照してください)。

false Join処理に失敗しました。NetZインスタンスはローカルセッションオブジェクトを保持するので、 再度セッションに参加するにはNetZインスタンスを作りなおす必要があります。
また、インターネット通信で、NAT超えを行っている場合には、StopNATSessionおよびStartNATSessionでNAT超えをし直す必要があります。
UDSマスターがこの関数を呼び出すと アサートエラーが発生するか、falseが返ります。

static qBool nn::nex::Session::JoinSession ( const qList< StationURL > &  lstURLs)
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 qBool nn::nex::Session::JoinSession ( CallContext pCallContext,
const StationURL refStationURL 
)
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 qBool nn::nex::Session::JoinSession ( CallContext pCallContext,
const qList< StationURL > &  lstStationURL 
)
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 size_t nn::nex::Session::QuerySessions ( qList< SessionDescription > *  pOutputList,
qBool  bFilterMatching = true,
qUnsignedInt32  uiTimeout = 1000 
)
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がシグナルされます。

参照
JoinSession, CreateSession
static qBool nn::nex::Session::QuerySessions ( CallContext pContext,
qList< SessionDescription > *  pOutputList,
qBool  bFilterMatching = true,
qUnsignedInt32  uiTimeout = 1000 
)
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がシグナルされます。

参照
JoinSession, CreateSession
static qBool nn::nex::Session::CreateOrJoinSession ( void(*)()  pfCreateCallback = NULL,
SessionDescription *(*)(qList< SessionDescription > &lstSessions)  pfSessionSelection = NULL 
)
static

セッションへの参加を試み、失敗した場合はセッションを新規作成します。

この関数はQuerySessionsJoinSession 、および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がシグナルされます。

参照
QuerySessions, JoinSession, CreateSession
static SessionDescription* nn::nex::Session::GetLocalSessionDescription ( )
static

ローカルステーションのセッション記述子へのポインタを取得します。

セッション記述子は、セッションマスターのみが変更することが出来ます。

戻り値
ローカルステーションのセッション記述子へのポインタが返ります。
void nn::nex::Session::DestroySession ( )

ネットワークから切断されたときに、フォルト処理なく強制的にセッションから離脱する関数です。

この関数は以下の条件でのみ使用可能です。

  • 自分以外のStationがセッションに残っているが、明らかにネットワークから切断されているとき
  • Stationが自分しかおらず一人ぼっちのとき

この関数を使用するとフォルト処理が実行されません。 フォルト処理が省かれることにより、ステーション間で共有すべき情報に 不整合が発生して、P2P セッションの継続が困難になります。

親と子を含めたP2P セッション全体を強制終了させたい場合は、 GameOver() を使用してください。

フォルト処理が必要ない場合にこの関数を使用すれば、 JobTerminateDOCoreが素早く完了できる (JobTerminateDOCore::SyncTerminationで時間がかからない) という利点があります。

この関数を使用後はホストマイグレーションが出来なくなります。

NetZ::SetTerminateImmediately()にtrueが自動設定されます。

参照
GameOver(), NetZ::SetTerminateImmediately()
qBool nn::nex::Session::CheckGameIsOver ( )

Net-Zのセッションが終了中であるかどうかを取得します。

セッションマスターがセッションを終了させるために GameOver() 関数によってすべての参加者にRMC(リモートメソッドコール)を 送信したときに設定されます。 また、 Station::KickStation() や、 Station::KickMe() により、 キックされたときに設定されます。

trueの場合には、Terminate処理を実行してNetZを終了してください。

クライアントサーバー型のネットワークトポロジーでは、セッションマスターに 障害が発生したときもセッションが無効になります。システムがサーバー障害を 検知したときに、フラグがtrueにセットされ、セッションがもう存在しないことをゲームに伝えます。


戻り値一覧:

true セッションが終了中であるときに返ります。

false セッションが存在しているときに返ります。

参照
NetZ::SetTerminateImmediately(), GameOver(), Station::KickStation(), Station::KickMe()
qBool nn::nex::Session::GameOver ( )

すべてのセッション参加者にこのセッションが終了したことを通知します。

この関数はセッションマスターのみが呼び出すことが出来ます。 セッション参加者は自分がマスターだと思っているマスターからの呼び出しに応じて、ゲームを終了します。

マスターがセッションをシャットダウンすべきと決定したら、 このRMCを呼び出し、Net-Zのインスタンスを終了する前に すべてのセッション参加者のゲーム終了フラグをオンにします。 子は、 CheckGameIsOver() を実行して、 GameOver() が呼ばれたかチェックを行い、Terminate処理を実行してNetZを終了してください。 GameOver() を使用する場合、マイグレーションは行われません。

多数台接続時に同時に切断が行われるとマイグレーション処理が長くなり、NetZオブジェクトの終了処理がタイムアウトする可能性が高くなります。 タイムアウトを回避するためには、セッションマスターがNetZオブジェクトの終了処理を実行する直前に Session::GameOver()を呼び出し、全ステーションに対してセッションの終了を通知する方法があります。

セッションマスター、セッション参加者ともに NetZ::SetTerminateImmediately() へtrueが自動設定されます。


戻り値一覧:

true すべてのセッション参加者にセッションの終了を通知したときに返ります。

false セッションへの参照が無効なときに返ります。 また、セッションマスター以外がこの関数を呼び出したときにも返ります。

参照
NetZ::SetTerminateImmediately(), CheckGameIsOver()
static void nn::nex::Session::SetSyncStationListInterval ( TimeInterval  time)
static

ステーション不一致を検出するためセッションマスターからステーション数を通知する間隔を設定します。

引数
time送信間隔をmsec単位で指定します。
参照
GetSyncStationListInterval
SetDetectStationInconsitencyThresholdCount,GetDetectStationInconsitencyThresholdCount
static TimeInterval nn::nex::Session::GetSyncStationListInterval ( )
static

ステーション不一致を検出するためセッションマスターからステーション数を通知する間隔取得します。

戻り値
送信間隔(単位はmsec)を返します。デフォルト値は、5000msecです。
参照
SetSyncStationListInterval
SetDetectStationInconsitencyThresholdCount,GetDetectStationInconsitencyThresholdCount
static void nn::nex::Session::SetDetectStationInconsitencyThresholdCount ( size_t  count)
static

ステーション不一致を検出するチェック回数の閾値を指定します。

子において、セッションマスターから通知されたステーション数とローカルのステーション数が指定回数連続して 等しくない場合に、GetFatalErrorとしてQERROR(DOCore, StationInconsistency)で 取得可能なFatalエラーが発生します。 指定する回数とGetSetSyncStationListIntervalの値を掛け合わせた値が、 RootTransport::GetNATTraversalTimeoutの値より5000から10000[msec]大きくなるように指定してください。

引数
countステーション不一致検出閾値
参照
GetDetectStationInconsitencyThresholdCount
SetSyncStationListInterval, GetSyncStationListInterval
RootTransport::SetNATTraversalTimeout, RootTransport::GetNATTraversalTimeout
GetFatalError
static size_t nn::nex::Session::GetDetectStationInconsitencyThresholdCount ( )
static

ステーション不一致を検出するチェック回数の閾値を取得します。

戻り値
ステーション不一致検出閾値
参照
SetDetectStationInconsitencyThresholdCount
SetSyncStationListInterval, GetSyncStationListInterval,
RootTransport::SetNATTraversalTimeout
virtual void nn::nex::Session::Trace ( qUnsignedInt64  uiTraceFlag) const
virtual

この複製オブジェクトの状態をトレースします(デバッグ用)。

引数
[in]uiTraceFlagどのフラグが有効であるときにトレースを実行するのか指定します。

nn::nex::DuplicatedObjectを再実装しています。

size_t nn::nex::Session::GetNumOfRoutingConnections ( )

セッション全体に存在するマスター経由通信の数を取得します。

RootTransport::GetRoutingHistoryTTL() [ms]以内に通信の発生したマスター経由通信の数を返します。 送信、受信をそれぞれカウントします。つまり、あるステーションが別の1台のステーションとマスター経由通信していた場合、この関数は2を返します。 本関数を使用する前にはあらかじめRootTransport::SetRoutingHistoryUpdateSpan で0より大きい更新間隔を設定する必要があります。 この関数はセッションマスターのみ呼び出せます。

戻り値
セッション全体に存在するマスター経由通信の数を返します。