www.pudn.com > MultiLineChatRoomVCSrc.zip > ParseMessage.cpp
#include "Stdafx.h"
#include "ParseMessage.h"
#include "ClientSocket.h"
#include "CChatServer.h"
extern CCChatServerApp theApp;
CParseMessage::~CParseMessage()
{
}
CParseMessage::CParseMessage(const CWnd * pWnd,const Message & Value)
{
pView = const_cast < CWnd *>(pWnd);
Msg = Value;
}
BOOL CParseMessage::SWitchMessage()
{
ASSERT(pView != NULL);
ASSERT_VALID(pView);
switch(Msg.iType)
{
case USERLOG:
switch(Msg.iSubType)
{
case USERLOGIN:
pView ->PostMessage(WM_NEWCLIENTCOMEIN,WPARAM(&Msg),0);
break;
default:
break;
}
break;
case USERSESSION:
switch(Msg.iSubType)
{
default:
break;
case CHANGEROOM:
pView ->PostMessage(WM_CHANGEROOM ,WPARAM(&Msg),0);
break;
case SAYINPRIVATE:
pView->PostMessage(WM_SAYINPRIVATE,WPARAM(&Msg),0);
break;
case FILETRANCE:
pView ->PostMessage(WM_FILETRANCE,WPARAM(&Msg),0);
break;
case ACCEPTFILE:
pView ->PostMessage(WM_FILETRANCE,WPARAM(&Msg),0);
break;
case DECLINEFILE:
pView ->PostMessage(WM_FILETRANCE,WPARAM(&Msg),0);
break;
case USERQUIT:
{
g_cs.Lock();
CString strUserName = Msg.strName;
CString strRoomName = Msg.strRoom;
CPtrList * m_pClientList = theApp.m_pClientSocketList;
int iCount = m_pClientList->GetCount();
POSITION pos = m_pClientList ->GetHeadPosition();
POSITION tempos = pos;
if(pos)
{
for(int i = 0; i < m_pClientList ->GetCount(); i++)
{
tempos = pos;
CClientSocket *m_pClientSocket = static_cast < CClientSocket *>(m_pClientList->GetNext(pos));
if(m_pClientSocket ->GetRoomName() == strRoomName && m_pClientSocket ->GetUserName() == strUserName)
{
m_pClientSocket ->ShutDown();
m_pClientSocket ->Close();
delete m_pClientSocket;
m_pClientList->RemoveAt(tempos);
break;
}
}
g_cs.Unlock();
}
pView ->PostMessage(WM_USERLOGOUT,WPARAM(&Msg),0);
}
break;
}
break;
case FILETIME:
pView ->PostMessage(WM_FILETRANCE,WPARAM(&Msg),0);
break;
default:
break;
}
return TRUE;
}
/* }
else if(Msg.iType == USERSESSION && Msg.iSubType == CHANGEROOM)
{
pView ->PostMessage(WM_CHANGEROOM ,WPARAM(&Msg),0);
}
else if(Msg.iType == USERSESSION && Msg.iSubType == SAYINPRIVATE)
{
pView->PostMessage(WM_SAYINPRIVATE,WPARAM(&Msg),0);
}
else if(Msg.iType == USERSESSION && Msg.iSubType == USERQUIT)
{
g_cs.Lock();
CString strUserName = Msg.strName;
CString strRoomName = Msg.strRoom;
CPtrList * m_pClientList = theApp.m_pClientSocketList;
int iCount = m_pClientList->GetCount();
POSITION pos = m_pClientList ->GetHeadPosition();
POSITION tempos = pos;
if(pos)
{
for(int i = 0; i < m_pClientList ->GetCount(); i++)
{
tempos = pos;
CClientSocket *m_pClientSocket = static_cast < CClientSocket *>(m_pClientList->GetNext(pos));
if(m_pClientSocket ->GetRoomName() == strRoomName && m_pClientSocket ->GetUserName() == strUserName)
{
m_pClientSocket ->ShutDown();
m_pClientSocket ->Close();
delete m_pClientSocket;
m_pClientList->RemoveAt(tempos);
break;
}
}
g_cs.Unlock();
}
pView ->PostMessage(WM_USERLOGOUT,WPARAM(&Msg),0);
}
return TRUE;
}
*/