///////////////////////////////////////////////////////////////////////////////
// StopComm
///////////////////////////////////////////////////////////////////////////////
// DESCRIPTION:
//      Close Socket and Stop Communication thread
// PARAMETERS:
//      None
///////////////////////////////////////////////////////////////////////////////
void CSocketComm::StopComm()
{
    // Close Socket
    if (IsOpen())
    {
        CloseComm();
    }

    // Kill Thread
    if (IsStart())
    {
        SleepEx(DEFAULT_TIMEOUT, TRUE);
        if (WaitForSingleObject(m_hThread, 1000L) == WAIT_TIMEOUT)
            TerminateThread(m_hThread, 1L);
        CloseHandle(m_hThread);
        m_hThread = NULL;
    }

    // Clear Address list
    if (!m_AddrList.empty())
    {
        m_AddrList.clear();
    }

    // Destroy Synchronization objects
    if (NULL != m_hMutex)
    {
        CloseHandle( m_hMutex );
        m_hMutex = NULL;
    }

}
///////////////////////////////////////////////////////////////////////////////
// WatchComm
///////////////////////////////////////////////////////////////////////////////
// DESCRIPTION:
//      Starts Socket Communication Working thread
// PARAMETERS:
//      None
///////////////////////////////////////////////////////////////////////////////
bool CSocketComm::WatchComm()
{
    if (!IsStart())
    {
        if (IsOpen())
        {
            HANDLE hThread;
            UINT uiThreadId = 0;
            hThread = (HANDLE)_beginthreadex(NULL,  // Security attributes
                                      0,    // stack
                        SocketThreadProc,   // Thread proc
                                    this,   // Thread param
                        CREATE_SUSPENDED,   // creation mode
                            &uiThreadId);   // Thread ID

            if ( NULL != hThread)
            {
                //SetThreadPriority(hThread, THREAD_PRIORITY_ABOVE_NORMAL);
                ResumeThread( hThread );
                m_hThread = hThread;
                return true;
            }
        }
    }
    return false;
}
///////////////////////////////////////////////////////////////////////////////
// SetServerState
void CSocketComm::SetServerState(bool bServer)
{
    if (!IsStart())
        m_bServer = bServer;
}
///////////////////////////////////////////////////////////////////////////////
// SetSmartAddressing : Address is included with message
void CSocketComm::SetSmartAddressing(bool bSmartAddressing)
{
    if (!IsStart())
        m_bSmartAddressing = bSmartAddressing;
}
void cHousingWarehouseDlg::UseIcon(cIcon* pIcon)
{
	if(!pIcon || pIcon->GetType() != WT_HOUSING_STORED_ICON)
		return;

	cHousingStoredIcon* pStoredIcon = (cHousingStoredIcon*)pIcon;
	stFurniture* pstFuniture = pStoredIcon->GetLinkFurniture();

	if(! pstFuniture)
		return;

	if(HOUSINGMGR->IsDoDecoration() &&
		(pstFuniture->wState == eHOUSEFURNITURE_STATE_UNINSTALL ||
		pstFuniture->wState == eHOUSEFURNITURE_STATE_KEEP))
	{
		HOUSINGMGR->CancelDecoration();
	}
	else if(pstFuniture->wState == eHOUSEFURNITURE_STATE_INSTALL)
	{
		return;
	}

	//091224 NYJ eObjectState_None가 아니면 리턴.
	if( (pstFuniture->wState == eHOUSEFURNITURE_STATE_UNINSTALL ||
		pstFuniture->wState == eHOUSEFURNITURE_STATE_KEEP) &&
		(HERO->GetState() != eObjectState_None &&
		HERO->GetState() != eObjectState_Housing))
	{
		CHATMGR->AddMsg(CTC_SYSMSG,  CHATMGR->GetChatMsg(2010) /*“가구를 설치할 수 없는 상태입니다.”*/ );
		return;
	}

	//090527 pdy 하우징 시스템메세지 꾸미기 모드가 아닐시 제한사항 [머터리얼교체]
	if( (pstFuniture->wState == eHOUSEFURNITURE_STATE_UNINSTALL ||
		pstFuniture->wState == eHOUSEFURNITURE_STATE_KEEP) &&
		HERO->GetState() != eObjectState_Housing )
	{
		//CHATMGR->AddMsg(CTC_SYSMSG,  CHATMGR->GetChatMsg(1878) );	//1878	"꾸미기 모드일때만 사용하실 수 있습니다."
		//return;

		//091224 NYJ 꾸미기모드가 아니면 꾸미기 모드로 변환
		HOUSINGMGR->RequestDecoRationMode();
		HOUSINGMGR->SetDecorationModeTemp();
	}

//	pStoredIcon->SetLock(TRUE) ;								// 사용할 아이템을 잠근다.

	if( pstFuniture->bNotDelete )								//기본설치 품목일경우 아이템사용 없음 
	if(! IsDoor( pstFuniture->dwFurnitureIndex)  )				//기본설치문은 아이템사용가능 
	if(! IsStart( pstFuniture->dwFurnitureIndex) )				//기본설치 스타트도 아이템사용가능 
		return;

	/*
	if( pstFuniture->wState == eHOUSEFURNITURE_STATE_INSTALL )
	{
		//기본설치 품목이나 문류는 설치 불가 
		if( pstFuniture->bNotDelete	|| IsDoor( pstFuniture->dwFurnitureIndex ) )
		{
			//090527 pdy 하우징 시스템메세지 기본제공가구 [설치해제]
			CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg( 1888 ) );	//1888	"기본 물품은 설치해제 할 수 없습니다."
		}
		////091223 NYJ - 내집창고에서 더블클릭으로 가구회수기능 제거.
		//else
		//{
		//	HOUSINGMGR->RequestUninstallDecoFromUseIcon(pstFuniture);
		//}
		return;
	}
	*/

	//설치중이아니면 가구꾸미기 시작
	HOUSINGMGR->StartDecoration(pstFuniture);
}