⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipmsg.h

📁 飞鸽源代码C++和java 信鸽
💻 H
📖 第 1 页 / 共 4 页
字号:

class TEditSub : public TSubClassCtl {
protected:
	Cfg			*cfg;

public:
	TEditSub(Cfg *_cfg, TWin *_parent);

	virtual BOOL	EventButton(UINT uMsg, int nHitTest, POINTS pos);
	virtual BOOL	EventUser(UINT uMsg, WPARAM wParam, LPARAM lParam);
};

class TSeparateSub : public TSubClassCtl {
protected:
	HCURSOR	hCursor;

public:
	TSeparateSub(TWin *_parent);

	virtual BOOL	EvSetCursor(HWND cursorWnd, WORD nHitTest, WORD wMouseMsg);
	virtual BOOL	EvNcHitTest(POINTS pos, LRESULT *result);
	virtual BOOL	EventButton(UINT uMsg, int nHitTest, POINTS pos);
};

class TListViewEx : public TSubClassCtl {
protected:
	int		focus_index;

public:
	TListViewEx(TWin *_parent);

	int		GetFocusIndex(void) { return focus_index; }
	void	SetFocusIndex(int index) { focus_index = index; }

	virtual BOOL	EventFocus(UINT uMsg, HWND hFocusWnd);
	virtual BOOL	EventButton(UINT uMsg, int nHitTest, POINTS pos);
	virtual BOOL	EventUser(UINT uMsg, WPARAM wParam, LPARAM lParam);
};

class TListDlg : public TDlg, public TListObj {
public:
	TListDlg(LPSTR _name, TWin *_parent = NULL) : TDlg(_name, _parent) {}
	TListDlg(UINT	resid, TWin *_parent = NULL) : TDlg(resid, _parent) {}
};

class FileInfo : public TListObj {
	int			id;		// Win 斉偱偼丄扨側傞僔乕働儞僔儍儖NO傪僙僢僩
	char		*fname;
	const char	*fname_ext;	// for recv dir thread
	UINT		attr;
	_int64		size;
	time_t		mtime;
	time_t		atime;
	time_t		crtime;
	BOOL		isSelected;		// for recvdlg

public:
	FileInfo(int _id=0) { id=_id; fname_ext=fname=NULL; size=0; mtime=0; }
	FileInfo(const FileInfo& org) { fname=NULL; *this = org; }
	~FileInfo() { if (fname) free(fname); }

	int Id() { return id; }
	void SetId(int _id) { id = _id; }
	const char *Fname() { return fname ? fname : fname_ext; }
	void SetFname(const char *_fname) { if (fname) free(fname); fname = (char *)strdup(_fname); }
	void SetFnameExt(const char *_fname) { fname_ext = _fname; }
	_int64 Size() { return size; }
	void SetSize(_int64 _size) { size = _size; }
	time_t Mtime() { return mtime; }
	void SetMtime(time_t _mtime) { mtime = _mtime; }
	time_t Atime() { return atime; }
	void SetAtime(time_t _atime) { atime = _atime; }
	time_t Crtime() { return crtime; }
	void SetCrtime(time_t _crtime) { crtime = _crtime; }
	UINT Attr() { return attr; }
	void SetAttr(UINT _attr) { attr = _attr; }
	BOOL IsSelected() { return isSelected; }
	void SetSelected(BOOL _isSelected) { isSelected = _isSelected; }
	FileInfo& operator =(const FileInfo& org) { id=org.id; SetFname(org.fname); attr=org.attr; size=org.size; mtime=org.mtime; atime=org.atime; crtime=org.crtime; isSelected=org.isSelected; return *this; }
};

struct ShareInfo : public TListObj {	// 偄偢傟 class 偵乮巄掕堏峴拞乯
	int			packetNo;		// not use recvdlg
	Host		**host;			// allow host list, not use recvdlg
	int			hostCnt;		// not use recvdlg
	char		*transStat;		// not use recvdlg
	FileInfo	**fileInfo;		// allow file list
	int			fileCnt;
	FILETIME	attachTime;

public:
	ShareInfo(int packetNo=0);
	void LinkList(ShareInfo *top);
};

BOOL EncodeShareMsg(ShareInfo *info, char *buf, int bufsize);
ShareInfo *DecodeShareMsg(char *buf);
BOOL FreeDecodeShareMsg(ShareInfo *info);
BOOL FreeDecodeShareMsgFile(ShareInfo *info, int index);
BOOL SetFileButton(TDlg *dlg, int buttonID, ShareInfo *info);


struct AcceptFileInfo {
	FileInfo	*fileInfo;
	Host		*host;
	_int64		offset;
	int			packetNo;
	UINT		command;
	FILETIME	attachTime;
};

struct ShareCntInfo {
	int		hostCnt;
	int		fileCnt;
	int		dirCnt;
	int		transferCnt;
	int		doneCnt;
	int		packetCnt;
	_int64	totalSize;
};

class TShareStatDlg;
class ShareMng {
public:
	enum			{ TRANS_INIT, TRANS_BUSY, TRANS_DONE };
protected:
	TListObj		_top;	// 斣暫梡
	ShareInfo		*top;
	TShareStatDlg	*statDlg;
	Cfg				*cfg;
	BOOL			SetFileInfo(char *fname, FileInfo *info);
public:
	ShareMng(Cfg *_cfg);
	~ShareMng();
	ShareInfo *CreateShare(int packetNo);
	void	DestroyShare(ShareInfo *info);
	BOOL	AddFileShare(ShareInfo *info, char *fname);
	BOOL	DelFileShare(ShareInfo *info, int fileNo);
	BOOL	EndHostShare(int packetNo, HostSub *hostSub, FileInfo *fileInfo=NULL, BOOL done=TRUE);
	BOOL	AddHostShare(ShareInfo *info, SendEntry *entry, int entryNum);
	ShareInfo	*Top(void) { return top->next != top ? (ShareInfo *)top->next : NULL; }
	ShareInfo	*Next(ShareInfo *info) { return info->next != top ? (ShareInfo *)info->next : NULL; }
	ShareInfo	*Search(int packetNo);
	BOOL	GetShareCntInfo(ShareCntInfo *info, ShareInfo *shareInfo=NULL);
	BOOL	GetAcceptableFileInfo(ConnectInfo *info, char *buf, AcceptFileInfo *fileInfo);
	void	RegistShareStatDlg(TShareStatDlg *_dlg) { statDlg = _dlg; }
	static int GetFileInfoNo(ShareInfo *info, FileInfo *fileInfo);
};

class TShareDlg : public TDlg {
	ShareMng	*shareMng;
	ShareInfo	*shareInfo;
	Cfg			*cfg;
	char		lvBuf[MAX_PATH];
	BOOL		AddList(int cnt);
	BOOL		DelList(int cnt);
	TListViewEx	shareListView;

public:
	TShareDlg(ShareMng *_shareMng, ShareInfo *_shareInfo, Cfg *_cfg, TWin *_parent = NULL);
	~TShareDlg();
//	virtual int		Exec(void);
	virtual BOOL	EvCommand(WORD wNotifyCode, WORD wID, LPARAM hwndCtl);
	virtual BOOL	EvCreate(LPARAM lParam);
	virtual BOOL	EvDropFiles(HDROP hDrop);
	virtual BOOL	EvNotify(UINT ctlID, NMHDR *pNmHdr);
static BOOL FileAddDlg(TDlg *dlg, ShareMng *sharMng, ShareInfo *shareInfo, Cfg *cfg);
};

class TSaveCommonDlg : public TDlg {
protected:
	TWin		*parentWin;
	ShareInfo	*shareInfo;
	Cfg			*cfg;
	int			offset;
	BOOL		SetInfo(void);

public:
	TSaveCommonDlg(ShareInfo *_shareInfo, Cfg *_cfg, TWin *_parentWin);
	virtual int		Exec(void);
	virtual BOOL	EvCreate(LPARAM lParam);
	virtual BOOL	EvCommand(WORD wNotifyCode, WORD wID, LPARAM hwndCtl);
	virtual BOOL	EventUser(UINT uMsg, WPARAM wParam, LPARAM lParam);
	virtual void	EndDialog(int) {}	// 柍帇偝偣傞
};

class LogMng {
protected:
	Cfg		*cfg;
	BOOL	Write(LPCSTR str);

public:
	LogMng(Cfg *_cfg);

	BOOL	WriteSendStart(void);
	BOOL	WriteSendHead(LPCSTR head);
	BOOL	WriteSendMsg(LPCSTR msg, ULONG command, ShareInfo *shareInfo=NULL);
	BOOL	WriteRecvMsg(MsgBuf *msg, THosts *hosts, ShareInfo *shareInfo=NULL);
	BOOL	WriteStart(void);
	BOOL	WriteMsg(LPCSTR msg, ULONG command, ShareInfo *shareInfo=NULL);

static void StrictLogFile(char *path);
};

class TSendDlg : public TListDlg {
protected:
	MsgMng		*msgMng;
	Cfg			*cfg;
	LogMng		*logmng;
	HWND		hRecvWnd;
	MsgBuf		msg;
	ShareMng	*shareMng;
	ShareInfo	*shareInfo;

	THosts		*hosts;
	TFindDlg	*findDlg;
	Host		**hostArray;
	int			memberCnt;

	SendEntry	*sendEntry;
	int			sendEntryNum;
	UINT		command;
	char		*shareStr;
	char		msgBuf[MAX_UDPBUF];
	char		selectGroup[MAX_NAMEBUF];

	ULONG		packetNo;
	int			packetLen;
	UINT		timerID;
	UINT		retryCnt;

// display
	HFONT		hListFont;
	HFONT		hEditFont;
	LOGFONT		orgFont;

	RECT		orgRect;
	enum		send_item { host_item=0, member_item, refresh_item, edit_item, ok_item, secret_item, passwd_item, separate_item, file_item, max_senditem };
	WINPOS		item[max_senditem];

	int			currentMidYdiff;
	int			dividYPos;
	int			lastYPos;
	BOOL		captureMode;
	BOOL		listOperateCnt;
	BOOL		hiddenDisp;

	int			maxItems;
	UINT		ColumnItems;
	int			FullOrder[MAX_SENDWIDTH];
	int			items[MAX_SENDWIDTH];
	BOOL		lvStateEnable;
	int			sortItem;
	BOOL		sortRev;

	TEditSub		editSub;
	TListViewEx		hostListView;
	TSeparateSub	separateSub;

	void	SetFont(void);
	void	SetSize(void);
	void	SetMainMenu(HMENU hMenu);
	void	PopupContextMenu(POINTS pos);
	void	GetOrder(void);

	void	SetQuoteStr(LPSTR str, LPCSTR quoteStr);
	void	SelectHost(HostSub *hostSub, BOOL force=FALSE);
	void	DisplayMemberCnt(void);
	UINT	GetInsertIndexPoint(Host *host);
	int		CompareHosts(Host *host1, Host *host2);
	int		GroupCompare(Host *host1, Host *host2);
	int		SubCompare(Host *host1, Host *host2);
	BOOL	SendMsg(void);
	BOOL	SendMsgSub(void);
	BOOL	MakeEncryptPacket(SendEntry *entry);
	BOOL	MakeEncryptMsg(Host *host, char *msgstr, char *buf);
	BOOL	IsSendFinish(void);
	void	InitializeHeader(void);
	char	*GetListItemStr(Host *host, int item);
	void	MakeEncryptMsg(Host *host, char *msgbuf);

public:
	TSendDlg(MsgMng *_msgmng, ShareMng *_shareMng, THosts *_hosts, Cfg *cfg, LogMng *logmng, HWND _hRecvWnd = NULL, MsgBuf *msg = NULL);
	virtual ~TSendDlg();

	HWND	GetRecvWnd(void) { return	hRecvWnd; }
	void	AddHost(Host *host);
	void	ModifyHost(Host *host);
	void	DelHost(Host *host);
	void	DelAllHost(void);
	BOOL	IsSending(void);
	BOOL	SendFinishNotify(HostSub *hostSub, ULONG packet_no);
	BOOL	SendPubKeyNotify(HostSub *hostSub, BYTE *pubkey, int len, int e, int capa);
	BOOL	FindHost(char *findStr, BOOL isAllfind);

	virtual BOOL	EvCreate(LPARAM lParam);
	virtual BOOL	EvCommand(WORD wNotifyCode, WORD wID, LPARAM hwndCtl);
	virtual BOOL	EvSysCommand(WPARAM uCmdType, POINTS pos);
	virtual BOOL	EvSize(UINT fwSizeType, WORD nWidth, WORD nHeight);
	virtual BOOL	EvTimer(WPARAM timerID, TIMERPROC proc);
	virtual BOOL	EvGetMinMaxInfo(MINMAXINFO *info);
	virtual BOOL	EvMouseMove(UINT fwKeys, POINTS pos);
	virtual BOOL	EvContextMenu(HWND childWnd, POINTS pos);
	virtual BOOL	EvMeasureItem(UINT ctlID, MEASUREITEMSTRUCT *lpMis);
	virtual BOOL	EvDrawItem(UINT ctlID, DRAWITEMSTRUCT *lpDis);

	virtual BOOL	EvMenuSelect(UINT uItem, UINT fuFlag, HMENU hMenu);
	virtual BOOL	EvNotify(UINT ctlID, NMHDR *pNmHdr);
	virtual BOOL	EvDropFiles(HDROP hDrop);
	virtual BOOL	EventButton(UINT uMsg, int nHitTest, POINTS pos);
	virtual BOOL	EventInitMenu(UINT uMsg, HMENU hMenu, UINT uPos, BOOL fSystemMenu);
	virtual BOOL	EventCtlColor(UINT uMsg, HDC hDcCtl, HWND hWndCtl, HBRUSH *result);
	virtual BOOL	EventUser(UINT uMsg, WPARAM wParam, LPARAM lParam);
	virtual void	Show(int mode = SW_SHOWDEFAULT);
};

enum FileStatus { FS_DIRFILESTART, FS_OPENINFO, FS_FIRSTINFO, FS_NEXTINFO, FS_MAKEINFO, FS_TRANSINFO, FS_TRANSFILE, FS_ENDFILE, FS_COMPLETE, FS_ERROR };

struct RecvFileObj {
	ConnectInfo	*conInfo;
	FileInfo	*fileInfo;

	BOOL		isDir;
	FileInfo	curFileInfo;

	_int64		offset;
	_int64		woffset;
	char		*recvBuf;
	HANDLE		hFile;
	HANDLE		hThread;

	int			infoLen;
	int			dirCnt;

	_int64		totalTrans;
	DWORD		startTick;
	DWORD		lastTick;
	int			totalFiles;
	FileStatus	status;
	char		saveDir[MAX_PATH];
	char		path[MAX_PATH];
	char		info[MAX_BUF];	// for dirinfo buffer
};

class TRecvDlg : public TListDlg {
protected:
	static int	createCnt;
	MsgMng		*msgMng;
	MsgBuf		msg;
	THosts		*hosts;
	char		head[MAX_LISTBUF];
	Cfg			*cfg;
	LogMng		*logmng;
	BOOL		openFlg;
	SYSTEMTIME	recvTime;
	HFONT		hHeadFont;
	HFONT		hEditFont;
	LOGFONT		orgFont;
	TEditSub	editSub;
	BOOL		status;

	RecvFileObj	*fileObj;
	ShareInfo	*shareInfo;

	UINT		timerID;
	UINT		retryCnt;
	char		readMsgBuf[MAX_LISTBUF];
	ULONG		packetNo;
	int			cryptCapa;

	RECT	orgRect;
	enum	recv_item { title_item=0, head_item, head2_item, open_item, edit_item, ok_item, cancel_item, quote_item, file_item, max_recvitem };
	WINPOS	item[max_recvitem];

	void	SetFont(void);
	void	SetSize(void);
	void	SetMainMenu(HMENU hMenu);
	void	PopupContextMenu(POINTS pos);
	BOOL	TcpEvent(SOCKET sd, LPARAM lParam);
	BOOL	StartRecvFile(void);
	BOOL	ConnectRecvFile(void);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -