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

LobbyClient


LobbyClient 는, 간단한 로비 클라이언트 애플리케이션이다. 로컬 시스템 위에의 등록이 끝난 Microsoft® DirectPlay® 애플리케이션이, 모두 표시된다. 사용자는, 선택한 서비스 프로바이더를 사용해, 그러한 애플리케이션을 1 개 이상 기동할 수 있다. 기동하는 로비 애플리케이션에는, 게임에 참가하는지, 또는 게임의 호스트가 되는 것을 지시할 수 있다.

패스

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

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

사용자가이드

LobbyClient 샘플에서는,[Launch App] 를 클릭해 애플리케이션을 기동하기 전에, 기동 파라미터를 선택할 수 있는 다이알로그 박스가 표시된다. [Active Connections] 의 일람에는, 현재의 모든 로비 애플리케이션에의 핸들이 표시된다. [Send Message] 를 클릭 하면, 로비 애플리케이션에 로비 메시지가 송신된다. 이것은, 주로 데모의 목적으로 행해진다. 한층 더 복잡한 로비 클라이언트에서는, 이 기능을 유효하게 사용해, 로비 애플리케이션이 응답하는 메시지를 건네주는 일도 가능하다.

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

프로그래밍 정보

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

  1. CoInitialize 을 사용해 구성 요소 개체 모델 (COM)을 초기화한다.
  2. CoCreateInstance 를 사용해 IDirectPlay8Peer 개체를 생성 한다.
  3. IDirectPlay8Peer::Initialize 를 호출해, 메시지 핸들러에 대해 인터페이스에게 전한다.
  4. CoCreateInstance 를 사용해 IDirectPlay8LobbyClient 개체를 생성 한다.
  5. IDirectPlay8LobbyClient::Initialize 를 호출해, 로비 메시지 핸들러에 대해 인터페이스에게 전한다.

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

  1. 등록을 마친 로비 애플리케이션을 열거해, 리스트 박스에 표시한다. 「EnumRegisteredApplications」를 참조할것.
  2. DirectPlay 서비스 프로바이더를 열거해, 리스트 박스에 표시한다. 「EnumServiceProviders」를 참조할것.
  3. 새로운 서비스 프로바이더가 선택되어 초기화될 때마다, 서비스 프로바이더의 어댑터를 열거한다. 「EnumAdapters」를 참조할것.

[Launch App] 를 클릭 하면,LaunchApp 함수는 다음의 처리를 실행한다.

  1. DPL_CONNECT_INFO 구조체에 정보를 저장 한다. 호스트 주소와 장치 주소를 시작해DPN_APPLICATION_DESC 가 포함되기 (위해)때문에, 이 처리는 복잡하다. 「LaunchApp」 및 「AllocAndInitConnectSettings」를 참조할것.
  2. IDirectPlay8LobbyClient::ConnectApplication 를 호출해,DPL_CONNECT_INFO 구조체를 건네준다.
  3. DPL_CONNECT_INFO 구조체를 릴리즈 한다. 이 구조체에는 수많은 DirectPlay 주소가 있기 (위해)때문에, 이 처리는 복잡하다. 「FreeConnectSettings」를 참조할것.

DirectPlayLobbyMessageHandler 함수는, 다음의 메시지를 처리할 수 있다.

DPL_MSGID_DISCONNECT로비 애플리케이션의 접속은 해제되었다. pDisconnectMsg->hDisconnectId 파라미터에는, 접속 해제된 로비 애플리케이션의 핸들이 포함되어pDisconnectMsg->hrReason 파라미터에는 그 이유가 포함된다. 이 샘플은, 메시지 박스를 표시한다.
DPL_MSGID_RECEIVE로비 애플리케이션은 클라이언트 데이터를 송신했다. 이 샘플은, 어느 메시지에도 응답하지 않는다.
DPL_MSGID_SESSION_STATUS로비 애플리케이션 상태가 변경되었다. pStatusMsg->hSender 파라미터는, 사전에 정의된 스테이터스 코드의 1 개를 취한다. 이 샘플은 사용자 인터페이스 (UI)를 갱신해, 로비 상태가 갱신된 것을 나타낸다. 그러나, 보다 복잡한 로비 클라이언트에서는, 액션을 사용하면 좋다.
DPL_MSGID_CONNECTION_SETTINGS로비 애플리케이션의 접속 설정이 변경되었다. 이 로비 클라이언트는 액션을 사용하지 않는다. 그러나, 보다 복잡한 클라이언트에서는, 액션을 사용하면 좋다.

[Send Message] 를 클릭 하면,SendMsgToApp 함수는 IDirectPlay8LobbyClient::Send 를 호출한다. hConnection 파라미터는 수신측인 로비 애플리케이션의 핸들로 설정되어pBuffer 파라미터는 메시지 버퍼로 설정된다.

[Disconnect] 를 클릭 하면,DisconnectFromApp 함수는 IDirectPlay8LobbyClient::ReleaseApplication 를 호출한다. hApplication 파라미터는, 접속의 해제원이 되는 로비 애플리케이션의 핸들로 설정된다.



© 2002 Microsoft Corporation. All rights reserved.
↑TOP