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

📄 sessionmanager.cpp

📁 本代码是基于LINUX系统下的
💻 CPP
字号:
// SessionManager.cpp: implementation of the CSessionManager class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Client.h"
#include "SessionManager.h"
#include "ClientEngine.h"
#include "AnEn.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSessionManager::CSessionManager()
{
	m_sw.InitHashTable(257);
}

CSessionManager::~CSessionManager()
{

}

void CSessionManager::AddSessionWin(CMessage *list, CArray<CUser, CUser&> &users)
{
	CSession* dialog = new CSession;
	dialog->Create(IDD_MEETING_DIALOG, NULL);
	dialog->SetWindowText("Meeting...");

	dialog->m_sessionId = list->GetSID();

	CString name;
	char* pch = list->GetList();
	for(int n=0; n<list->GetLMCount()/31; n++)
	{
		char* pp = pch + 15;
		CUser user;
		user.name = pch + 31*n;
		user.id = pch + 15 + 31*n;
		user.id = user.id.Left(15);

		dialog->m_contactors.Add(user);
		dialog->m_meeting_list.AddString(user.name);
	}
	
	int j = 0;
	for(int i=0; i<users.GetSize(); i++)
	{
		if(users[i].online == 1)
		{
			int j = dialog->m_meeting_comboBox.AddString(users[i].name);
			dialog->m_meeting_comboBox.SetItemData(j, (DWORD)&users[i]);
		}
	}

	m_sw.SetAt(dialog->getSessionID(), dialog);
	dialog->ShowWindow(SW_SHOW);
}

void CSessionManager::Update(int sid, CUser* user)
{
	CSession* dialog;
	if(m_sw.Lookup(sid, dialog))
	{
		int flag = 0;
		for(int i = 0; i < dialog->m_contactors.GetSize(); i++)
		{	
			if(dialog->m_contactors[i].getIDFormatOfInt() == user->getIDFormatOfInt()) 
			{
				flag = 1;
				break;
			}
		}

		if(flag == 0)
			dialog->m_contactors.Add(*user);
		
		dialog->m_meeting_list.ResetContent();
		for(i=0; i<dialog->m_contactors.GetSize(); i++)
			dialog->m_meeting_list.AddString(dialog->m_contactors[i].name);

		dialog->ShowWindow(SW_SHOW);
	}
	
}

void CSessionManager::updateAll()
{
	//update comboBox when a contactor go online / offline
	CClientEngine* engine = CClientEngine::getInstance();

	POSITION pos = m_sw.GetStartPosition();
	CSession* sessionDialog = NULL;
	int sid = 0;
	while(pos != NULL)
	{
		m_sw.GetNextAssoc(pos, sid, sessionDialog);
		if(sessionDialog != NULL)
		{
			sessionDialog->m_meeting_comboBox.ResetContent();

			CUser* user;
			int j = 0;
			for(int i=0; i<engine->m_contactors.GetSize(); i++)
			{
				user = &(engine->m_contactors[i]);
				if(user->online == 1)
				{
					j = sessionDialog->m_meeting_comboBox.AddString(user->name);
					sessionDialog->m_meeting_comboBox.SetItemData(j, (DWORD)user);
				}
			}
		}
	}

}

void CSessionManager::closeSession(int sid)
{
	m_sw.RemoveKey(sid);
}

void CSessionManager::removeAContactor(int &sid, CUser* user)
{
	CSession* dialog;
	if(m_sw.Lookup(sid, dialog))
	{
		for(int i=0; i<dialog->m_contactors.GetSize(); i++)
		{	
			if(dialog->m_contactors.GetAt(i).getIDFormatOfInt() == user->getIDFormatOfInt()) 
			{
				dialog->m_contactors.RemoveAt(i); 
				break;
			}
		}

		dialog->m_meeting_list.ResetContent();
		for(i=0; i<dialog->m_contactors.GetSize(); i++)
			dialog->m_meeting_list.AddString(dialog->m_contactors.GetAt(i).name);

		dialog->ShowWindow(SW_SHOW);
	}
	
}

void CSessionManager::closeAllSessions()
{
	CClientEngine* engine = CClientEngine::getInstance();

	POSITION pos = m_sw.GetStartPosition();
	CSession* sessionDialog = NULL;
	int sid = 0;
	while(pos != NULL)
	{
		m_sw.GetNextAssoc(pos, sid, sessionDialog);
		if(sessionDialog != NULL)
			engine->closeSession(sid);
	}	
}

void CSessionManager::receiveMessage(int sid, CString message)
{
	CSession* dialog;
	if(m_sw.Lookup(sid, dialog))
	{
		if(dialog != NULL)
			dialog->readMessage(message);
	}
}

⌨️ 快捷键说明

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