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

📄 serverfunc.cpp

📁 类似于QQ的聊天工具,分为客户端和服务器端,有共享空间,能发布公告,可传输文件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	}
	else//共享
	{
		 sql = "select * from FileShare where IsPersonal = 0";
	}
	if(rs.Open(pCn->GetActiveConn(), (_variant_t)sql))
	{
		///////////////////////
		//有共享文件
		if(!rs.GetRs()->adoEOF)
		{
			while(!rs.GetRs()->adoEOF)
			{
				CString strFileIf[5];
				/////////////////////////////////////////////////////////////
				//取各个字段值
				for(long i = 0; i < 5; i++)
				{
					_variant_t value = rs.GetRs()->GetCollect((_variant_t)i);
					strFileIf[i] = (char*)(_bstr_t)value;
				}
				
				////////////////////////////////////////////////////////////
				//打包返回共享文件信息
				if(bStatus)
				{
					pp.order = "9014";
				}
				else
				{
					pp.order = "9009";
				}
				pp.UserId   = strFileIf[0];
				pp.UserPsw  = strFileIf[1];
				pp.UserName = strFileIf[2];
				pp.UserSex  = strFileIf[3];
				pp.UserDptm = strFileIf[4];
				pp.paramNum = 5;
				CString Buf;
				mbBag.DataPackage(Buf, &pp);
				mbBag.SetRetStatus(CString("0001"), Buf);
				////////////////////////////////////////////////////////////////
				Sleep(10);
				send((pTmp->m_CurUserInfo).m_sClientSocket, Buf.GetBuffer(0),
													Buf.GetLength() + 1, 0);
				////////////////////////
				//移到下一行
				rs.GetRs()->MoveNext();
			}
			return;
		}

		///////////////////////////////////////////////////////////////////
		//无共享文件
		else
		{
			if(bStatus)//个人
			{
				mbBag.ModifyOrderCode(CString("9014"), retBuf);
			}
			else//共享
			{
				mbBag.ModifyOrderCode(CString("9009"), retBuf);
			}
			mbBag.SetRetStatus(CString("0000"), retBuf);
						
		}

	}

	///////////////////////////////////////////////////////////////////////
	//查询数据库出错
	else
	{	
		if(bStatus)//个人
		{
			mbBag.ModifyOrderCode(CString("9014"), retBuf);
		}
		else//共享
		{
			mbBag.ModifyOrderCode(CString("9009"), retBuf);
		}
		mbBag.SetRetStatus(CString("0002"), retBuf);
	}
	
	////////////////////////////////////////////////////////////////
	send((pTmp->m_CurUserInfo).m_sClientSocket, retBuf.GetBuffer(0),
										retBuf.GetLength() + 1, 0);

	
}


/*---------------------------------------------------------------------------
 向当前登陆用户发送已登陆用户信息或向之前登陆用户发送当前登陆用户信息
 ---------------------------------------------------------------------------*/
BOOL CServerFunc::SendLoadUser(LPVOID pParam)
{
	tagTmpInfo* param = (tagTmpInfo*)pParam;

	CMsgBag bagTool;
	tagPacketParam pp;
	
	tagClientSockeInfo* pTmp;
	WaitForSingleObject(param->m_hMutex, INFINITE);
	POSITION pos = (param->m_pTmpList)->GetHeadPosition();
	for(int i = 0; i < (param->m_pTmpList)->GetCount(); i++)
	{
		pTmp = (param->m_pTmpList)->GetNext(pos);

		
		if(pTmp->m_bOnLine == true)
		{
			////////////////////////////////////////////////////////
			//向当前登陆用户发送之前登陆用户信息
			pp.order    = "0003";
			pp.UserId   = pTmp->m_strUsrId;   //用户帐号
			pp.UserPsw  = pTmp->m_strIp;      //ip
			pp.UserName = pTmp->m_strUsrName; //用户名
			pp.UserSex  = pTmp->m_strFace;	  //头像代号
			pp.UserChar = pTmp->m_strFilePort;//文件监听端口
			pp.paramNum = 5;
			
			CString strBuf;
			bagTool.DataPackage(strBuf, &pp);
			send((param->m_CurUserInfo).m_sClientSocket, 
				strBuf.GetBuffer(0), strBuf.GetLength() + 1, 0);
			Sleep(100);

			///////////////////////////////////////////////////////
			//向之前登陆用户发送当前登陆用户信息
			if(pTmp->m_sClientSocket != (param->m_CurUserInfo).m_sClientSocket)
			{
				pp.order    = "0003";
				pp.UserId   = (param->m_CurUserInfo).m_strUsrId;  //用户帐号
				pp.UserPsw  = (param->m_CurUserInfo).m_strIp;     //ip
				pp.UserName = (param->m_CurUserInfo).m_strUsrName;//用户名
				pp.UserSex  = (param->m_CurUserInfo).m_strFace;	  //头像代号
				pp.UserChar = (param->m_CurUserInfo).m_strFilePort;//文件监听端口
				pp.paramNum = 5;
				
				CString strBuf1;
				bagTool.DataPackage(strBuf1, &pp);
				send(pTmp->m_sClientSocket,
					   strBuf1.GetBuffer(0), strBuf1.GetLength() + 1, 0);
				Sleep(100);
			}
		}
	}
	ReleaseMutex(param->m_hMutex);
	return 1;
}

/*---------------------------------------------------------------------------
 产生新注册用户号码
 ---------------------------------------------------------------------------*/
CString CServerFunc::MakeNewId(CConn *cn)
{
	unsigned long lId;
	char          strId[10] = "";
	int           bFlag;

	srand(time(NULL));
	do
	{
		///////////////////////////////////
		//随机产生一个10001-999999999的数
		lId = (rand() % 999989999UL) + 10001UL;
		
		ltoa(lId, strId, 10);
		
		CString sql = "select * from UserInfo where UserId = '" + CString(strId) + "'";
		bFlag = cn->IsExistRs((_bstr_t)sql);
		
		////////////////////////////
		//可用编号
		if(bFlag == 0)
		{
			return CString(strId);
		}

		///////////////////////////
		//数据库出错
		else if(bFlag == -1)
		{
			return " ";
		}

		//////////////////////////
		//已经注册的Id
		else
		{
			;
		}
	}while(true);
}

//////////////////////////////////////////////////////////
//本人资料修改
void CServerFunc::DoModifyOwnInfo(LPVOID Param, CString buff)

{
	tagTmpInfo* pTmp = (tagTmpInfo*)Param;
	CConn* pCn       = pTmp->m_pCn;
	
	CMsgBag        mbBag;
	tagPacketParam pp;

	//修改处理
	CString strRegParam[8];
	CString strRegBuff;
	//CString UserId = MakeNewId(pCn);

	/////////////////////////////////////////////////////////////////
	//提取包中参数
	mbBag.SplitDate(buff, strRegParam);
	
	/////////////////////////////////////////////////////////////////
	//设置注册返回消息
	strRegBuff = mbBag.GetPacketHead(buff);
	mbBag.ModifyOrderCode(CString("9011"), strRegBuff);
	mbBag.ModifyPacketLen(strRegBuff);

	/////////////////////////////////////////////////////////////////

	CString RegSql = "update UserInfo set UserName = '"+ strRegParam[2] 
					+ "', UserPsw = '"+ strRegParam[1] +"', UserSex = '"
					+ strRegParam[3] +"', UserDptm = '"+ strRegParam[4] 
					+"', UserDuty = '"+ strRegParam[5] +"', UserTel = '"
					+ strRegParam[6] +"', UserEmail = '"+ strRegParam[7] 
					+"' where UserId = '"+ strRegParam[0] +"' ";

	if(pCn->ExecuteSql((_bstr_t)RegSql))
	{
		/////////////////////////////////////////////////////////////////
		//修改成功
		mbBag.SetRetStatus(CString("0001"), strRegBuff);
	}
	/////////////////////////////////////////////////////////////////
	//数据库出错
	else
	{
		mbBag.SetRetStatus(CString("0000"), strRegBuff);
	}

	/////////////////////////////////////////////////////////////////
	//服务器返回数据
	send((pTmp->m_CurUserInfo).m_sClientSocket, 
		strRegBuff.GetBuffer(0), strRegBuff.GetLength() + 1, 0);			
}

/////////////////////////////////////////////////////////////////////
//本人资料查询
void CServerFunc::DoResearchUserInfo(LPVOID Param, CString buff, bool bFalg)
{
	tagTmpInfo* pTmp = (tagTmpInfo*)Param;
	CConn* pCn       = pTmp->m_pCn;
	
	CMsgBag        mbBag;
	tagPacketParam pp;

	//保存包中个参数
	CString strParam;

	CRecs rs;
	/////////////////////////////////////////
	//提取包中参数
	mbBag.SplitDate(buff, &strParam);

	//查询数据库
	CString sql = "select * from UserInfo where UserId = '" + strParam + "' ";
	if(rs.Open(pCn->GetActiveConn(), (_variant_t)sql))
	{
		CString strFileIf[8];
		/////////////////////////////////////////////////////////////
		//取各个字段值
		for(long i = 0; i < 8; i++)
		{
			_variant_t value = rs.GetRs()->GetCollect((_variant_t)i);
			strFileIf[i] = (char*)(_bstr_t)value;
		}
		
		////////////////////////////////////////////////////////////
		//打包返回共享文件信息
		if(bFalg)//本人
		{
			pp.order = "9012";
		}
		else//好友
		{
			pp.order = "9004";
		}
		pp.SentTo    = strFileIf[0];
		pp.UserId    = strFileIf[0];
		pp.UserPsw   = strFileIf[2];
		pp.UserName  = strFileIf[1];
		pp.UserSex   = strFileIf[3];
		pp.UserDptm  = strFileIf[4];
		pp.UserDuty  = strFileIf[5];
		pp.UserTel   = strFileIf[6];
		pp.UserEmail = strFileIf[7];
		pp.paramNum  = 8;
		CString Buf;
		mbBag.DataPackage(Buf, &pp);

		mbBag.SetRetStatus(CString("0001"), Buf);
		Sleep(2);
		send((pTmp->m_CurUserInfo).m_sClientSocket,
			Buf.GetBuffer(0), Buf.GetLength() + 1, 0);
	}
	else
	{
		CString retBuf;
		if(bFalg)
		{
			mbBag.ModifyOrderCode(CString("9012"), retBuf);
		}
		else
		{
			mbBag.ModifyOrderCode(CString("9004"), retBuf);
		}

		mbBag.SetRetStatus(CString("0000"), retBuf);
		send((pTmp->m_CurUserInfo).m_sClientSocket, retBuf.GetBuffer(0),
										retBuf.GetLength() + 1, 0);
	}
}

⌨️ 快捷键说明

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