CDataChannel::~CDataChannel(void)
{
	StopListen();

	if (m_pEchoServerDataChannel)
	{
//		m_pEchoServerDataChannel->Shutdown(SD_BOTH);
		m_pEchoServerDataChannel->Close();

		m_pEchoServerDataChannel->StopSend(THREAD_STOP_TIMEOUT);		
	}

	if (m_pLocalDataChannel)
	{	
//		m_pLocalDataChannel->Shutdown(SD_BOTH);	
		m_pLocalDataChannel->Close();		

		m_pLocalDataChannel->StopSend(THREAD_STOP_TIMEOUT);		
	}	

	if (m_pEchoServerDataChannel)
	{
		delete m_pEchoServerDataChannel;
		m_pEchoServerDataChannel=0;
	}	

	if (m_pLocalDataChannel)
	{
		delete m_pLocalDataChannel;
		m_pLocalDataChannel=0;
	}

	delete []m_szChannelCode;
	delete []m_szSessionKey;
}
Beispiel #2
0
void CMLan::StopChecking()
{
	EnterCriticalSection(&m_csAccessClass);
	if (m_hCheckThread)
	{
		TerminateThread(m_hCheckThread, 0);
		m_hCheckThread = NULL;
	}
	LeaveCriticalSection(&m_csAccessClass);
	EnterCriticalSection(&m_csReceiveThreadLock);
	m_mirStatus = ID_STATUS_OFFLINE;
	RequestStatus(false);
	StopListen();
	LeaveCriticalSection(&m_csReceiveThreadLock);

	TFileConnection* fc = m_pFileConnectionList;
	while (fc)
	{
		fc->Terminate();
		fc = fc->m_pNext;
	}
	while (m_pFileConnectionList)
		Sleep(10);

	SetAllOffline();
}
Beispiel #3
0
void CClientMgr::Destroy()
{
	m_MaxClientNum = 0;
	m_ListenPort = 0;
	m_OverTime = 0;
	m_RecvDataLimit = 0;
	m_SendDataLimit = 0;

	if (m_Listen)
	{
		StopListen();
		lxnet::Listener::Release(m_Listen);
		m_Listen = NULL;
	}
	for (std::list<CClient*>::iterator itr = m_ClientList.begin(); itr != m_ClientList.end(); ++itr)
	{
		ReleaseClientAndID(*itr);
	}
	m_ClientList.clear();

	for (std::list<CClient*>::iterator itr = m_WaitRemove.begin(); itr != m_WaitRemove.end(); ++itr)
	{
		ReleaseClientAndID(*itr);
	}
	m_WaitRemove.clear();
	m_ClientSet.clear();

	if (m_IDPool)
	{
		idmgr_release(m_IDPool);
		m_IDPool = NULL;
	}
}
Beispiel #4
0
void Transceiver::ListenData()
{
   if (BroadcastEnable){
      Wakeup();
      buffer->setChannel(myChannel);
      timer.setStage(LISTENDATA);
      buffer->StartReceive();
   } else {
      StopListen();
   }
}
Beispiel #5
0
void CLan::Shutdown()
{
	if (m_mode == LM_OFF)
		return;

	m_hostAddrCount = 0;
	StopListen();
	WSACleanup();
	m_status = LS_OK;
	m_mode = LM_OFF;
}
Beispiel #6
0
void CLan::SetCurHostAddress(in_addr addr)
{
	if (m_mode!=LM_OFF)
	{
		int oldMode = m_mode;
		StopListen();
		m_curAddr = addr;
		if (oldMode==LM_LISTEN)
			StartListen();
	}
}
Beispiel #7
0
CMLan::~CMLan()
{
	m_mirStatus = ID_STATUS_OFFLINE;
	StopChecking();
	DeleteCache();
	StopListen();
	Shutdown();
	DeleteCriticalSection(&m_csFileConnectionList);
	DeleteCriticalSection(&m_csAccessAwayMes);
	DeleteCriticalSection(&m_csReceiveThreadLock);
	DeleteCriticalSection(&m_csAccessClass);

	delete[] m_amesAway;
	delete[] m_amesNa;
	delete[] m_amesOccupied;
	delete[] m_amesDnd;
	delete[] m_amesFfc;
}
Beispiel #8
0
BOOL CNetManager::Close()
{
	StopListen();

	CloseEventThread();
	
	CloseSendDataThread();

	CConnectionMgr::GetInstancePtr()->CloseAllConnection();

	DestroyCompletePort();

	UninitNetwork();

	CConnectionMgr::GetInstancePtr()->DestroyAllConnection();

	return TRUE;
}
Beispiel #9
0
void CLan::StartListen()
{
	if (m_mode!=LM_ON)
		return;

	m_income = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
	m_filesoc = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (m_income == INVALID_SOCKET || m_filesoc == INVALID_SOCKET)
	{
		m_status = LS_CANT_CREATE_SOCKET;
		StopListen();
	}
	else
	{
		int enable = 1;
		if (setsockopt(m_income, SOL_SOCKET, SO_BROADCAST, (const char*)&enable, sizeof(enable))!=0)
		{
			m_mode = LM_ON;
			m_status = LS_CANT_TURN_ON_BROADCAST;
			StopListen();
			return;
		}
		m_mode = LM_LISTEN;
		sockaddr_in addr;
		addr.sin_addr = m_curAddr;
		addr.sin_family = AF_INET;
		addr.sin_port = PORT_NUMBER;
		if (bind(m_income, (sockaddr*)&addr, sizeof(addr))!=0)
		{
			m_mode = LM_ON;
			m_status = LS_CANT_BIND_SOCKET;
			StopListen();
			return;
		}

		if (bind(m_filesoc, (sockaddr*)&addr, sizeof(addr))!=0)
		{
			m_mode = LM_ON;
			m_status = LS_CANT_BIND_SOCKET;
			StopListen();
			return;
		}

		if (listen(m_filesoc, SOMAXCONN)!=0)
		{
			m_mode = LM_ON;
			m_status = LS_CANT_START_LISTEN;
			StopListen();
			return;
		}

		DWORD threadId;
		m_hListenThread =  CreateThread(NULL, 0, ListenProc, (LPVOID)this, 0, &threadId);
		m_hAcceptTCPThread = CreateThread(NULL, 0, AcceptTCPProc, (LPVOID)this, 0, &threadId);
		if (m_hListenThread==NULL || m_hAcceptTCPThread==NULL)
		{
			m_mode = LM_ON;
			m_status = LS_CANT_CREATE_THREADS;
			StopListen();
			return;
		}
	}
}
Beispiel #10
0
Server::~Server() {
  StopListen();
  DisconnectAllClients();
}