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

📄 caccess.cpp

📁 实现了拖盘
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// CAccess.cpp : implementation file
//
/*-----------------------------------------------
  类定义:CAccess
  代码编写:
  ------------------------------------------------*/

#include "stdafx.h"
#include "CAccess.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//初始化静态成员变量

CAccessDoc* CAccess::pDoc=NULL;
CMainFrame* CAccess::pMainFrame=NULL;
CDatabaseQuery* CAccess::pDatabase=NULL;
int CAccess::ActiveConnect=0;
int CAccess::ServerConnect=0;
int CAccess::ClientConnect=0;
CString CAccess::EntitlementIP="127.0.0.1";
CString CAccess::AuthorityIP="127.0.0.1";
CString CAccess::SessionMSIP="127.0.0.1";
CString CAccess::DbSource="qxgl";
CString CAccess::DbUser="administrator";
CString CAccess::DbPass="";
int CAccess::AuthorityPort=0;
int CAccess::EntitlementPort=0;
int CAccess::SessionMSPort=0;
int CAccess::AccessPort=0;
BYTE CAccess::LogType=NAMEPASS;
int CAccess::ClientWaitTime=1;

CAccess::CAccess()
{                    
	m_LogTag='\0';       
    m_pUrl=NULL;       
    m_pLogInfo=NULL; 
	m_pCookie=NULL;
    m_AuthTag='\0';      
    m_EntitleTag='\0';  
    m_pSid=NULL;      
    m_pMenu=NULL;    
    m_pUserName=NULL;  
    m_pPassWord=NULL;  
	m_pRole=NULL;
    m_CreateSidTag='\0'; 
    m_RevokeSidTag='\0';
	m_ErrorCode=0;
	m_LogInfoLength=0;

	m_Timer=0;
    m_pClientSocket=NULL;  
    m_pSrvSocket=NULL; 
}


void CAccess::SrvPInitial(CSrvSocket*pCSrvSocket)
{
	//初始化临界区
    InitializeCriticalSection(&CriticalSection);
	if(m_pSrvSocket!=NULL)
	{
		::MessageBox(AfxGetApp()->m_pMainWnd->m_hWnd,\
			"CAccess对象初始化失败!(对象已经初始化)",\
			"CAccess Initial",MB_OK|MB_ICONSTOP);
		return;
	}
	m_pSrvSocket=pCSrvSocket;
}

CSrvSocket* CAccess::GetSrvP()
{
	return m_pSrvSocket;
}

CClientSocket* CAccess::GetClientP()
{
	return m_pClientSocket;
}

void CAccess::FreeClientP()
{
	//临界区开始
	EnterCriticalSection(&CriticalSection);
	if(m_pClientSocket!=NULL)
	{
		delete m_pClientSocket;
		m_pClientSocket=NULL;
	}
	//离开临界区
	LeaveCriticalSection(&CriticalSection);
}

void CAccess::DeleteClientPointer()
{
	CString PeerIP;
	UINT PeerPort;
	m_pClientSocket->GetPeerAdd(PeerIP,PeerPort);
	//释放指针m_pClientSocket
	FreeClientP();
	//销毁定时器
	StopTimer();
	//写日志信息
	CString add="超时,Access与"+PeerIP;
	add+=":";
	CString port;
	port.Format("%d",PeerPort);
	add+=port;
	add+="断开连接";
	pDoc->SetConnectInfo(add);
	//写状态条
	ActiveConnect--;
	ClientConnect--;
	pMainFrame->DisplayConInfo(ActiveConnect,ClientConnect,ServerConnect);

	m_ErrorCode=2;
	RuntimeWithAccess255();
}

void CAccess::BuildTimer()
{
	LPVOID p=this;
	UINT a=(UINT)p;
	UINT timer=SetTimer(AfxGetMainWnd()->m_hWnd,a,1000*ClientWaitTime,CAccess::TimerProc);
	if(a!=timer)
	{
		pDoc->SetConnectInfo("CAccess::BuildTimer()定时器设置不成功");
	    return;
	}
	else
		m_Timer=timer;
}

void CAccess::StopTimer()
{
	if(m_Timer!=0)
	{
		KillTimer(AfxGetMainWnd()->m_hWnd,m_Timer);
	    m_Timer=0;
	}
}

void CAccess::SetConnectAdd(CString add)
{
	m_CAdd=add;
}

CString CAccess::GetConnectAdd()
{
	return m_CAdd;
}

void CAccess::Destroy()
{
	m_pSrvSocket=NULL;

	m_LogTag='\0';      
	if(m_pUrl!=NULL)delete m_pUrl;       
    if(m_pLogInfo!=NULL)delete m_pLogInfo; 
	if(m_pCookie!=NULL)delete m_pCookie;
    m_AuthTag='\0';      
    m_EntitleTag='\0';  
    if(m_pSid!=NULL)delete m_pSid;      
    if(m_pUserName!=NULL)delete m_pUserName;  
    if(m_pPassWord!=NULL)delete m_pPassWord; 
	if(m_pRole!=NULL)delete m_pRole;
    m_CreateSidTag='\0'; 
    m_RevokeSidTag='\0';
	m_CAdd.Empty();

    FreeClientP();
}

CAccess::~CAccess()
{
	//删除临界区变量
	DeleteCriticalSection(&CriticalSection);
}
//读出数据包中内容
int CAccess::PackageRead(char* pRecvBuffer,int BufferSize)
{
	int Sender;
	int Recver;
	int Type;
	int ItemLength=0;
	int length=0;
	char* pTemp;
	CString Error;
	//取得发送者,接收者和包类型信息
	bool result=GetSenderRecverType(pRecvBuffer,BufferSize,&Sender,&Recver,&Type);
	if(result==0)
	{
		Error=GetLastErrorStr();
		Error="CAccess::PackageRead:"+Error;
		pDoc->SetConnectInfo(Error);	
		return -1;
	}
	if(Recver==MOD_ACCESS)
	{
		switch(Sender)
		{
		case MOD_RUNTIME:
			switch(Type)
			{
			case PKG_RAc0:
				RuntimeWithAccess01();
				break;
			case PKG_RAc2:
				result=GetDataItem(pRecvBuffer,BufferSize,DATA_RAc2_LOGTYPE,&m_LogTag);
				if(result==0)
				{
					Error=GetLastErrorStr();
					Error="CAccess::PackageRead:"+Error;
					pDoc->SetConnectInfo(Error);
					m_ErrorCode=10;
					RuntimeWithAccess255();
					return -1;
				}
	/*			result=GetDataItemLength(pRecvBuffer,BufferSize,DATA_RAc2_URL,&ItemLength);
				if(result==0)
				{
					Error=GetLastErrorStr();
					Error="CAccess::PackageRead:"+Error;
					pDoc->SetConnectInfo(Error);
					m_ErrorCode=10;
					RuntimeWithAccess255();
					return -1;
				}
				
				m_pUrl=new char[ItemLength+1];
				pTemp=m_pUrl;
				pTemp+=ItemLength;
				*pTemp='\0';
				result=GetDataItem(pRecvBuffer,BufferSize,DATA_RAc2_URL,m_pUrl);
				if(result==0)
				{
					Error=GetLastErrorStr();
					Error="CAccess::PackageRead:"+Error;
					pDoc->SetConnectInfo(Error);
					m_ErrorCode=10;
					RuntimeWithAccess255();
					return -1;
				}
				*/
				result=GetDataItemLength(pRecvBuffer,BufferSize,DATA_RAc2_LOGINFO,&m_LogInfoLength);
				if(result==0)
				{
					Error=GetLastErrorStr();
					Error="CAccess::PackageRead:"+Error;
					pDoc->SetConnectInfo(Error);
					m_ErrorCode=10;
					RuntimeWithAccess255();
					return -1;
				}
				if(m_LogTag==NAMEPASS)  //用户名/密码方式
				{
					length=m_LogInfoLength&(0x00ff);
					length+=((m_LogInfoLength&(0xff00))>>8);
					m_pLogInfo=new char[length+1];
					pTemp=m_pLogInfo; 
					pTemp+=length;
					*pTemp='\0';
				}
				if(m_LogTag==CERT)      //证书方式
				{
					m_pLogInfo=new char[m_LogInfoLength+1];
					pTemp=m_pLogInfo; 
					pTemp+=m_LogInfoLength;
					*pTemp='\0';
				}
				result=GetDataItem(pRecvBuffer,BufferSize,DATA_RAc2_LOGINFO,m_pLogInfo);
				if(result==0)
				{
					Error=GetLastErrorStr();
					Error="CAccess::PackageRead:"+Error;
					pDoc->SetConnectInfo(Error);
					m_ErrorCode=10;
					RuntimeWithAccess255();
					return -1;
				}
				RuntimeWithAccess2();
				break;
			case PKG_RAc4:
				result=GetDataItemLength(pRecvBuffer,BufferSize,DATA_RAc4_COOKIE,&ItemLength);
				if(result==0)
				{
					Error=GetLastErrorStr();
					Error="CAccess::PackageRead:"+Error;
					pDoc->SetConnectInfo(Error);
					m_ErrorCode=10;
					RuntimeWithAccess255();
					return -1;
				}
				m_pCookie=new char[ItemLength+1];
				pTemp=m_pCookie;
				pTemp+=ItemLength;
				*pTemp='\0';
				result=GetDataItem(pRecvBuffer,BufferSize,DATA_RAc4_COOKIE,m_pCookie);
				if(result==0)
				{
					Error=GetLastErrorStr();
					Error="CAccess::PackageRead:"+Error;
					pDoc->SetConnectInfo(Error);
					m_ErrorCode=10;
					RuntimeWithAccess255();
					return -1;
				}
				result=GetDataItemLength(pRecvBuffer,BufferSize,DATA_RAc4_ROLE,&ItemLength);
				if(result==0)
				{
					Error=GetLastErrorStr();
					Error="CAccess::PackageRead:"+Error;
					pDoc->SetConnectInfo(Error);
					m_ErrorCode=10;
					RuntimeWithAccess255();
					return -1;
				}
				m_pRole=new char[ItemLength+1];
				pTemp=m_pRole;
				pTemp+=ItemLength;
				*pTemp='\0';
				result=GetDataItem(pRecvBuffer,BufferSize,DATA_RAc4_ROLE,m_pRole);
				if(result==0)
				{
					Error=GetLastErrorStr();
					Error="CAccess::PackageRead:"+Error;
					pDoc->SetConnectInfo(Error);
					m_ErrorCode=10;
					RuntimeWithAccess255();
					return -1;
				}
				result=GetDataItemLength(pRecvBuffer,BufferSize,DATA_RAc4_URL,&ItemLength);
				if(result==0)
				{
					Error=GetLastErrorStr();
					Error="CAccess::PackageRead:"+Error;
					pDoc->SetConnectInfo(Error);
					m_ErrorCode=10;
					RuntimeWithAccess255();
					return -1;
				}
				m_pUrl=new char[ItemLength+1];
				pTemp=m_pUrl;
				pTemp+=ItemLength;
				*pTemp='\0';
				result=GetDataItem(pRecvBuffer,BufferSize,DATA_RAc4_URL,m_pUrl);
				if(result==0)
				{
					Error=GetLastErrorStr();
					Error="CAccess::PackageRead:"+Error;
					pDoc->SetConnectInfo(Error);
					m_ErrorCode=10;
					RuntimeWithAccess255();
					return -1;
				}
				RuntimeWithAccess4();
				break;
			case PKG_RAc6:
				result=GetDataItemLength(pRecvBuffer,BufferSize,DATA_RAc6_COOKIE,&ItemLength);
				if(result==0)
				{
					Error=GetLastErrorStr();
					Error="CAccess::PackageRead:"+Error;
					pDoc->SetConnectInfo(Error);
					m_ErrorCode=10;
					RuntimeWithAccess255();
					return -1;
				}
				m_pCookie=new char[ItemLength+1];
				pTemp=m_pCookie;
				pTemp+=ItemLength;
				*pTemp='\0';
				result=GetDataItem(pRecvBuffer,BufferSize,DATA_RAc6_COOKIE,m_pCookie);
				if(result==0)
				{
					Error=GetLastErrorStr();
					Error="CAccess::PackageRead:"+Error;
					pDoc->SetConnectInfo(Error);
					m_ErrorCode=10;
					RuntimeWithAccess255();
					return -1;
				}
				RuntimeWithAccess6();
				break;
			}
			break;
		case MOD_ENTITLEMENT:
			switch(Type)
			{
			case PKG_EAc1:
				result=GetDataItem(pRecvBuffer,BufferSize,DATA_EAc1_ENTITLETAG,&m_EntitleTag);
				if(result==0)
				{
					Error=GetLastErrorStr();
					Error="CAccess::PackageRead:"+Error;
					pDoc->SetConnectInfo(Error);
					m_ErrorCode=11;
					RuntimeWithAccess255();
					return -1;
				}
				result=GetDataItemLength(pRecvBuffer,BufferSize,DATA_EAc1_URL,&ItemLength);
				m_pUrl=new char[ItemLength+1];
				pTemp=m_pUrl;
				pTemp+=ItemLength;
				*pTemp='\0';
				result=GetDataItem(pRecvBuffer,BufferSize,DATA_EAc1_URL,m_pUrl);
				if(result==0)
				{
					Error=GetLastErrorStr();
					Error="CAccess::PackageRead:"+Error;
					pDoc->SetConnectInfo(Error);
					m_ErrorCode=11;
					RuntimeWithAccess255();
					return -1;
				}
				EntitlementWithAccess1();
				break;
			case PKG_EAc255:
				result=GetDataItem(pRecvBuffer,BufferSize,DATA_EAc255_ERRORCODE,(char*)(&m_ErrorCode));
				if(result==0)
				{
					Error=GetLastErrorStr();
					Error="CAccess::PackageRead:"+Error;
					pDoc->SetConnectInfo(Error);
					m_ErrorCode=11;
					RuntimeWithAccess255();
					return -1;
				}
				EntitlementWithAccess255();
				break;
			}
			break;
		case MOD_AUTHORITY:
			switch(Type)
			{
			case PKG_AuAc1:
				result=GetDataItem(pRecvBuffer,BufferSize,DATA_AuAc1_AUTHTAG,&m_AuthTag);
				if(result==0)
				{
					Error=GetLastErrorStr();
					Error="CAccess::PackageRead:"+Error;
					pDoc->SetConnectInfo(Error);
					m_ErrorCode=13;
					RuntimeWithAccess255();
					return -1;
				}
				if(((BYTE)m_AuthTag)==ACK)
				{
					result=GetDataItemLength(pRecvBuffer,BufferSize,DATA_AuAc1_SID,&ItemLength);
					m_pCookie=new char[ItemLength+1];
					pTemp=m_pCookie;
					pTemp+=ItemLength;
					*pTemp='\0';
					result=GetDataItem(pRecvBuffer,BufferSize,DATA_AuAc1_SID,m_pCookie);
					if(result==0)
					{
						Error=GetLastErrorStr();
						Error="CAccess::PackageRead:"+Error;
						pDoc->SetConnectInfo(Error);
						m_ErrorCode=13;
						RuntimeWithAccess255();
						return -1;
					}
				}
				AuthorityWithAccess1();
				break;
			case PKG_AuAc255:
				result=GetDataItem(pRecvBuffer,BufferSize,DATA_AuAc255_ERRORCODE,(char*)(&m_ErrorCode));
				if(result==0)
				{
					Error=GetLastErrorStr();
					Error="CAccess::PackageRead:"+Error;
					pDoc->SetConnectInfo(Error);
					m_ErrorCode=13;
					RuntimeWithAccess255();
					return -1;
				}
				AuthorityWithAccess255();
				break;
			}
			break;
		case MOD_SESSIONMS:
			switch(Type)
			{
			case PKG_SAc1:
				result=GetDataItem(pRecvBuffer,BufferSize,DATA_SAc1_CREATESID,&m_CreateSidTag);
				if(result==0)
				{
					Error=GetLastErrorStr();
					Error="CAccess::PackageRead:"+Error;
					pDoc->SetConnectInfo(Error);
					m_ErrorCode=12;
					RuntimeWithAccess255();
					return -1;
				}
				if(((BYTE)m_CreateSidTag)==ACK)
				{
					result=GetDataItemLength(pRecvBuffer,BufferSize,DATA_SAc1_SID,&ItemLength);
					m_pSid=new char[ItemLength+1];
					pTemp=m_pSid;
					pTemp+=ItemLength;
					*pTemp='\0';
					result=GetDataItem(pRecvBuffer,BufferSize,DATA_SAc1_SID,m_pSid);
					if(result==0)
					{
						Error=GetLastErrorStr();
						Error="CAccess::PackageRead:"+Error;
						pDoc->SetConnectInfo(Error);
						m_ErrorCode=12;
						RuntimeWithAccess255();
						return -1;
					}
				}
				SessionMSWithAccess1();
				break;
			case PKG_SAc3:
				result=GetDataItem(pRecvBuffer,BufferSize,DATA_SAc3_REVOKESID,&m_RevokeSidTag);
				if(result==0)
				{
					Error=GetLastErrorStr();
					Error="CAccess::PackageRead:"+Error;
					pDoc->SetConnectInfo(Error);
					m_ErrorCode=12;
					RuntimeWithAccess255();
					return -1;
				}
				SessionMSWithAccess3();
				break;
			case PKG_SAc255:
				result=GetDataItem(pRecvBuffer,BufferSize,DATA_SAc255_ERRORCODE,(char*)(&m_ErrorCode));
				if(result==0)
				{
					Error=GetLastErrorStr();
					Error="CAccess::PackageRead:"+Error;
					pDoc->SetConnectInfo(Error);
					m_ErrorCode=12;
					RuntimeWithAccess255();
					return -1;
				}
				SessionMSWithAccess255();
				break;
			}
			break;
		}
	}
	else
	{
		pDoc->SetConnectInfo("PackageRead:Access 收到别的模块的数据包");
		return -1;
	}
	return 0;

⌨️ 快捷键说明

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