⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 net_factory.cpp

📁 实时监控
💻 CPP
字号:
#include "stdafx.h"
#include "net_factory.h"
#include "net_cmd.h"
#include "net_cmdtcp.h"

#define UDP_WAIT_TIME 5

extern net_cmd	*		udpcmd; 
extern net_cmdtcp	*	tcpcmd;
//extern FILE   *fppppp;

DWORD WINAPI LoginThread(LPVOID pnet)
{
	net_factory *p = (net_factory*)pnet;
	if(!pnet || !udpcmd || !tcpcmd)
		return 0;

	net_networktype *pt;

	while(1)
	{
		if(!p || p->m_nettype_exit)
			return 0;
		
		for(lit dit=p->login_list.begin(); dit!=p->login_list.end(); dit++)
		{
			if(!p || p->m_nettype_exit)
				return 0;

			if(dit >= p->login_list.end() || dit < p->login_list.begin())
				continue;

			pt= *dit;
			if(!pt || pt->loginok)
				continue;

			if(++(pt->connecttime) > UDP_WAIT_TIME)
			{
				BOOL m_bool = tcpcmd->login(pt->ip, pt->port, pt->logindvrname, pt->logindvrpass);
				if(m_bool)
				{
					pt->loginok = TRUE;
					pt->nettype  = FALSE;
					continue;
				}

				if(!p || p->m_nettype_exit)
					return 0;

				if(dit >= p->login_list.end() || dit < p->login_list.begin())
					continue;

				if(pt)
				{
					delete pt;
					p->login_list.erase(dit);
					dit--;
				}
			}
			
		}
		Sleep(100);		
	}
	
	return 0;
}


BOOL net_factory::create()
{
	DWORD ThreadID;
	ThreadHandle = CreateThread(NULL, 0, LoginThread, this, 0,  &ThreadID);
    if(!ThreadHandle)
		return false;
	
	login_list.reserve(256);
	m_nettype_exit = FALSE;
	SetThreadPriority(ThreadHandle, THREAD_PRIORITY_NORMAL) ;
}

BOOL net_factory::destroy()
{
	m_nettype_exit = TRUE;
	if(ThreadHandle)
	{
		WaitForSingleObject(ThreadHandle, INFINITE) ;
		CloseHandle(ThreadHandle);
		ThreadHandle = NULL;
	}

	for(lit dit=login_list.begin(); dit!=login_list.end(); dit++)
	{
		net_networktype *pt = *dit;
		if(!pt)
			continue;

		delete pt;
		login_list.erase(dit);
		dit--;
	}
	return TRUE;
}

BOOL net_factory::login_net(ULONG ip, USHORT port, LPCTSTR user, LPCTSTR password)
{
	if(!udpcmd)
		return FALSE;

	net_networktype *pnett;
	lit pit = find_nettype(ip, port);
	if(pit)
	{
		pnett = *pit;
		if(pnett->loginok)
			delete_nettype(ip, port);
		else
			return FALSE;
	}
	
	pnett = new net_networktype;
	if(!pnett)
		return FALSE;

	pnett->ip = ip;				pnett->port = port;
	pnett->connecttime = 0;		pnett->nettype = TRUE;
	pnett->loginok = FALSE;

	strcpy(pnett->logindvrname, user);
	strcpy(pnett->logindvrpass, password);
	
	TRACE("push back net type ip = %d port = %d !!!\n", ip, port);
	login_list.push_back(pnett);
	udpcmd->login(ip, port, user, password);

	return TRUE;
}

lit net_factory::find_nettype(ULONG ip, USHORT port)
{
	for(lit dit=login_list.begin(); dit!=login_list.end(); dit++)
	{
		net_networktype *pt = *dit;
		if(!pt)
			continue;
		if(pt->ip == ip && pt->port == port)
			return dit;
	}
	return NULL;
}

BOOL net_factory::delete_nettype(ULONG ip, USHORT port)
{
	lit pit = find_nettype(ip, port);
	if(!pit)
		return FALSE;
	
	TRACE("delete_nettype list");
	net_networktype *pt = *pit;
	delete pt;
	login_list.erase(pit);
	return TRUE;
}

BOOL net_factory::insert_nettype(ULONG ip, USHORT port, BOOL m_bool)
{
	lit pit = find_nettype(ip, port);
	if(!pit)
		return FALSE;

	net_networktype *pt = *pit;
	if(!pt)
		return FALSE;

	pt->loginok = TRUE;
	pt->nettype = m_bool;
	return TRUE;
}

BOOL net_factory::find_network_type(ULONG ip, USHORT port)
{
	lit pit = find_nettype(ip, port);
	if(!pit)
		return FALSE;

	net_networktype *pt = *pit;
	if(!pt)
		return FALSE;
	return pt->nettype;
}


BOOL net_factory::find_network_type(int group)
{
	if(udpcmd && udpcmd->is_opened(group))
		return TRUE;

	if(tcpcmd && tcpcmd->is_opened(group))
		return FALSE;

	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -