3.Making a main loop of a server

넷텐션

서버는, 클라이언트로부터 메시지를 받아서 처리를 해줄 수 있는 콘솔 앱이 되겠습니다.

서버 앱이 main 함수에서, Proud.CNetServer 객체를 만듭시다.

본 튜토리얼에서는 include 구문 사용 등 여타 내용에 대해서는 생략하여 서술하고 있습니다. 생략된 내용까지 모두 포함하고 있는 최종 결과물은 ProudNet/Sample/Simple 폴더에 있습니다.

int main(int argc, char* argv[])
{
    // Network server instance.
    shared_ptr<CNetServer> srv(CNetServer::Create());

    CStartServerParameter p1;
    p1.m_protocolVersion = g_Version; // This must be the same to the client.
    p1.m_tcpPorts.Add(g_ServerPort); // TCP listening endpoint

    ErrorInfoPtr err;
    try
    {
        // Starts the server.
        // This function throws an exception on failure.
        // Note: As we specify nothing for threading model,
        // RMI function by message receive and event callbacks are
        // called in a separate thread pool.
        // You can change the thread model. Check out the help pages for details.
        srv->Start(p1);
    }
    catch (Exception &e)
    {
        cout << "Server start failed: " << e.what() << endl;
        return 0;
    }

    while (true)
    {
        // get user input
        cin >> userInput;
    }
    ...
}

위 소스에서 사용되는 protocol version과 server port는 클라이언트에서도 공유하는 값이어야 합니다. 따라서 두 변수는 Common 프로젝트에 다음과 같이 선언합니다.

// Protocol version that you define.
// Your server app and client app must have the same value below.
PNGUID guid = { 0x3ae33249, 0xecc6, 0x4980, { 0xbc, 0x5d, 0x7b, 0xa, 0x99, 0x9c, 0x7, 0x39 } };
Guid g_Version = Guid(guid);

// TCP listening port number.
int g_ServerPort = 33334;

이때 위 guid는 Visual Studio의 Guid Generator를 이용해서 새로 넣어주는 것이 더 안전합니다. Guid Generator는 'Visual Studio의 도구->GUID 만들기'를 선택하면 됩니다. (참고: 7. Starting a server)