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

📄 caccess.cpp

📁 实现了拖盘
💻 CPP
📖 第 1 页 / 共 3 页
字号:
}

void CALLBACK CAccess::TimerProc(HWND hwnd, UINT uMsg, UINT uIDEvent,\
                DWORD dwTime)
{
	CAccess*p=(CAccess*)uIDEvent;
	p->DeleteClientPointer();
}

//客户端接收到返回包后调用的回调函数
void CAccess::ClientProcessPendingRead(CObject* pCObject,char*pBuffer,\
							  int BufferSize)
{
	CAccess* pCAccess=(CAccess*)pCObject;
	pCAccess->PackageRead(pBuffer,BufferSize);
	/*    pCAccess->StopTimer();
	CSrvSocket * pSrvSocket=pCAccess->GetSrvP ();
	CClientSocket* pCCSocket=pCAccess->GetClientP();
	int r=pSrvSocket->SendData(pBuffer,BufferSize);
    pCAccess->FreeClientP();
	
	CString and="与";
	CString disconnect="断开连接";
	
	CString add;
	add="192.168.2.123:11";

	add=and+add;
	add+=disconnect;
	
	pDoc->SetLogInfo(add);
	ActiveConnect--;
	ClientConnect--;
	pMainFrame->DisplayConInfo(CAccess::ActiveConnect,CAccess::ClientConnect,CAccess::ServerConnect);
*/
}

//服务器收到数据包后调用的回调函数
void CAccess::SrvProcessPendingRead(CSrvSocket*pCSrvSocket,\
							char* pBuffer,int BufferSize)
{
/*	int length=0;
	char p[1024];
	CString Error;
	char* cookie="1234";
	char* role="yuan";
	char* url="http";
	if(!PackageMake(p,1024,&length,MOD_RUNTIME,MOD_ACCESS,PKG_RAc4,cookie,role,url,""))
		int m=1;*/
	//用指针pSrvSocket给CAccess对象的成员变量赋值
	CAccess * pCAccess;
	if((pCSrvSocket->GetSrvPCObject())==NULL)
	{
		pCAccess=new CAccess;
		pCAccess->SrvPInitial(pCSrvSocket);
		pCSrvSocket->SrvInitial(pCAccess);
	//将连接信息写入文档对象
		CString and="Access与";
		CString connect="建立连接";
		UINT port;
		CString sPort;
		CString add;
		pCSrvSocket->GetPeerAdd(add,port);
		sPort.Format("%d",port);
		add+=':';	
		add+=sPort;
		pCAccess->SetConnectAdd(add);
		add=and+add;
		add+=connect;
		pDoc->SetConnectInfo(add);
	//将连接信息在状态条显示出来
		ActiveConnect++;
		ServerConnect++;
		pMainFrame->DisplayConInfo(CAccess::ActiveConnect,CAccess::ClientConnect,CAccess::ServerConnect);
	//调用CAccess::PackageRead()进行数据处理
		pCAccess->PackageRead(pBuffer,BufferSize);
	}
	else 
	{
		pCAccess=(CAccess*)(pCSrvSocket->GetSrvPCObject());
		pCAccess->PackageRead(pBuffer,BufferSize);
	}

/*	CClientSocket* pCClientSocket;
	pCClientSocket=new CClientSocket(pCAccess,CAccess::ClientProcessPendingRead);
	int r=pCClientSocket->BuildConnect(11,"192.168.2.123");
    if(r!=0)
	{
		::MessageBox(0,"建立连接失败","发送连接请求",MB_OK);
		delete pCClientSocket;
		return;
	}
	pCAccess->ClientPInitial(pCClientSocket);
	int c=pCClientSocket->SendData(pBuffer,BufferSize);
    pCAccess->BuildTimer();
	add.Empty();
	sPort.Empty();
    add="192.168.2.123";
    port=11;
	sPort.Format("%d",port);
	add+=':';	
	add+=sPort;
	add=and+add;
	add+=connect;
	pDoc->SetLogInfo(add);
	ActiveConnect++;
	ClientConnect++;
	pMainFrame->DisplayConInfo(CAccess::ActiveConnect,CAccess::ClientConnect,CAccess::ServerConnect);
	pCClientSocket=NULL;*/
}
//服务端收到对方关闭信息时调用的回调函数,进行CAccess对象的释放
void CAccess::SrvCloseSocket(CObject* pCObject)
{
	if(pCObject!=NULL)
	{
		CAccess* pCAccess=(CAccess*)pCObject;
	//向文档对象写入关闭信息
		CString and="Access与";
		CString connect="断开连接";
		CString add;
		add=pCAccess->GetConnectAdd();
		add=and+add;
		add+=connect;
		pDoc->SetConnectInfo(add);
	//将关闭连接信息在状态条中显示出来
		ActiveConnect--;
		ServerConnect--;
		pMainFrame->DisplayConInfo(CAccess::ActiveConnect,CAccess::ClientConnect,CAccess::ServerConnect);
	//释放CAccess对象
		pCAccess->Destroy();
		delete pCAccess;
	}
}
//初始化成员变量pDoc和pMainFrame
void CAccess::InitStatusDoc()
{
	//初始化静态成员变量pStatus
	(CAccess::pMainFrame)=(CMainFrame*)AfxGetApp()->m_pMainWnd;
	//初始化静态成员变量pDoc
	CSingleDocTemplate* pDocTemp;
	POSITION p=AfxGetApp()\
		->GetFirstDocTemplatePosition();
    pDocTemp=(CSingleDocTemplate*)(AfxGetApp()\
		->GetNextDocTemplate(p));
	p=pDocTemp->GetFirstDocPosition();
	(CAccess::pDoc)=(CAccessDoc*)pDocTemp->GetNextDoc(p);
	pDoc->SetTitle(ACCESSTITLE);
}
/////////////////////////////////////////////////////////////////////////////
int CAccess::RuntimeWithAccess01()
{
	char tag[2];        
    tag[0]=LogType;           //系统支持的认证方式
	tag[1]='\0';
	char pBuffer[6];
	pBuffer[5]='\0';
	CString Error;
	int PackLength;
	bool r=PackageMake(pBuffer,5,&PackLength,MOD_ACCESS,MOD_RUNTIME,1,tag,"");
    if(r==0)
	{
		Error=GetLastErrorStr();
		Error="CAccess::RuntimeWithAccess01:"+Error;
		pDoc->SetConnectInfo(Error);
		return -1;
	}
	int l=m_pSrvSocket->SendData(pBuffer,PackLength);
	if(l!=PackLength)
	{
		LPVOID lpMsgBuf; //Windows will allocate 
		::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,0, GetLastError(),
                      MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //默认语言
                          (LPTSTR)&lpMsgBuf, 0, NULL );
		//显示
		Error=(LPCTSTR)lpMsgBuf;
		Error="CAccess::RuntimeWithAccess01:"+Error;
		pDoc->SetConnectInfo(Error); 
		//释放内存
		::LocalFree( lpMsgBuf );
		return -1;
	}
	return 0;
}

int CAccess::RuntimeWithAccess2()
{
	int NameLength;
	int PassLength;
	CString UserName;
	CString PassWord;
	int result;
	int count=0;
	int i;
	MY_DB_MESSAGE AuthTag;
	char* pl;
	char* pg;
	char* ErrorStr=NULL;
	CString Error;
	switch(m_LogTag)
	{
	case NAMEPASS:                     //用户的登陆方式为“用户名/口令”
		pl=(char*)(&m_LogInfoLength);
		//取出“用户名”长度
		NameLength=(int)(*pl);
		pl++;
		//取出“密码”长度
		PassLength=(int)(*pl);
		m_pUserName=new char[NameLength+1];
		pl=m_pUserName;
		pl+=NameLength;
		*pl='\0';
		m_pPassWord=new char[PassLength+1];
		pl=m_pPassWord;
		pl+=PassLength;
		*pl='\0';
		pl=m_pUserName;
		pg=m_pLogInfo;
		//取出“用户名”
		for(i=0;i<NameLength;i++)
		{
			*pl=*pg;
			pl++;
			pg++;
		}
		//取出“密码”
		pl=m_pPassWord;
		for(i=0;i<PassLength;i++)
		{
			*pl=*pg;
			pl++;
			pg++;
		}
		//验证用户名和密码
		UserName=m_pUserName;
		PassWord=m_pPassWord;
		if(!(pDatabase->IfConnected()))
		{
			int c=pDatabase->ConnectDB(DbSource,DbUser,DbPass);
			if(c!=0)
			{
				((CMainFrame*)AfxGetMainWnd())->OnFileShutlisten();
				return -1;
			}
		}
		result=pDatabase->IfHavingAuthority(UserName,PassWord,&AuthTag);
		if(result!=0)
		{
			m_ErrorCode=5;
			RuntimeWithAccess255();
			return 0;
		}
		if((AuthTag.boolMessage)==0)
		{
			m_AuthTag=NAK;
			RuntimeWithAccess3();
		}
		if((AuthTag.boolMessage)==1)
		{
			m_AuthTag=ACK;
			m_uid=AuthTag.iMessage;
			if(m_uid<1||m_uid>9999)
			{
				pDoc->SetConnectInfo("Access读数据库时UID值越界");
				return -1;
			}
			SessionMSWithAccess0();
		}
		else
		{
			pDoc->SetConnectInfo("Access读数据库时,结构体MY_DB_MESSAGE中iMessage值错误");
			
			return -1;
		}
		delete m_pUserName;
		m_pUserName=NULL;
		delete m_pPassWord;
		m_pPassWord=NULL;
		delete m_pLogInfo;
		m_pLogInfo=NULL;
		break;
	case CERT:              //用户的登陆方式为证书方式
		AuthorityWithAccess0();
		break;
	}
	return 0;
}

int CAccess::RuntimeWithAccess3()
{
	CArray<MY_ROLE_DATA,MY_ROLE_DATA>* pRoleList;
	MY_ROLE_DATA role;
	char**  rolelist;	

	int r=0;
	char tag[2];
	tag[0]=m_AuthTag;
	tag[1]='\0';
	int length=0;
	CString Error;
	if(m_AuthTag==NAK)
	{
		char pBuffer[6];
		pBuffer[5]='\0';
		if(!PackageMake(pBuffer,5,&length,MOD_ACCESS,MOD_RUNTIME,PKG_AcR3,tag,""))
		{
			Error=GetLastErrorStr();
			Error="CAccess::RuntimeWithAccess3:"+Error;
			pDoc->SetConnectInfo(Error);
			return -1;
		}
		r=m_pSrvSocket->SendData(pBuffer,length);
		if(r!=length)
		{
			LPVOID lpMsgBuf; //Windows will allocate 
			::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,0, GetLastError(),
						  MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //默认语言
							  (LPTSTR)&lpMsgBuf, 0, NULL );
			//显示
			Error=(LPTSTR)lpMsgBuf;
			Error="CAccess::RuntimeWithAccess3:"+Error;
			pDoc->SetConnectInfo(Error);
			//释放内存
			::LocalFree( lpMsgBuf );
			FreeClientP();
			return -1;
		}
	}
	if(m_AuthTag==ACK)      //身份信息正确
	{
		if(m_CreateSidTag==ACK)  //会话对象创建成功
		{
			pRoleList=new CArray<MY_ROLE_DATA,MY_ROLE_DATA>;
			if(!(pDatabase->IfConnected()))
			{
				int c=pDatabase->ConnectDB(DbSource,DbUser,DbPass);
				if(c!=0)
				{
					((CMainFrame*)AfxGetMainWnd())->OnFileShutlisten();
					return -1;
				}
			}
			int r=pDatabase->GetRolesListFrmUID(m_uid,pRoleList);
			if(r!=0)
			{
				m_ErrorCode=5;
				RuntimeWithAccess255();
				return 0;
			}
			BYTE rolenum=pRoleList->GetSize();
			char RoleNum[2];
			RoleNum[0]=rolenum;
			RoleNum[1]='\0';
			rolelist=new LPTSTR[rolenum+1];
			char** p=rolelist;
			for(int i=0;i<rolenum;i++)
			{
				role=pRoleList->GetAt(i);
				*p=(char*)(LPCTSTR)(role.Role);
				p++;
			}
			*p=NULL;
			rolelist[rolenum]=NULL;
			int length;
			char pBuffer[1024];
			CString Error;
			if(!PackageMake(pBuffer,1024,&length,MOD_ACCESS,MOD_RUNTIME,PKG_AcR3,tag,m_pSid,RoleNum,rolelist,""))
			{
				Error=GetLastErrorStr();
				Error="CAccess::RuntimeWithAccess3:"+Error;
				pDoc->SetConnectInfo(Error);
				return -1;
			}
			pBuffer[length]='\0';
			r=m_pSrvSocket->SendData(pBuffer,length);
			if(r!=length)
			{
				LPVOID lpMsgBuf; //Windows will allocate 
				::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,0, GetLastError(),
							  MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //默认语言
								  (LPTSTR)&lpMsgBuf, 0, NULL );
				//显示
				Error=(LPTSTR)lpMsgBuf;
				Error="CAccess::RuntimeWithAccess3:"+Error;
				pDoc->SetConnectInfo(Error);
				//释放内存
				::LocalFree( lpMsgBuf );
				FreeClientP();
				return -1;
			}
			delete rolelist;
			delete pRoleList;
		}
		if(m_CreateSidTag==NAK)
		{
			m_ErrorCode=8;
			RuntimeWithAccess255();
			return 0;
		}
	}
	return 0;

}

int CAccess::RuntimeWithAccess4()
{
	CString Role;
	Role=m_pRole;
	//对称解密并进行base64解码
	char SDBIkey[17]="!@#$%^&*()_+|<>?";
	DWORD OutLength=0;
	DWORD BaseLength=0;
	BYTE out[30];
	char OutBase[30];
	for(int i=0;i<30;i++)
		OutBase[i]=0;
	Base64Decode(m_pCookie, out, &OutLength);
	SDBIDec(out,OutLength,(BYTE*)OutBase,&BaseLength,(BYTE*)SDBIkey);
	delete m_pCookie;
	m_pCookie=new char[BaseLength+1];
	strcpy(m_pCookie,OutBase);
	//解密结束
	MY_DB_MESSAGE uidstruct;
	//从sid得到uid
	if(!(pDatabase->IfConnected()))
	{
		int c=pDatabase->ConnectDB(DbSource,DbUser,DbPass);
		if(c!=0)
		{
			((CMainFrame*)AfxGetMainWnd())->OnFileShutlisten();
			return -1;
		}
	}
	int r=pDatabase->GetUIDFromSID(m_pCookie,&uidstruct);
	if(r!=RETURNRIGHTCODE)
	{
		m_ErrorCode=5;
		RuntimeWithAccess255();
		return -1;
	}
	if(!(pDatabase->IfConnected()))
	{
		int c=pDatabase->ConnectDB(DbSource,DbUser,DbPass);
		if(c!=0)
		{
			((CMainFrame*)AfxGetMainWnd())->OnFileShutlisten();
			return -1;
		}
	}
	r=pDatabase->AddCurRole(Role,uidstruct.iMessage);
	if(r!=0)
	{
		m_ErrorCode=5;
		RuntimeWithAccess255();
		return -1;
	}
	EntitlementWithAccess0();
	return 0;
}

int CAccess::RuntimeWithAccess5()
{
	char pBuffer[1024];
	int length;
	CString Error;
	char tag[2];
	tag[0]=m_EntitleTag;
	tag[1]='\0';
	if(!PackageMake(pBuffer,1024,&length,MOD_ACCESS,MOD_RUNTIME,PKG_AcR5,tag,m_pUrl,m_pMenu,""))
	{
		Error=GetLastErrorStr();
		Error="CAccess::RuntimeWithAccess5:"+Error;
		pDoc->SetConnectInfo(Error);
		return -1;
	}
	pBuffer[length]='\0';
	int r=m_pSrvSocket->SendData(pBuffer,length);
	if(r!=length)
	{
		LPVOID lpMsgBuf; //Windows will allocate 
		::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,0, GetLastError(),
					  MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //默认语言
						  (LPTSTR)&lpMsgBuf, 0, NULL );
		//显示
		Error=(LPTSTR)lpMsgBuf;
		Error="CAccess::RuntimeWithAccess5:"+Error;
		pDoc->SetConnectInfo(Error);
		//释放内存
		::LocalFree( lpMsgBuf );
		return -1;
	}
	return 0;
}

int CAccess::RuntimeWithAccess6()
{
	//对称解密并进行base64解码
	char SDBIkey[17]="!@#$%^&*()_+|<>?";
	DWORD OutLength=0;
	DWORD BaseLength=0;
	BYTE out[30];
	char OutBase[30];
	for(int i=0;i<30;i++)
		OutBase[i]=0;
	Base64Decode(m_pCookie, out, &OutLength);
	SDBIDec(out,OutLength,(BYTE*)OutBase,&BaseLength,(BYTE*)SDBIkey);
	delete m_pCookie;
	m_pCookie=new char[BaseLength+1];
	strcpy(m_pCookie,OutBase);
	//解密结束
	SessionMSWithAccess2();
	return 0;
}

int CAccess::RuntimeWithAccess7()
{
	char pBuffer[6];
	CString Error;
	int length;
	pBuffer[5]='\0';
	char tag[2];
	tag[0]=m_RevokeSidTag;
	tag[1]='\0';
	if(!PackageMake(pBuffer,5,&length,MOD_ACCESS,MOD_RUNTIME,PKG_AcR7,tag,""))
	{
		Error=GetLastErrorStr();
		Error="CAccess::RuntimeWithAccess7:"+Error;
		pDoc->SetConnectInfo(Error);
		return -1;
	}
	int r=m_pSrvSocket->SendData(pBuffer,length);
	if(r!=length)
	{
		LPVOID lpMsgBuf; //Windows will allocate 
		::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,0, GetLastError(),
					  MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //默认语言
						  (LPTSTR)&lpMsgBuf, 0, NULL );
		//显示
		Error=(LPTSTR)lpMsgBuf;
		Error="CAccess::RuntimeWithAccess7:"+Error;
		pDoc->SetConnectInfo(Error);
		//释放内存
		::LocalFree( lpMsgBuf );
		return -1;
	}
	return 0;
}

int CAccess::RuntimeWithAccess255()
{
	char ErrorStr[2];
	ErrorStr[0]=m_ErrorCode;
	ErrorStr[1]='\0';
	char pBuffer[6];
	CString Error;
	pBuffer[5]='\0';

⌨️ 快捷键说明

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