資源簡介
1、 提供多人連接到服務器同時聊天
2、 用戶名可重復
3、 用戶之間可以私聊
4、 用戶進入和離開聊天室時,其他用戶得到通知

代碼片段和文件信息
//?ChatServer1.cpp:?implementation?of?the?CChatServer?class.
//?Download?by?http://www.NewXing.com
//////////////////////////////////////////////////////////////////////
#include?“stdafx.h“
#include?“ChatServer.h“
#ifdef?_DEBUG
#undef?THIS_FILE
static?char?THIS_FILE[]=__FILE__;
#define?new?DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
//?Construction/Destruction
//////////////////////////////////////////////////////////////////////
CChatServer::CChatServer()
{
m_cmd.SetType(this);
m_cmd.SetLoginFunc(LoginFunc);
m_cmd.SetUserMessageFunc(UserMessageFunc);
InitializeCriticalSection(&m_cs);
}
CChatServer::~CChatServer()
{
DeleteCriticalSection(&m_cs);
}
BOOL?CChatServer::ClientExit(LPCLIENTCONTEXT?lpContext)
{
CoInitialize(NULL);?
LPUSERINFO?lpUser;
if(!m_mapUsers.Lookup((LONG)lpContext?lpUser))
{
//找不到該用戶說明已經用戶已經退出了
CoUninitialize();?
return?TRUE;
}
EnterCriticalSection(&m_cs);
m_mapUsers.RemoveKey((LONG)lpContext);
LeaveCriticalSection(&m_cs);
//發送退出的用戶名稱給其他用戶
CString?strCmd?=?m_cmd.CreateUserLogout(*lpUser);
printf(“%s?LEAVE\n“?lpUser->m_name);
delete?lpUser;
POSITION?pos?=?m_mapUsers.GetStartPosition();
for(;pos!=NULL;)
{
LPUSERINFO?lpUser;
LONG??pContext;
m_mapUsers.GetNextAssoc(pos??pContext?lpUser);
Send((LPCLIENTCONTEXT)pContext?strCmd);
}
CoUninitialize();?
return?FALSE;
}
void?CChatServer::ProcessReceiveData(LPCLIENTCONTEXT?lpContext?CBuffer?&buffer)
{
CoInitialize(NULL);?
try
{
//循環取得有效指令
CString?strxml;
while(m_cmd.HasNetPacket(buffer?strxml))
{
if(!m_cmd.DoProcessNetPacket((LONG)lpContext?strxml))
{
printf(“Error?xml?format:?%s\n“?(LPCSTR)strxml);
}
}
}
catch(_com_error?&e)
{
printf(“%s“?(char?*)e.Description());
}
CoUninitialize();?
}
void?CChatServer::LoginFunc(USERINFO?&user)
{
//用戶登陸
//將用戶信息發送給用戶以及將服務器上用戶列表發送給用戶
sprintf(user.m_ip?((LPCLIENTCONTEXT)(user.m_id))->m_ip);
user.m_nPort?=?((LPCLIENTCONTEXT)(user.m_id))->m_nPort;
CString?strCmd?=?m_cmd.CreateLoginSuccess(user?&m_mapUsers);
Send((LPCLIENTCONTEXT)user.m_id?strCmd);
//將新用戶發送所有他用戶
strCmd?=?m_cmd.CreateNewUser(user);
POSITION?pos?=?m_mapUsers.GetStartPosition();
for(;pos!=NULL;)
{
LPUSERINFO?lpUser;
LONG??lpContext;
m_mapUsers.GetNextAssoc(pos??lpContext?lpUser);
if(?user.m_id?!=?(DWORD)lpContext)
{
Send((LPCLIENTCONTEXT)lpContext?strCmd);
}
}
//添加到列表
EnterCriticalSection(&m_cs);
m_mapUsers[user.m_id]?=?&user;
LeaveCriticalSection(&m_cs);
}
//發送某用戶的發言其他用戶:區別私聊
void?CChatServer::UserMessageFunc(USERINFO?&userSrcUSERINFO?&userDestCString?strSpeak)
{
if(userDest.m_id?==?0)
{
CString?strCmd?=?m_cmd.CreateUserMessage(userSrc?userDest?strSpeak);
//發送給所有用戶
POSITION?pos?=?m_mapUsers.GetStartPosition();
for(;pos!=NULL;)
{
LPUSERINFO?lpU
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????.......??????1633??2004-02-14?16:13??www.NewXing.com\ChatServer\ReadMe.txt
????.......??????3597??2004-02-16?14:38??www.NewXing.com\Chatter\ReadMe.txt
????.......?????34816??2009-07-23?13:58??www.NewXing.com\程序文檔.doc
?????文件???????1234??2013-12-02?04:34??www.NewXing.com\Include\Buffer.h
?????文件???????1058??2013-12-02?04:34??www.NewXing.com\ChatServer\ChatServer.h
?????文件???????1594??2013-12-02?04:34??www.NewXing.com\Chatter\Chatter.h
?????文件???????2491??2013-12-02?04:34??www.NewXing.com\Chatter\ChatterDlg.h
?????文件???????2476??2013-12-02?04:34??www.NewXing.com\Chatter\ChatterMgr.h
?????文件???????5200??2013-12-02?04:34??www.NewXing.com\Include\ClientCommand.h
?????文件???????1358??2013-12-02?04:34??www.NewXing.com\Chatter\ClientSocket.h
?????文件???????1359??2013-12-02?04:34??www.NewXing.com\Chatter\ConnectDlg.h
?????文件????????625??2013-12-02?04:34??www.NewXing.com\Chatter\FileTransfer.h
?????文件???????3546??2013-12-02?04:34??www.NewXing.com\ChatServer\IOCPServer.h
?????文件???????1254??2013-12-02?04:34??www.NewXing.com\Chatter\ListCtrlEx.h
?????文件???????1245??2013-12-02?04:34??www.NewXing.com\Chatter\LoginDlg.h
?????文件????????489??2013-12-02?04:34??www.NewXing.com\ChatServer\Resource.h
?????文件???????1549??2013-12-02?04:34??www.NewXing.com\Chatter\Resource.h
?????文件???????4979??2013-12-02?04:34??www.NewXing.com\Include\ServerCommand.h
?????文件???????1140??2013-12-02?04:34??www.NewXing.com\Chatter\StdAfx.h
?????文件???????1144??2013-12-02?04:34??www.NewXing.com\ChatServer\StdAfx.h
?????文件???????1338??2013-12-02?04:34??www.NewXing.com\Chatter\TransferProgress.h
?????文件????????801??2013-12-02?04:34??www.NewXing.com\Include\User.h
?????文件????????723??2013-12-02?04:34??www.NewXing.com\Chatter\Waiting.h
?????文件???????4775??2013-12-02?04:34??www.NewXing.com\Include\xm
?????文件???????5235??2013-12-02?04:34??www.NewXing.com\Include\Buffer.cpp
?????文件???????3589??2013-12-02?04:34??www.NewXing.com\ChatServer\ChatServer.cpp
?????文件???????3792??2013-12-02?04:34??www.NewXing.com\Chatter\Chatter.cpp
?????文件???????9493??2013-12-02?04:34??www.NewXing.com\Chatter\ChatterDlg.cpp
?????文件???????7225??2013-12-02?04:34??www.NewXing.com\Chatter\ChatterMgr.cpp
?????文件???????1556??2013-12-02?04:34??www.NewXing.com\Chatter\ClientSocket.cpp
............此處省略29個文件信息
- 上一篇:操作系統進程調度模擬算法
- 下一篇:一元多項式的運算加減乘終極版
評論
共有 條評論