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

📄 largedatagram.h

📁 用qt4 编写的局域网聊天工具
💻 H
字号:
/*************************************************************************** *   Copyright (C) 2007 by Anistratov Oleg                                 * *   ower@users.sourceforge.net                                            * *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU General Public License version 2        * *   as published by the Free Software Foundation;                         * *                                                                         * *   This program is distributed in the hope that it will be useful,       * *   but WITHOUT ANY WARRANTY; without even the implied warranty of        * *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         * *   GNU General Public License for more details.                          * *                                                                         * ***************************************************************************/#ifndef LARGEDATAGRAM_H#define LARGEDATAGRAM_H#include <QString>#include <QObject>#include <QTimer>#include <QFile>#include "globals.h"/**	@author Anistratov Oleg <ower@users.sourceforge.net>*/class LargeDatagram : public QObject{  Q_OBJECT  private:    quint8  m_remain; // pokazyvaet skol'ko protsentov ostalos' peredat'    QString m_filename;    QFile   m_file;    bool    m_isFile;    bool    m_fileInited;    bool    m_inited;    QString  m_senderName;    QString  m_senderCompName;    quint16  m_programVersion;    quint16  m_protocolVersion;    quint64  m_destIP;    quint64  m_srcIP;    quint8   m_packetType;    quint32  m_datagramID;    quint32  m_channelType;    quint64  m_totalSize;    quint32  m_totalFragments;    quint16  m_fragmentSize;// razmery fragmentov    quint16  m_lastFragmentSize;// razmer poslednego fragmenta    /// после того, как будет отправлен запрос на пересылку недостающих фрагментов, необходумо будет знать    /// после прихода какого фрагмента, в случае необходимости, посылать повторный запрос на пересылку фрагментов    /// поэтому m_lastFragmentNum наибольший номер среди недостающих фрагментов    quint32  m_lastFragmentNum;    quint64  m_firstFragmentTime;    quint64  m_finalFragmentTime;    quint64  m_currentSize;    quint32  m_fragmentsRemain;    char*    m_fragments; // pokazyvaet kakie fragmenty polucheny, a kakie - net    char*    m_data;    /// запрашивает недостающие фрагменты, если ничего не было получено в течение m_requestInterval миллисекунд    QTimer*  m_requestTimer;    /// если ничего не было получено в течение m_selfDestroyInterval миллисекунд - происходит уничтожение объекта    QTimer*  m_selfDestroyTimer;    quint32  m_requestInterval;    quint32  m_selfDestroyInterval;    uint     m_destUid;  public:    LargeDatagram(quint64 IP, quint32 ID, QObject* parent = 0);    ~LargeDatagram();    const QString & filename() const {return m_filename;}    quint16               id() const {return m_datagramID;}    quint64               ip() const {return m_srcIP;}    bool cmp(quint64 IP, quint32 ID) const {return (IP == m_srcIP && ID == m_datagramID);}    bool complete() const {return (m_inited && !m_fragmentsRemain);}    void initDatagram    (const char* dtgrm, quint32 dtgrm_len);    void addFragment     (const char* dtgrm, quint32 dtgrm_len);    void addFileFragment (const char* dtgrm, quint32 dtgrm_len);    void allocateSpace();    void clear();    bool fillHeader(QC_DatagramHeader*);  public slots:    void slot_fragmentsRequest ();    void slot_selfDestroy      ();    void slot_initFile(const QString & filename);    uint destUid() const {return m_destUid;}  signals:    void completed     (LargeDatagram*);    void wantFragments (char*,  quint32, quint32, quint64);    void wantDie       (LargeDatagram*);    void percentsRemain(quint8, quint16, quint64);    void readyReceive  (quint16, quint64);};#endif

⌨️ 快捷键说明

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