www.pudn.com > mischat.rar > mischatDoc.h
// mischatDoc.h : interface of the CmischatDoc class
//
#pragma once
#include "NetClient.h"
#include "IocpModeSvr.h"
class CmischatView;
class CDraw;
class CNDKMessage;
class CmischatDoc : public CDocument
{
friend class COnlineIPBar;
protected: // create from serialization only
CmischatDoc();
DECLARE_DYNCREATE(CmischatDoc)
// Attributes
public:
CString strImageFilter;
//指针 文本工具 清除工具 铅笔工具 矩形选择 画笔工具 喷枪工具 填充工具 线条工具 空心矩形
//0 1 2 3 4 5 6 7 8 9
//实心矩形 矩形工具 空心圆角矩形 实心圆角矩形 圆角矩形工具 空心椭圆 实心椭圆 椭圆工具
//10 11 12 13 14 15 16 17
int flag;//进行何种绘图模式
int widthPen;//笔之粗细
COLORREF corPen,corBrush,corText;//笔色、画刷、文本前景色
LOGFONT lf;//文本字体
CString m_strIP,strName;//服务器IP、客户机的呢称
int m_ServerPort,m_ClientPort,m_ConnectMax;//服务器端口、客户机端口、服务器最大连接数
CStringList AllIPList,DenyIPList;//所有在线IP、拒绝通信IP
CMap ip_socket_map;
CString ChatPrivilege;//与会者权限设置
CTypedPtrList drawList;
CStringArray outputInfo;
int outInfoIndex;
CCriticalSection csOutputInfo,csDrawInfo,csAllIPList;
CmischatView* pView;
CIocpModeSvr server;
CNetClient client;
private:
CString strModulePath;//本程序的存放目录
CString strTempFileS,strTempFileC;//环境变量TEMP下的零时文件名,服务器同步更新所用
CFile AllDrawFile;//服务器同步更新所用
ULONG totalDrawLen,finishLen;//服务器同步更新所用,数据总长及已完成长度
CString strIPFile,strFileName;//传输文件接收方IP、欲传文件名
CFile ReceiveFile;//接收的文件数据写入此
CFile TransmitFile;//传输的文件数据读于此
ULONG TotalFileLength,FileHaveTransmitLength;//待发文件总字节、已发字节
ULONG TotalReceiveLength,FileHaveReceiveLength;//欲收文件总字节、已收字节
BOOL CanTransmitFile;//是否能进行文件的传输或接收
// Operations
public:
bool SendMsg(LPCTSTR TargetIp,CNDKMessage& mg);//服务器用
bool SendMsg(SOCKET sClient,CNDKMessage& mg);//服务器用
bool SendMsgToAll(CNDKMessage& mg);//服务器用
bool SendMsgToOther(LPCTSTR ExceptIp,CNDKMessage& mg);//服务器用
bool SendMsgToOther(SOCKET ExceptSocket,CNDKMessage& mg);//服务器用
bool SendMsg(CNDKMessage& mg);//客户机用
bool SendMsgToAll(CDraw* pdw);//服务器用 pdw=NULL 则为清除指令
bool SendMsg(CDraw* pdw);//客户机用 pdw=NULL 则为清除指令
void AppendAndDispOutputBarInfo(CString strInfo);
void AddToTailAndDraw(CDraw* pdw);
char* CNDKMessageToPChar(CNDKMessage& mg,ULONG& len);
void PCharToCNDKMessage(CNDKMessage& mg,char* pchar,ULONG len);
CDraw* CNDKMessageToCDraw(CNDKMessage& mg);
void CDrawToCNDKMessage(CNDKMessage& mg,CDraw* pdw);
void PreTransmitFile(CString strFile);//客户机用
void PreTransmitFile(CString strIP,CString strFile);//服务器用
void BeginTransmitFile();
void BeginReceiveFile(CNDKMessage& mg);
static void _stdcall SProcessRecvData(unsigned long sIP,
SOCKET sClient,
char * pData,
unsigned long DataLength,BOOL hint);
static void __stdcall CProcessRecvData(char * pData,unsigned long DataLength,BOOL hint);
static int CALLBACK ConditionFunc(
IN LPWSABUF lpCallerId,
IN LPWSABUF lpCallerData,
IN OUT LPQOS lpSQOS,
IN OUT LPQOS lpGQOS,
IN LPWSABUF lpCalleeId,
OUT LPWSABUF lpCalleeData,
OUT GROUP FAR *g,
IN DWORD_PTR dwCallbackData
);
void AddToIPList(CStringList& list,unsigned long sIP,CString& strName);
void AddToIPList(CStringList& list,CString& sIP,CString& strName);
void RemoveFromIPList(CStringList& list,unsigned long sIP);
void RemoveFromIPList(CStringList& list,CString& sIP);
void OpenWhiteBroad();
void SaveWhiteBroad();
void UpdateAllDrawData();
private:
bool SendUserList();
void ReceiveUserList(CNDKMessage& mg);
void ProcessUserJoin(CNDKMessage& mg,unsigned long sIP,UINT_PTR socket);
bool ReadIniFile(CString& str);
void SaveIniFile(CString& str);
void ProcessSendFileQuery(unsigned long sIP,CNDKMessage& mg);//服务器用
void ProcessSendFileQuery(CNDKMessage& mg);//客户机用
void PrecessSendFileError(long error_id);
// Overrides
public:
virtual BOOL OnNewDocument();
virtual void Serialize(CArchive& ar);
virtual void OnCloseDocument();
// Implementation
public:
virtual ~CmischatDoc();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
// Generated message map functions
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnServerStart();
afx_msg void OnServerStop();
afx_msg void OnClientStart();
afx_msg void OnClientStop();
afx_msg void OnUpdateClientStop(CCmdUI *pCmdUI);
afx_msg void OnUpdateClientStart(CCmdUI *pCmdUI);
afx_msg void OnUpdateServerStop(CCmdUI *pCmdUI);
afx_msg void OnUpdateServerStart(CCmdUI *pCmdUI);
};