www.pudn.com > 密聊源程序.rar > SecretChatDlg.h


// SecretChatDlg.h : header file 
// 
 
#if !defined(AFX_SECRETCHATDLG_H__1047F9F5_CF01_483A_8822_470EF4A132CF__INCLUDED_) 
#define AFX_SECRETCHATDLG_H__1047F9F5_CF01_483A_8822_470EF4A132CF__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
///////////////////////////////////////////////////////////////////////////// 
// CSecretChatDlg dialog 
//托盘事件 
#define MYWM_NOTIFYICON  WM_USER + 1 
//运行时隐藏窗口消息	 
#define WM_RUNHIDE ( WM_USER + 2)		 
 
//监听的端口号 
#define LISTEN_PORT				2300 
//应用程序版本号 
#define APPLICATION_VERSION		1 
//当前自己的通讯版本号 
#define MESSAGE_VERSION			1 
//密钥文件版本号 
#define SECRETKEY_VERSION		1 
//一次发送的数据大小,msg.n			 
#define SENDFILESIZE			1024 
 
//接收的最大消息数目 
#define MESSAGE_COUNT			4 
/*1位表示被用着,0位表示可以用,如果全为0就代表完全空着,全为1就代表没有空余 
m_send_message_package_ID数组的索引和m_send_message_package_ID_index的位相对应, 
总之有空闲的位就可以使用*/ 
DWORD	exponential(DWORD, DWORD a = 2); 
void	bit_to_index(DWORD bit, DWORD &index, BOOL count); 
DWORD	bit_to_index(DWORD bit, BOOL count); 
int		get_bit_count(DWORD bit, BOOL count); 
BOOL	get_bit(DWORD bit, DWORD index); 
void	set_bit(DWORD &bit, DWORD index, BOOL count); 
 
 
// CNoteTunnelDlg dialog 
#include "RSA.h" 
#include "__DWORD128.h" 
#include "ListenSocket.h" 
#include "BtnST.h"	// Added by ClassView 
#include "Connect.h" 
#include "HyperLink.h"	// Added by ClassView 
#include "Setup.h" 
#include "Label.h" 
#include "ColorEdit.h" 
 
 
class CSecretChatDlg : public CDialog 
{ 
// Construction 
public: 
	CSecretChatDlg(CWnd* pParent = NULL);	// standard constructor 
 
	//套接字用 
	int		m_friend_message_version;	//对方的消息版本号 
	BOOL	m_bListen;				//是否监听成功 
	CConnect m_connectDlg;			//输入IP地址的对话框 
	UINT	m_port;					//服务器端口号,双方约定为48501。 
	CString m_IP;					//服务器IP地址 
	CSocket *m_pSocket;				//客户机类对象 
	CListenSocket m_socketListen;	//服务器监听的套接字对象 
	BOOL	m_online;				//判断是否联机 
	BOOL	m_clientOrService;		//自己用的时客户端还是服务器端 
	int		m_zai_xian_biao_ji;		//在线标记 
	int		SendData(MessagePackage &msg, int n);	//发送数据 
	BOOL	Connect(); 
	BOOL	Disconnection(); 
 
	//RSA用	 
//	public_key	m_public_key; 
//	private_key	m_private_key; 
	//接收同时处理时会并行更改requires,所以把他们分开 
	public_key	m_public_key_send; 
	private_key	m_private_key_send; 
	public_key	m_public_key_receive; 
	private_key	m_private_key_receive; 
	void		MessagePackageToText(MessagePackage &package);//将消息包转化成明文 
	void		TextToMessagePackage(MessagePackage &package, CString strm);//将明文strm转化成消息包 
	//发送消息要保留的信息 
	DWORD		m_send;										//发送的消息数目,这里最大为1 
	CString		m_send_time;								//发送消息时间 
	//因为消息包数组的处理方式的进出无序的,所以要用位来表示 
	__DWORD128	m_send_message_package_ID[32];				//发送消息包的标识 
	DWORD		m_send_message_package_ID_index;			//用它的位判断发送消息包ID的那个索引有没被使用 
	/*类或结构做参数必须用引用传递,否则就会在调用它时使得内存变乱,而出现无法回复的错误*/ 
	int			m_send_message_package_ID_del(__DWORD128 &del);		//删除消息ID 
	int			m_send_message_package_ID_find(__DWORD128 &find);	//查找 
	int			m_send_message_package_ID_add(__DWORD128 &add);		//添加 
	 
	//接收消息要保留的信息 
	int			m_receive_text_length;						//收到消息的长度 
	char		m_receive_text[DATA_LENGTH];					//收到消息的正文缓冲区 
	__DWORD128	m_receive_digital_ID;						//收到消息的数字标识 
	__DWORD128	m_receive_message_package_ID;				//收到消息包的标识 
	__DWORD128	m_receive_message_dollop_ID;				//收到所以消息块总和的标识 
	CString		m_receive_time;								//收到消息时间 
	MessagePackage m_receive_message_package[MESSAGE_COUNT];//为了接收时的线程能读到的发过来的消息包的数据 
	CRITICAL_SECTION	m_cs_receive;						//临界区,接收多条消息有用m_cs.LockCount代表正在接收消息的数目 
	long		m_receive;									//代表正在接收消息的数目,-1未没有 
 
	BOOL		InstallPublicKey(CString fileName = "");	//安装好友公钥文件 
	BOOL		InstallPrivateKey(CString fileName = "");	//安装用户私钥文件 
 
public: 
	//文件传送功能 
	BOOL			m_send_file;			//判断是否接收或发送文件 
	CString			m_send_file_name;		//发送的文件名 
//	int				m_send_file_seek_position;	//当前发送的文件位置 
	int				m_send_file_length;		//发送或接收的文件长度 
	CString			m_receive_file_name;	//接收的文件名 
//	MessagePackage	m_receive_file_buffer;	//接收文件的缓冲区要传给线程的呀 
	HANDLE			m_send_file_thread_handle;	//线程句柄用来取消发送或接收 
 
	////////// 
	CRect		m_rect;			//窗口的位置 
	CToolTipCtrl m_toolTip;		//工具提示对象 
	CSetup		m_setupDlg;		//设置管理器 
	CString		m_appName;		//应用程序目录名 
 
// Dialog Data 
	//{{AFX_DATA(CSecretChatDlg) 
	enum { IDD = IDD_SECRETCHAT_DIALOG }; 
	CLabel	m_friendNameStatic; 
	CLabel	m_userNameStatic; 
	CEdit	m_statusMessages; 
	CColorEdit	m_messageNoteEdit; 
	CEdit	m_messageEdit; 
	CString	m_message; 
	CString	m_messageNote; 
	//}}AFX_DATA 
 
	// ClassWizard generated virtual function overrides 
	//{{AFX_VIRTUAL(CSecretChatDlg) 
	public: 
	virtual void WinHelp(DWORD dwData, UINT nCmd = HELP_CONTEXT); 
	virtual BOOL PreTranslateMessage(MSG* pMsg); 
	protected: 
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support 
	//}}AFX_VIRTUAL 
public: 
	CButtonST m_connect; 
	CButtonST m_disconnection; 
	CButtonST m_publickeymanager; 
	CButtonST m_note; 
	CButtonST m_send_button; 
	CButtonST m_exit; 
	CButtonST m_getIP; 
	CButtonST m_setup;	 
	CButtonST m_sendfile; 
 
public: 
	CString GetFriendIP();//对方的IP地址 
	void	disconnection_message(MessagePackage &msg); 
	BOOL	CuoWuTiShi(); 
	void	send_file_comeback_scene(); 
	BOOL	prevent_connect(); 
	void	CloseSocket(); 
	void	receive_file(MessagePackage &msg); 
	void	connect_succeed_update(); 
	void	signalled_friend_version(); 
	void	message_version(MessagePackage &msg); 
	void	set_app_alias(CString app_alias); 
	void	ReceiveRevert(MessagePackage &package); 
	void	InitializationWindow(); 
	void	send_or_receive_tip(BOOL sendOrReceive); 
	CString GetFriendName(); 
	CString GetUserName(); 
	void	Receive(MessagePackage &package); 
	void	TrayIcon(); 
	BOOL	ValidatePublicKey(); 
	BOOL	ValidatePrivateKey(); 
	BOOL	AskPublicKey(); 
	BOOL	ClaimPublicKey(MessagePackage &msg); 
	BOOL	RevertPublicKey(MessagePackage &msg); 
	BOOL	MyUpdateData(); 
	void	PlayWaveSound(DWORD wave); 
 
// Implementation 
protected: 
	HICON	m_hIcon; 
	HICON	m_hOnline;	//在线图标 
	HICON	m_hOffline;	//断线图标 
	// Generated message map functions 
	//{{AFX_MSG(CSecretChatDlg) 
	virtual BOOL OnInitDialog(); 
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam); 
	afx_msg void OnPaint(); 
	afx_msg HCURSOR OnQueryDragIcon(); 
	afx_msg void OnTimer(UINT nIDEvent); 
	virtual void OnOK(); 
	virtual void OnCancel(); 
	afx_msg void OnGetip(); 
	afx_msg void OnNote(); 
	afx_msg void OnSend(); 
	afx_msg void OnConnectDisconnection(); 
	afx_msg void OnSecretkey(); 
	afx_msg void OnSetup(); 
	afx_msg void OnUsername(); 
	afx_msg void OnFriendname(); 
	afx_msg void OnSendfile(); 
	afx_msg void OnTop(); 
	afx_msg void OnShow(); 
	afx_msg void OnHide(); 
	afx_msg void OnEmail(); 
	afx_msg void OnHomepage(); 
	afx_msg void OnHelp(); 
	afx_msg void OnExit(); 
	afx_msg void OnJiami(); 
	afx_msg void OnAbout(); 
	//}}AFX_MSG 
	afx_msg LRESULT RunHide(WPARAM wParam,LPARAM lParam);	//运行时隐藏窗口 
	afx_msg void OnMyIconNotify(WPARAM wParam,LPARAM lParam);	//托盘图标响应事件 
	DECLARE_MESSAGE_MAP() 
}; 
 
 
//{{AFX_INSERT_LOCATION}} 
// Microsoft Visual C++ will insert additional declarations immediately before the previous line. 
 
#endif // !defined(AFX_SECRETCHATDLG_H__1047F9F5_CF01_483A_8822_470EF4A132CF__INCLUDED_)