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

📄 msgmgr.cpp

📁 mysee网络直播源代码Mysee Lite是Mysee独立研发的网络视频流媒体播放系统。在应有了P2P技术和一系列先进流媒体技术之后
💻 CPP
字号:
/*
 *  Openmysee
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */
#include "stdafx.h"
#include "MsgMgr.h"

CMsgMgr::CMsgMgr(void)
: m_uMsgCounter(0)
{
}

CMsgMgr::~CMsgMgr(void)
{
}

MSGID CMsgMgr::CreateMsgID(UINT MsgFlags)
{
	CAutoLock Lock(&m_CritSec);
    m_uMsgCounter++;
	//MSGDATA *pMSGDATA = new MSGDATA;
	//pMSGDATA->MsgType = MsgType;
	//pMSGDATA->strMsg = _TEXT("");
	MSGDATA msg;
	msg.MsgFlags = MsgFlags;
	msg.strMsg = _TEXT("");
	msg.b_visited = FALSE;
	msg.m_updated_tickcount = 0;
	m_MsgMap.insert(MsgMap::value_type(m_uMsgCounter, msg));
	return m_uMsgCounter;
}

void CMsgMgr::DeleteMsgID(MSGID MsgID)
{
	CAutoLock Lock(&m_CritSec);
	m_MsgMap.erase(MsgID);
}

void CMsgMgr::UpdateMessage(MSGID MsgID, const CString &strNewMsg, UINT msgFlags, MESSAGELEVEL msglv)
{
	CAutoLock Lock(&m_CritSec);
	MsgMap::iterator itr = m_MsgMap.find(MsgID);
	if(itr != m_MsgMap.end())
	{
		//不能更新为较低等级的消息
		if(!IsMsgExpired(itr->second) && itr->second.m_msgLevel > msglv)
			return;

		itr->second.strMsg = strNewMsg;
		if(msgFlags != NOUPDATE)
		{
			itr->second.MsgFlags = msgFlags;
			itr->second.m_msgLevel = msglv;
		}
		itr->second.m_updated_tickcount = GetTickCount();
	}
}

void CMsgMgr::ClearMessage(MSGID MsgID)
{
	CAutoLock Lock(&m_CritSec);
	MsgMap::iterator itr = m_MsgMap.find(MsgID);
	if(itr != m_MsgMap.end())
	{
		itr->second.strMsg.Empty();
	}
}

const CString CMsgMgr::PeerMessage(MSGID MsgID)
{
	CString tmpstr;
	if(DispatchMessage(MsgID, tmpstr, GMF_NOVISITEDFLAG | GMF_NOCLEANFORCEFLAG))
		return tmpstr;
	else
		return _T("");
}

BOOL  CMsgMgr::IsMsgExpired(MSGDATA& msg)
{
	if((msg.MsgFlags & TIMELESS) != TIMELESS)
	{
		int lifetime = msg.MsgFlags & (TIMELESS - 1);
		if(msg.m_updated_tickcount + lifetime*1000 < GetTickCount())
			return TRUE;
	}
	return FALSE;
}

BOOL  CMsgMgr::DispatchMessage(const MSGID MsgID, CString& strMsg, 
		const UINT getflags, UINT* p_bMsgFlags)
{
	CAutoLock Lock(&m_CritSec);
	MsgMap::iterator itr = m_MsgMap.find(MsgID);
	if(itr != m_MsgMap.end())
	{
		if(IsMsgExpired(itr->second))
		{
			return FALSE;
		}

		if((getflags & GMF_NOOLDMSG) && (itr->second.b_visited == TRUE))
			return FALSE;

		//获得消息信息,包括消息的文本串和消息类型
		strMsg = itr->second.strMsg;
		if(p_bMsgFlags != NULL)
			*p_bMsgFlags = itr->second.MsgFlags;

		if(!(getflags & GMF_NOVISITEDFLAG))
			itr->second.b_visited = TRUE;
		if(!(getflags & GMF_NOCLEANFORCEFLAG))
			itr->second.MsgFlags &= (~(FORCESHOW | FORCEHIDE));

		return TRUE;
	}
	return FALSE;
}

UINT CMsgMgr::GetMsgNum()
{
	CAutoLock Lock(&m_CritSec);
	UINT uMsgNum = (UINT) m_MsgMap.size();
	return uMsgNum;
}

void CMsgMgr::GetMsgIDArray(MSGID *pMsgIDArray)
{
	CAutoLock Lock(&m_CritSec);
	int i = 0;
	MsgMap::iterator itr = NULL;

	for(itr=m_MsgMap.begin(); itr!=m_MsgMap.end(); itr++)
	{
		*(pMsgIDArray+i) = itr->first;
		i++;
	}
}

⌨️ 快捷键说明

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