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); 
};