DirectPlay8
От: Михаил Орлов  
Дата: 10.01.03 14:07
Оценка:
Создаю я сервер в полном согласии с SDK:
CoCreateInstance CLSID_DirectPlay8Server
сервер->Initialize();
CoCreateInstance CLSID_DirectPlay8Address
адрес->SetSP(&CLSID_DP8SP_TCPIP);
адрес->AddComponent(порт 27543);
сервер->Host(структура с параметрами, адрес);
адрес->GetURLa();

И получаю от последнего метода:
x-directplay:/provider=%7BEBFE7BA0-628D-11D2-AE0F-006097B01411%7D;port=27543

Два вопроса:
1) Почему эта строка не несёт в себе информации об моём IP адресе (числа в процентах -- GUID провайдера, в данном случае TCP/IP)?Нафиг нужен этот адрес, если клиент и так знает и порт, и провайдера (TCP/IP)?
2) В разных местах пробую делать сервер->SetServerInfo, но при любых параметрах выдаётся ошибка DPNERR_INVALIDFLAGS, хотя флаг стоит единственно допустимый -- DPNSETSERVERINFO_SYNC. Он, очевидно, может быть как-то связан с другим параметром функции -- phAsyncHandle, хотя ошибка случается и при передаче в качестве этого параметра NULL, и при передаче в качестве него требуемого определением функции указателя на DWORD (для возвращения значения хэндла асинхронного выполнения). Что делать? Почему в SDK написано, что без вызова SetServerInfo ничего работать не будет (Clients cannot сonnect to a server until this method has been called), а в их samples им и не пахнет?
Без DPNSETSERVERINFO_SYNC очень не приемлимо, я не пробовал.

12.01.03 06:18: Перенесено модератором из 'Мультимедиа, графика, звук' — H_D
Re: DirectPlay8
От: ziserg Украина  
Дата: 10.01.03 16:34
Оценка:
Здравствуйте, Михаил Орлов, Вы писали:

МО>Два вопроса:

МО>1) Почему эта строка не несёт в себе информации об моём IP адресе (числа в процентах -- GUID провайдера, в данном случае TCP/IP)?МО>Нафиг нужен этот адрес, если клиент и так знает и порт, и провайдера (TCP/IP)?

О каком IP адресе ???, у тебя их может быть бесконечное количество даже на одном физическом интерфейсе

МО>2) В разных местах пробую делать сервер->SetServerInfo, но при любых параметрах выдаётся ошибка DPNERR_INVALIDFLAGS, хотя флаг МО>стоит единственно допустимый -- DPNSETSERVERINFO_SYNC. Он, очевидно, может быть как-то связан с другим параметром функции -- МО>phAsyncHandle, хотя ошибка случается и при передаче в качестве этого параметра NULL, и при передаче в качестве него требуемого МО>определением функции указателя на DWORD (для возвращения значения хэндла асинхронного выполнения). Что делать? Почему в SDK МО>написано, что без вызова SetServerInfo ничего работать не будет (Clients cannot сonnect to a server until this method has been МО>called), а в их samples им и не пахнет?


Без вызова SetServerInfo работать будет(правда у меня директ 8.1, вот на 8-м не уверен, не пробовал), почему они это написали наверное стоит у них узнать, я не вкурсе.
В примерах 8-го директа нигде не используется вызов SetServerInfo, однако в примерах директа 8.1 есть. Скорее всего ты нахомутал
что-то с параметрами. Вот собсно тебе вызов от мелкософта
    <...>
    DPN_PLAYER_INFO         dpPlayerInfo;

    ZeroMemory(&dpPlayerInfo, sizeof(DPN_PLAYER_INFO));
    dpPlayerInfo.dwSize = sizeof(DPN_PLAYER_INFO);
    dpPlayerInfo.dwInfoFlags = DPNINFO_NAME;
    dpPlayerInfo.pwszName = wszName;
    dpPlayerInfo.pvData = NULL;
    dpPlayerInfo.dwDataSize = NULL;
    dpPlayerInfo.dwPlayerFlags = 0;

    if( FAILED( hr = g_pDPServer->SetServerInfo( &dpPlayerInfo, NULL, NULL, 
                                                 DPNSETSERVERINFO_SYNC ) ) )
    {
      <...>
    }


МО>Без DPNSETSERVERINFO_SYNC очень не приемлимо, я не пробовал.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.