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

📄 checkonline.cpp

📁 仿QQ的聊天程序vc++/mfc来学习的简易聊天室代码功能较全
💻 CPP
字号:
////////////////////////////////////////////////////////////////
//															  //	
//		给用户发在线人数的函数,同时检测用户是否仍在线		  //	
//															  //
//															  //	
////////////////////////////////////////////////////////////////


#include "stdafx.h"
#include "common.h"
#include "msg.h"
#include "Server.h"
#include "MainFrm.h"
#include "ServerView.h"


UINT CheckOnline(LPVOID param)
{
	CServerApp * pApp=(CServerApp*)AfxGetApp();				
	UserOnline * pUsers=pApp->m_pUsers;
	CDatabase * pDatabase=&pApp->m_Database;
	CServerSocket * pSocket=&pApp->m_Socket;	
	
	while(pApp->m_bServerStarted)
	{
		Sleep(TimerSpanServer);		
		for(int i=0;i<pApp->m_nTotalUserNumber&&pApp->m_bServerStarted;i++)
		{
			if(!pUsers[i].State)continue;
			
			CMsg3 msg;
			msg.index=TOTAL_ONLINE;
			msg.tarIP=pUsers[i].IP;
			msg.nPort=pUsers[i].Port;
			msg.Value=pApp->m_nNumberOnline;
			BOOL bSu=pSocket->SendData(&msg);
			if(bSu)continue;			
			
			pUsers[i].State=0;			
			::InterlockedDecrement((LPLONG)&pApp->m_nNumberOnline);			
			
			CRecordset recordset(pDatabase);
			CString mysql;
			mysql.Format("select MyId from Friends where FriendId=%d",pUsers[i].Id);
			try
			{
				recordset.Open(AFX_DB_USE_DEFAULT_TYPE,mysql);
			}
			catch(CDBException e)
			{
				AfxMessageBox(e.m_strError);
				break;
			}
			CDBVariant value;
			CArray<DWORD,DWORD>pFriendId;
			while(!recordset.IsEOF())
			{
				recordset.GetFieldValue(short(0),value);
				pFriendId.Add(value.m_lVal);
				recordset.MoveNext();
			}
			recordset.Close();				
			
			// 给在线的好友发OFFLINE消息
			CData msg1;
			msg1.index=OFFLINE;
			msg1.MyId=pUsers[i].Id;
			for(int j=0;j<pFriendId.GetSize()&&pApp->m_bServerStarted;j++)
			{
				int pi=pFriendId.GetAt(j)-UserIdRadix;						
				if(pUsers[pi-1].State&&pApp->m_bServerStarted)
				{
					msg.tarIP=pUsers[pi-1].IP;
					msg.nPort=pUsers[pi-1].Port;
					pSocket->SendData(&msg1);					
				}
			}
		}
	}
	
	return 0;
}

⌨️ 快捷键说明

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