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

📄 msg.h

📁 关于ACE的书籍,对于学习ACE很有帮助,这里只有上册,下册过些时候在传.
💻 H
字号:

// Written by Oz Ben Eliezer
// o_be@hotmail.com
// September, 2000

#ifndef __BUFFER_H__		// Sentinels
#define __BUFFER_H__



#define WM_SOCKET (WM_USER + 1)
#define NAME_LEN	20
#define PASSWD_LEN	20

enum CMD_ID{CMD_LOGIN=0X10000,CMD_RENAME=0X10001,CMD_MSG_UP=0X10002,CMD_MSG_DOWN=0X10003,CMD_MSG_CHAT=0X10004,CMD_NEW=0X1005,CMD_LOGOUT=0X1006};






typedef struct _MSG_HEAD{
	CMD_ID	eCmdID;
	DWORD	dwToken;
	DWORD	dwLength;
}MSG_HEAD;

//=========================================
struct MSG_UP{
	DWORD		dwLength;
	wchar_t		*szContent;	
};
struct MSG_DOWN{
	DWORD		dwLength;
	wchar_t		*szContent;
};
//========================================

struct MSG_LOGIN{
	wchar_t		szUsername[NAME_LEN];
	wchar_t		szPassWord[PASSWD_LEN];
};
struct MSG_LOGOUT{
	wchar_t		szUsername[NAME_LEN];
};
struct MSG_NEW{
	wchar_t		szUsername[NAME_LEN];
};
struct MSG_RENAME{
	wchar_t		szUsername[NAME_LEN];
};
struct MSG_CHAT{
	wchar_t		szSender[NAME_LEN];
	DWORD		dwLength;				//szContent Len
	wchar_t		*szContent;
};


typedef struct _CMsg{
	MSG_HEAD	MsgHead;
	union{
		MSG_UP		MsgUp;
		MSG_DOWN	MsgDown;
		MSG_RENAME	MsgReName;
		MSG_LOGIN	MsgLogin;
		MSG_CHAT	MsgChat;
		MSG_NEW		MsgNew;
		MSG_LOGOUT  MsgLogout;
	};
}CMsg;

//class CMsg;


class CMsgList{
private:
	typedef struct _MSG_INFO{
		int				iMsgNum;
		CMsg			*Msg;
		int				iRenfer;
		_MSG_INFO		*Next; 
	}MSG_INFO,*LPMSG_INFO;

	LPMSG_INFO	m_Head;
	LPMSG_INFO	m_Tial;
	int			m_Clients;
	int			m_MsgNum;
public:
	CMsgList(int iClients=0){
		m_Head = NULL;
		m_Tial = NULL;
		m_Clients = iClients;
		m_MsgNum = 0;
	}

	inline void UpdateClients(bool isIncrease){
		if(isIncrease)m_Clients++;
		else m_Clients--;
	}

	void UpdateRefer(){
		LPMSG_INFO	lpMsg = m_Head;
		while(lpMsg){
			lpMsg->iRenfer++;
			lpMsg=lpMsg->Next;
		}
	}

	bool AddMsg(CMsg *ptrMsg){
		if(m_Clients < 2)return true;
		LPMSG_INFO	ptrMsgServer = new MSG_INFO;
		if(!ptrMsgServer)return false;
		ptrMsgServer->iMsgNum = m_MsgNum++;
		ptrMsgServer->iRenfer = m_Clients-1;
		ptrMsgServer->Msg = ptrMsg;
		ptrMsgServer->Next = NULL;
		if(!m_Head)m_Head = m_Tial = ptrMsgServer;
		else m_Tial->Next=ptrMsgServer;
		return true;
	}
	inline bool HasMsg(int MsgNum){
		return (MsgNum<m_MsgNum);
	}

	inline int GetMsgNum(){
		return m_Head?m_Head->iMsgNum:0;
	}
	//return a pointer to msg
	CMsg* GetMsg(int num){
		LPMSG_INFO lpMsg = m_Head;
		while(lpMsg){
			if(lpMsg->iMsgNum == num)return lpMsg->Msg;
			lpMsg = lpMsg->Next;
		}
		return NULL;
	}

	void DropMsg(LPMSG_INFO lpMsg){
		lpMsg->iRenfer--;
		if (lpMsg->iRenfer==0)
		{
			//DEBUG 
			//printf("none client need this msg --delete\n");
			m_Head=m_Head->Next;
			delete [] lpMsg->Msg->MsgChat.szContent;
			delete lpMsg;
		}
		if (!m_Head)m_Tial=m_Head;
	}
};
#endif

⌨️ 快捷键说明

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