98 lines
2.1 KiB
C++
98 lines
2.1 KiB
C++
//#define _WIN32_DCOM
|
|
#include "stdafx.h"
|
|
#include <WBANetwork/Common.h>
|
|
#include <WBANetwork/WBANetwork.h>
|
|
#include <objbase.h>
|
|
|
|
HANDLE g_handleMutex = INVALID_HANDLE_VALUE;
|
|
WBANetwork::LPFN_ErrorHandler g_lpfnHandler = 0;
|
|
|
|
|
|
void WBANetwork_Finalize()
|
|
{
|
|
if( g_handleMutex != INVALID_HANDLE_VALUE )
|
|
::CloseHandle( g_handleMutex );
|
|
|
|
::WSACleanup();
|
|
::CoUninitialize();
|
|
|
|
|
|
#ifdef _CRT_DEBUG
|
|
_CrtCheckMemory();
|
|
_CrtDumpMemoryLeaks();
|
|
#endif
|
|
}
|
|
|
|
void WBANetwork_DefaultErrorHandler( DWORD /*lastError*/, TCHAR* /*desc*/ )
|
|
{
|
|
// Nothing to do...
|
|
}
|
|
|
|
bool WBANetwork::Initialize( TCHAR* mutexName, LPFN_ErrorHandler handler )
|
|
{
|
|
CoInitializeEx( 0, COINIT_MULTITHREADED );
|
|
|
|
|
|
// lpfnHandler는 Null이 되어서는 안된다.
|
|
if( handler == 0 ) g_lpfnHandler = WBANetwork_DefaultErrorHandler;
|
|
else g_lpfnHandler = handler;
|
|
|
|
//CallbackErrorHandler(0,_T("WBANetwork Library Version 1.0.0.1"));
|
|
|
|
if( mutexName != 0 )
|
|
{
|
|
g_handleMutex = ::OpenMutex( MUTEX_ALL_ACCESS, 0, ( LPCTSTR )mutexName );
|
|
if( g_handleMutex != 0 )
|
|
{
|
|
CallbackErrorHandler(GetLastError(),_T("중복된 Mutex 세션이 존재합니다."));
|
|
return false;
|
|
}
|
|
|
|
g_handleMutex = ::CreateMutex( 0, 0, ( LPCTSTR )mutexName );
|
|
}
|
|
|
|
// Winsock 2.2 초기화
|
|
{
|
|
WSADATA wsa;
|
|
|
|
if( ::WSAStartup( 0x202, &wsa ) != 0 )
|
|
{
|
|
CallbackErrorHandler(WSAGetLastError(), _T("소켓 초기화에 실패 했습니다."));
|
|
return false;
|
|
}
|
|
}
|
|
|
|
#ifdef _CRT_DEBUG
|
|
int crtFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
|
|
|
|
crtFlag |= _CRTDBG_LEAK_CHECK_DF;
|
|
crtFlag |= _CRTDBG_DELAY_FREE_MEM_DF;
|
|
crtFlag |= _CRTDBG_CHECK_ALWAYS_DF;
|
|
|
|
_CrtSetDbgFlag( crtFlag );
|
|
#endif
|
|
|
|
atexit( WBANetwork_Finalize );
|
|
return true;
|
|
}
|
|
|
|
void WBANetwork::CallbackErrorHandler( DWORD lastError, TCHAR* desc )
|
|
{
|
|
if(NULL != g_lpfnHandler) g_lpfnHandler( lastError, desc );
|
|
}
|
|
|
|
DWORD WBANetwork::StringToHash( char* target )
|
|
{
|
|
DWORD ch = 0;
|
|
DWORD result = 0, xor = 0;
|
|
|
|
DWORD len = ( DWORD )strlen( target );
|
|
for(DWORD i = 0 ; i < len ; i++ )
|
|
{
|
|
ch = ( DWORD )target[i];
|
|
result = ( ( result << 8 ) | ch ) % 16777213UL;
|
|
xor ^= ch;
|
|
}
|
|
|
|
return ( result | ( xor << 24 ) );
|
|
} |