TDDPDは、DirectPlayを簡単に扱うためのコンポーネントです。
DirectPlayを使ったアプリケーション同士の接続、セッションの作成、プレーヤの管理をサポートします。
(凡例:
読み取り専用
Published)
| 接続 | |
| セッション | |
| プレイヤー | |
| 設定 | |
| その他 | |
| 接続 | Connect |
| セッション | CreateSession |
| InspectSession | |
| JoinSession | |
| CloseSession | |
| メッセージ | Send |
| 接続ダイアログ | Execute |
| プレイヤーの出入り | OnComesNewChallenger |
| OnEscapeChallenger | |
| メッセージ | OnArriveMessage |
property ServiceProviders:TStrings;
DirectPlayによって使用できるサービスプロバイダの一覧を示します。
property Sessions:TStrings;
現在接続しているホストで開かれているセッションの一覧を示します。
Connectメソッドによってどこかのホストに接続されていない場合、このプロパティは無効です。
property Players:TDDPDPlayers;
セッションに参加しているプレイヤーの情報についてのリストを示します。
CraeteSessionメソッドなどですでにセッションを開いていない状態では、このプロパティは無効です。
property MyPlayer:TDDPDPlayer;
アプリケーションを直接操作しているプレイヤーについての情報を示します。
property MaxPlayers:Integer;
CreateSessionメソッドでセッションを作成するとき、および、Executeメソッドで表示されるダイアログによってセッションを作成するときの、セッションに収容可能な最大人数を設定します。
property NoMessageID:Boolean;
Sendメソッドによってデータを送信する際に、メッセージの送り手のIDも付加するかどうかを設定します。Falseにすると、IDが付加されませんが、その分だけ高速にデータの通信が可能です。
property SendGuaranteed:Boolean;
Trueにすると、Sendメソッドによるデータの送信を保証します。データは確実に送り先に到着します。但し、通信速度は低下します。
Falseにすると、回線の状態などによっては、必ずしも相手のもとに届く保証はありません。
尚、送ったデータと受け取ったデータが違う、いわゆるデータ化けは、いずれの場合も起こりません。
このプロパティがTrueの時は、TCP/IPをサービスプロバイダに用いたときのみ通信を行う事が出来ます。
property AppGuid:String;
アプリケーションを識別するためのIDで、
{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
という形式の文字列です。
X には0〜Fまでの十六進数が入ります。
Win32SDK付属のGUIDGenというツールで作成出来るほか、DelphiのエディタでCtrl+Shift+Gを押すか、CreateClassID
Win32APIを用いれば生成する事が可能です。
property DebugOption:TDDPDDebugOption; TDDPDDebugOption = Set of (dpoHaltOnError, dpoExceptOnError, dpoDebugMessage);
デバッグ用のメッセージ出力を制御します。
dpoHaltOnError
DirectXモジュールの制御上、何らかのエラーが発生すると、アプリケーションを強制終了します
dpoExceptOnError
DirectXモジュールの制御上、何らかのエラーが発生すると、例外を発生します
dpoDebugMessage
DirectXモジュールの制御上、何らかのエラーが発生すると、エラーの内容について、ddpd.debugというファイル名で、アプリケーションのあるディレクトリと同じディレクトリに書き出します。
function Connect(serviceProviderIndex:Integer):HRESULT;
ServiceProverdes[serviceProviderIndex]で示されるサービスプロパイダを用いて、DirectPlay接続の初期化を行います。
成功すると、DP_OKを返します
function CreateSession(sessionName:String; shortName,longName:String):HRESULT;
Connectメソッドによって初期化したDirectPlayを用いて、新規にセッションを作成します。
sessionNameにこれから作成するセッションの名前
shortNameにそのセッションに参加させるプレイヤーのショートネーム
longNameにそのセッションに参加させるプレイヤーのロングネーム
を指定してください。shortName、longNameの使い分けは、アプリケーションで自由に行ってください。
成功すると、DP_OKを返します
すでにセッションに参加している状態でこのメソッドを呼ぶと、参加中のセッションから自動的に抜けてから、新たにセッションを作り、そのセッションに参加します。
function InspectSession(sessionIndex:Integer):HRESULT;
Connectメソッドによって接続したホスト内に存在するセッションに、誰が参加しているかをしらべます。
つまり、JoinSessionをしなくても、Playersプロパティの更新が行われます。
但し、すでにセッションに参加している状態でこのメソッドを呼ぶと、参加中のセッションから自動的に抜けてしまいます。
成功するとDP_OKを返します。
function JoinSession(sessionIndex:Integer; shortName,longName:String):HRESULT;
Sessions[sessionIndex]で示されるセッションに参加します。
shortNameにそのセッションに参加させるプレイヤーのショートネーム
longNameにそのセッションに参加させるプレイヤーのロングネーム
を指定してください。shortName、longNameの使い分けは、アプリケーションで自由に行ってください。
成功するとDP_OKを返します。
すでにセッションに参加している状態でこのメソッドを呼ぶと、参加中のセッションから自動的に抜けてから、指定したセッションに参加します。
function CloseSession:HRESULT;
CrateSession , JoinSessionメソッドによって開かれたセッションをクローズし、セッションから抜けます。
成功すると、DP_OKが返ります。
function Send(toID:DPID; data:Pointer; dataSize:DWord):HRESULT;
toIDで示されるセッションに参加している他のメンバーに、dataアドレスにある、dataSizeバイトのデータを送信します。
toIDに、DPID_ALLPLAYERSを指定すると、セッションに参加している自分以外の全員にメッセージを送信します。
成功するとDP_OKを返します。
注意
すでにCreateSessionメソッドなどを使って、セッションに参加していないとこのメソッドは実行できません
MyPlayerで示されるプレイヤー(自分自身)にSendすることはできません
function Execute:Boolean;
接続の設定に必要なダイアログを表示し、セッションに参加します。
ダイアログ内部でConnect → CreateSession / JoinSession までを自動的に行います。
接続が成立するとTrueを返します。
procedure OnComesNewChallenger(Sender:TObject; player:TDDPDPlayer; ShortName,LongName:String) of object;
他のプレイヤーがセッションに参加してくると、このイベントが発生します。
procedure OnEscapeChallenger(Sender:TObject; player:TDDPDPlayer; ShortName,LongName:String) of object;
他のプレイヤーがセッションから出て行くと、このイベントが発生します。
procedure OnArriveMessage(Sender:TObject; from:TDDPDPlayer; data:Pointer; dataSize:DWord) of object;
他のプレイヤーからのメッセージが届くと、このイベントが発生します。
NoMessageIDプロパティがTrueの時は、from引数にはNilが入ります。