# 프로젝트 설정

### 1. 프로젝트 설정하기

각 환경에 따라 프로젝트를 설정합니다.

#### ▪️ [C++](/proudnet/proudnet/2.setting/c++)

#### ▪️ [C#](/proudnet/proudnet/2.setting/c)

#### ▪️ [Mac Xcode](/proudnet/proudnet/2.setting/mac-xcode)

#### ▪️ [Linux](/proudnet/proudnet/2.setting/linux)

#### ▪️ [Unity3D](/proudnet/proudnet/2.setting/unity3d)

#### ▪️ [Unreal Engine 4](/proudnet/proudnet/2.setting/unreal-engine-4)

### 2. PIDL 파일 작성하기

ProudNet에서 Remote Method Invocation(RMI)를 사용하려면 먼저 확장자가 PIDL인 파일을 만들어야 합니다.

PIDL 파일은 호스트 간 주고받을 메시지를 정의하는 소스 파일로, PIDL 파일을 컴파일을 하면 proxy와 stub이 만들어지게 되는데 이들을 호스트 프로그램에 포함시킬 것입니다.

메시지 첫 ID 값을 60,000 이상으로 지정하지 마세요.
60,000 이상의 값은 ProudNet 내부 PIDL의 메시지 ID값으로 이미 지정되어 있습니다. 메시지 ID가 겹칠 경우 AttachProxy 및 AttachStub 함수에서 exeption이 발생합니다.

PIDL 파일의 기본적인 사용 형식은 다음과 같습니다.

### PIDL

```
global <네임스페이스> <메시지의 첫 ID 값>
{
    ([특성 선언]) <함수 선언> ( [in] 함수 파라메터, ... );
}
```

**네임스페이스**
PIDL 파일을 컴파일했을 때 생성되는 proxy, stub 모듈이 갖는 C++ namespace 이름입니다.
ProudNet은 2개 이상의 proxy, stub 을 한꺼번에 사용할 수 있는데, 그 대신 namespace로 모호성을 해결해야 하기 때문에 namespace 가 반드시 필요합니다.
예를 들어 'LobbyC2S' 라고 선언하면, '게임 로비에서 클라이언트-> 서버 호출 RMI를 선언함'을 의미합니다.
**메시지의 첫 ID 값**
RMI가 호출되면 각각의 RMI는 네트워크 메시지로 변환되는데, 이 메시지는 ID 값을 메시지 헤더에 갖게 됩니다.
주의할 점은, 프로세스 간 통신을 위해 가지고 있는 여러 개의 proxy, stub끼리 메시지 ID의 범위가 서로 겹치면 안됩니다.
**특성 선언**
[in] 선언을 반드시 해야 합니다.
**함수 선언**

RMI 함수 이름입니다.
**함수 파라미터**
C++ 함수 선언과 비슷합니다. 파라미터는 아래와 같은 선언이 허용되지만 포인터 타입은 허용되지 않습니다.

```
int a 
std::vector<int> b
CString c
```

PIDL 파일 예시는 다음과 같습니다.

### PIDL

```
rename cs(Proud::String, System.String);

global LobbyC2S 5000  // 메시지 ID가 5000부터 시작
{
    // ID=5001이 됩니다
    Logon([in] Proud::String name,[in] Proud::String password);
    RequestRoomList([in] int pageNumber); // ID=5002가 됩니다
    Chat([in] Proud::String name); // ID=5003이 됩니다.
}
```

**참고**

[**RMI**](/proudnet/pn_reference_ko/dictionary#rmi)

[**RMI 메시지 범위**](/proudnet/proudnet/using_pn/rmi#rmi-2)

### 3. [PIDL 컴파일러 실행하기](/proudnet/proudnet/2.setting/pidl)

PIDL 컴파일러를 실행합니다.

### 4. [서버와 클라이언트 시작하기](/proudnet/proudnet/using_pn/server_client#undefined)

서버와 클라이언트를 시작해 ProudNet 사용 준비를 마칩니다.