本項目は設計変更(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;
}