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