예제 #1
0
void CKademlia::Disconnect()
{
	if(!m_pKadHandler)
		return;

	m_pKadEngine = NULL;

	m_pLookupManager = NULL;
	m_pPayloadIndex = NULL;

	m_pFirewallHandler = NULL;
	SaveNodes();
	m_pKadHandler = NULL;
	m_pRootZone = NULL;

	LogLine(LOG_INFO, L"Neo Kad Stopped");
}
예제 #2
0
void CKademlia::Process(UINT Tick)
{
	m_pSocket->Process((Tick & EPerSec) != 0);

	if(!m_pKadHandler)
		return;

	if((Tick & E2PerSec) != 0) // 2 times a second
	{
		m_pFirewallHandler->Process(Tick);

		m_pKadHandler->Process(Tick);
		m_pRootZone->Process(Tick);
			
		m_pPayloadIndex->Process(Tick);
	}

#ifndef _DEBUG
	if(IsConnected())
#endif
	{
		m_pLookupManager->Process(Tick);

		if((Tick & E10PerSec) != 0) // 10 times a second
			m_pKadEngine->Process(Tick);

		if((Tick & EPer10Sec) != 0) // every 10 seconds
		{	
			if(GetCurTick() - m_uLastSave > SEC2MS(Cfg()->GetInt("NodeSaveInterval")))
			{
				SaveNodes();
				m_uLastSave = GetCurTick();
			}
		}
	}
}
예제 #3
0
파일: SoundModem.c 프로젝트: g8bpq/BPQ32
static int ExtProc(int fn, int port, unsigned char * buff)
{
	int len = 0, txlen=0;
	struct CHANNELINFO * PORT = Portlist[port];
	struct PORTCONTROL * PORTVEC = PORT->PORTVEC;
	struct SOUNDTNCINFO * TNC = PortToTNC[port];
	int State = TNC->State;
	UINT * buffptr;

	switch (fn)
	{
	case 1:				// poll

		TNC->ProcessMonitor++;
		
		if (TNC->ProcessMonitor > 300)
		{
			TNC->ProcessMonitor = 0;
			
			if (TNC->PID)
			{
				HANDLE hProc;
				hProc =  OpenProcess(PROCESS_TERMINATE | PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, TNC->PID);

				if (hProc)
				{	
					DWORD ExitCode = 0;

					GetExitCodeProcess(hProc, &ExitCode);
					if (ExitCode != STILL_ACTIVE)
						RestartSoundTNC(TNC);

 					CloseHandle(hProc);
				}
			}
			else
				RestartSoundTNC(TNC);
		}
	
		if (State & 0x20)
			PORTVEC->SENDING++;

		if (State & 0x10)
			PORTVEC->ACTIVE++;

		buffptr = Q_REM(&RXQ[port]);

		if (buffptr)
		{
			len = buffptr[1];

			memcpy(&buff[7], &buffptr[2], len);
			len+=7;
			buff[5]=(len & 0xff);
			buff[6]=(len >> 8);

			ReleaseBuffer(buffptr);

			return len;
		}

		return 0;

	case 2: // send

		buffptr = GetBuff();
			
		if (buffptr == 0) return (0);			// No buffers, so ignore

		txlen = (buff[6] <<8 ) + buff[5] - 7;	
		buffptr[1] = txlen;
		buffptr[2] = PortToChannel[port];		// Channel on this Soundcard
		memcpy(buffptr+3, &buff[7], txlen);

		C_Q_ADD(&TNC->TXQ, buffptr);

		return 0;


	case 3:				// CHECK IF OK TO SEND

		return (0);		// OK

	case 4:				// reinit

		return (0);		// OK
			
	case 5:				// Close

		if (TNC->PID)
		{
			KillSoundTNC(TNC);			
			if (AUTOSAVE == 1) SaveNodes();	
			Sleep(1000);
		}

		return (0);

	}

	return 0;

}