📄 ipmsg.h
字号:
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 + -