Игра по сети: Использование DirectPlay

[Уголок DirectX]   [Предыдущая часть]   [Следующая часть]


Инициализация

Как и в работе с DirectDraw, мы сделаем для DirectPlay свой модуль и назовем его mdlDirectPlay.

Первый шаг который надо совершить в любом приложении, использующем DirectPlay - создать объект DirectPlay4 и перечислить доступные протоколы.

Для этого мы напишем процедуру InitDPlay. Все объявления поместите в раздел Declarations модуля.

Public gObjDX As New DirectX7 'Объект DirectX
Public gObjDPlay As DirectPlay4 'Объект DirectPlay
Public gObjEnumConnections As DirectPlayEnumConnections 'Объект
'в котором будет содержаться найденные протоколы и соединения

Public Sub InitDPlay()
On Error GoTo FAILED
Set gObjDPlay = gObjDX.DirectPlayCreate("") 'Создадим DirectPlay
Set gObjEnumConnections = gObjDPlay.GetDPEnumConnections( _
"", DPCONNECTION_DIRECTPLAY) 'получим список протоколов
Exit Sub

FAILED: 'Если была ошибка
MsgBox ("Невозможно инициализировать DirectPlay.")
End
End Sub

Обратите внимание, что если вы собираетесь использовать модуль mdlDirectPlay7 с другими модулями, например mdlDirectDraw7, которые разбирались в "Уголке", вы должны убрать объявления объекта DirectX7 из всех мест, кроме одного. Например я оставляю его всегда в mdlDirectDraw7, так как использую его почти во всех своих проектах. В нашем случае, мы оставим объявление объекта DirectX7 здесь, потому что не будем использовать никаких ранее сделанных модулей.

В процедуре InitDPlay мы создали объект DirectPlay4 таким же образом, как и объект DirectDraw. Затем, мы получили в объекте gObjEnumConnections список протоколов для установления связи.

После того, как мы получили набор соединений в объекте DirectPlayEnumConnections, надо их оттуда поодиночке извлечь. Следующая функция возвращает массив из строк, который будет состоять из найденных способов соединений. Поместите эту функцию в модуль mdlDirectPlay.

Public Function InitConnectionList() As String()
Dim NumConnections As Long
Dim arrConnections() As String
Dim strName As String
Dim X As Long

NumConnections = gObjEnumConnections.GetCount 'Количество соединений
ReDim arrConnections(NumConnections - 1)
For X = 1 To NumConnections
strName = gObjEnumConnections.GetName(X) 'Извлекаем по одному
arrConnections(X - 1) = strName
Next X

InitConnectionList = arrConnections
End Function

В принципе, вы теперь уже готовы к первому запуску приложения. На форме frmMain нарисуйте ListBox lstConnections - туда будут помещаться найденные соединения. Теперь, добавьте в процедуру FormLoad такой код:

Private Sub Form_Load()
Dim I As Integer

mdlDirectPlay7.InitDPlay 'Инициализировать DirectPlay
arrConnections = mdlDirectPlay7.InitConnectionList 'Получить
'и распечатать список протоколов
For I = LBound(arrConnections) To UBound(arrConnections)
lstConnections.AddItem arrConnections(I)
Next I
End Sub

Запустите программу и скорее всего в ListBox'е вы увидите несколько способов подключения. У меня дома нет никакой сети, кроме теоретического нуль-модема, однако результатом у меня было четыре способа соединения: IPX, TCP/IP, Модем и Нуль-Модем. У кого-то может быть больше, у кого-то может быть меньше. Таким образом, даже не имея доступной сети, вы можете добиться результатов от нашей программы.