本項目は設計変更(2012/08/07-1)により破棄された

(Win32)メインルーチン(2012/08/02-1)

 メインルーチンのファイル名は「SPWebSocketServer.cpp」とする。
 将来、本プログラムはサービス化する予定であるため、プログラムはコマンドプロンプトベースではなく、ウィンドウを持たないWindowsプログラミングとする。
 そのため、main関数ではなくWinMainを使用する。
 現状のメインルーチンでは、Winsockの初期化および設定ファイルに入っている待機ポート分だけの待機スレッドを起動するに留める。
 将来的には、マネージャープログラムからのメッセージを送受信して、各スレッドに対して指示を送るルーチンを含める。
 設定ファイルからの設定に読み込みに関しては、設定ファイルを参照のこと

SPWebSocketServer.cpp
#include <winsock2.h>
#include "Setting.h"
#include "ListenThread.h"

// Need to link with Ws2_32.lib
#pragma comment(lib, "ws2_32.lib")

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    
    //WINSOCKの初期化
    WORD wVersionRequest = WINSOCK_VERSION;
    WSADATA wsaData;

    if( WSAStartup( wVersionRequest , &wsaData ) )
    {
        MessageBox( NULL , L"Winsock2の初期化に失敗しました" , NULL , MB_OK );
        return FALSE;
    }

    if( wsaData.wVersion != wVersionRequest )
    {
        MessageBox( NULL , L"Winsock2の初期化に失敗しました。\r\n要求されたバージョンで初期化できません。" , NULL , MB_OK );
        WSACleanup();
        return FALSE;
    }

    HANDLE hAppGlobalMutex = CreateMutex( NULL , FALSE , L"SPWebSocketServer" );
    int iRet = 0;

    //多重起動防止用
    if( GetLastError() != ERROR_ALREADY_EXISTS)
    {
        int iListenNumber = CSetting::Inst()->GetListenNumber();
        for( int i=0 ; i<iListenNumber ; i++ )
        {
            CPortSetting * pPortSetting = CSetting::Inst()->GetListenPort( i );
            if( pPortSetting )
            {
                DWORD dwThreadID;

                CListenParameter * pParameter = new CListenParameter();
                pParameter->SetSettingIndex( i );
                CreateThread( NULL , 0 , CListenThreadManager::ThreadProc , pParameter, 0, &dwThreadID );
            }
        }
    }

    return 0;
}