📄 net_factory.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 + -