DirectPlay DirectPlay C++ 샘플 SimplePeer   [목차열람] [주소복사] [슬롯비우기]
SimplePeer
 
Microsoft DirectX 9.0

SimplePeer


샘플 SimplePeer 는, 간단한 피어 투 피어 애플리케이션의 처리 방법을 나타낸다. 세션에 참가하는지, 또는 세션을 생성 하면, 곧바로 게임이 시작 한다. 세션에는, 다른 player도 언제라도 참가할 수 있다.

패스

소스 파일 : (SDK 루트) \Samples\C++\DirectPlay\SimplePeer

실행 가능 파일 :(SDK 루트) \Samples\C++\DirectPlay\Bin

사용자가이드

player 의 이름을 입력해, 접속의 종류를 선택한다. [Wait for lobby connection] 또는 서비스 프로바이더를 선택할 수 있다. [Multiplayer Games] 다이알로그 박스를 사용해, 참가하는 액티브한 게임의 검색 또는 새로운 게임의 시작이 생긴다. 게임에 참가하는지, 게임을 생성 하면, 곧바로 게임이 시작 한다. 다른 player는, 언제라도 게임에 참가할 수 있다. 호스트의 처리이 유효하게 되어 있는 경우, Microsoft® DirectPlay® 가 자동적으로 호스트 세션을 다른 player로 처리하기 (위해)때문에, 호스트 player는 언제라도 게임을 빠질 수 있다.

  Internetwork Packet Exchange (IPX) 서비스 프로바이더를 선택했을 경우, DirectPlay 에 주소의 검색을 실행시키려면 ,[use DPNSVR] 체크 박스를 온으로 한다.

프로그래밍 정보

InitDirectPlay 함수는 다음의 처리를 실행한다.

  1. CoInitialize 를 사용해 구성 요소 개체 모델 (COM)을 초기화한다.
  2. CoCreateInstance 를 사용해 IDirectPlay8Peer 개체를 생성 한다.
  3. CoCreateInstance 를 사용해 IDirectPlay8LobbiedApplication 개체를 생성 한다.
  4. IDirectPlay8Peer::Initialize 를 호출해, 메시지 핸들러를 건네준다.
  5. IDirectPlay8LobbiedApplication::Initialize 를 호출해, 메시지 핸들러를 건네준다.
  6. IDirectPlay8LobbiedApplication::Initialize 메서드의 반환값을 확인한다. 처리에 성공했을 경우, 애플리케이션은 로비 클라이언트에 의해 기동된다.

애플리케이션이 로비 클라이언트에 의해 기동되었을 경우, 접속 설정은 CNetConnectWizard 의 ConnectUsingLobbySetting 함수에 의해, 로비 클라이언트로부터 취득할 수 있다. CNetConnectWizard 클래스는, 헬퍼-클래스이다. 이 클래스는 다이알로그 박스를 사용해, 사용자에 정보를 문의한다. ConnectUsingLobbySettings 함수는 다음의 처리를 실행한다.

  1. IDirectPlay8LobbiedApplication::GetConnectionSettings 를 호출해, 클라이언트로부터 접속 설정을 얻어온다.
  2. DPL_CONNECTION_SETTINGS 구조체의 dwFlags 멤버로 DPLCONNECTIONSETTINGS_HOST 플래그를 체크해, 호스트가 될 필요가 있을지 어떨지를 확인한다.
  3. IDirectPlay8Peer::SetPeerInfo 를 호출한다.
  4. 호스트가 되는 경우는 IDirectPlay8Peer::Host 을 호출해, 그렇지 않은 경우는 IDirectPlay8Peer::Connect 를 호출한다.
  5. DPL_CONNECTION_SETTINGS 의 개체를 릴리즈 한다.

로비 클라이언트로부터 접속 설정이 제공되지 않는 경우, 애플리케이션은 CNetConnectWizard 의 DoConnectWizard 함수를 호출한다. DoConnectWizard 는, 다음의 처리를 실행한다.

  1. IDirectPlay8Peer::EnumServiceProviders 를 호출해, 서비스 프로바이더를 열거한다.
  2. ConnectionDlgOnOk 함수를 호출한다. 이 함수는 다이알로그 박스를 표시해, 사용자가 서비스 프로바이더를 선택하는지, 로비 접속의 사용을 선택할 수 있도록(듯이) 한다. [Wait for lobby connection] 가 선택되었을 경우는,IDirectPlay8LobbiedApplication::SetAppAvailable 를 호출해, 애플리케이션에 접속해 이용 가능한 것을 로비 클라이언트에게 전한다. 서비스 프로바이더가 선택되었을 경우는,CoCreateInstance 를 호출해 DirectPlay 호스트와 장치 주소 개체를 생성 한다. 다음에,IDirectPlay8Address::SetSP 를 호출해, 서비스 프로바이더의 글로벌 일의 식별자 (GUID)를 2 개의 DirectPlay 주소 개체에 건네준다.
  3. IDirectPlay8Peer::EnumHosts 를 호출해, 그 서비스 프로바이더로 진행중의 모든 게임을 열거한다.
  4. 콜백 함수에 송신하는 DPN_MSGID_ENUM_HOSTS_RESPONSE 를 처리한다.

위저드에 현재의 세션의 일람이 표시되어 사용자가 일람으로부터 게임을 선택하는지, 새로운 게임을 선택할 수 있게 된다. [Join] 를 클릭 하면,SessionDlgJoinGame 함수는 IDirectPlay8Peer::SetPeerInfo 를 호출해, player명과 IDirectPlay8Peer::Connect 를 설정해 게임에 접속한다. [Create] 를 클릭 하면,SessionDlgCreateGame 함수는 IDirectPlay8Peer::SetPeerInfo 를 호출해 player명을 설정해,IDirectPlay8Peer::Host 를 호출해 게임의 호스팅을 시작 한다. 게임명, 최대 player수, 애플리케이션의 GUID 등의 정보가 저장 된 DPN_APPLICATION_DESC 구조체는,Connect 의 호출로 건네받는다.

접속 후,[Wave to other players] 를 클릭 하면,WaveToAllPlayers 함수는 DPNID_ALL_PLAYERS_GROUP 를 설정한 dpnid 파라미터와 GAME_MSGID_WAVE 가 포함된 DWORD 를 나타내는 pBufferDesc 파라미터를 사용해,IDirectPlay8Peer::SendTo 를 호출한다.

[Exit] 를 클릭 하면, 모든 인터페이스가 소거된다.



© 2002 Microsoft Corporation. All rights reserved.
↑TOP