📄 msg.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 + -