示例#1
0
/* -------------------------------------------------------------------- */
void saveMessage(ulong id, FILE *fl)
{
    ulong here;
    ulong loc;
    ulong result;
/*  int originroomno; */

#ifdef NEWMSGTAB
    ulong slot;
#else
    int   slot;
#endif
    FILE *fl2;
/*   label str; */


    result = indexslot(id);

#ifdef NEWMSGTAB    
    slot = indexslot(id);
#else
    slot = (int)indexslot(id);
#endif
    
    if (result == ULONG_ERROR) return;


#ifdef NEWMSGTAB
    if (getFlags(slot)->COPY)
#else
    if (msgTab_mtmsgflags[slot].COPY)
#endif

    {
        copyflag     = TRUE;
        originalId   = id;
        originalattr = 0;


#ifdef NEWMSGTAB
        originalattr = (uchar)
                       (originalattr | (getFlags(slot)->RECEIVED)?ATTR_RECEIVED :0 );
        originalattr = (uchar)
                       (originalattr | (getFlags(slot)->REPLY   )?ATTR_REPLY : 0 );
        originalattr = (uchar)
                       (originalattr | (getFlags(slot)->MADEVIS )?ATTR_MADEVIS : 0 );
#else
        originalattr = (uchar)
                       (originalattr | (msgTab_mtmsgflags[slot].RECEIVED)?ATTR_RECEIVED :0 );
        originalattr = (uchar)
                       (originalattr | (msgTab_mtmsgflags[slot].REPLY   )?ATTR_REPLY : 0 );
        originalattr = (uchar)
                       (originalattr | (msgTab_mtmsgflags[slot].MADEVIS )?ATTR_MADEVIS : 0 );
#endif

#ifdef GOODBYE                       
        if (msgTab3[slot].mtoffset <= (ushort)slot)
            saveMessage( (ulong)(id - (ulong)msgTab3[slot].mtoffset), fl);
#endif


#ifdef NEWMSGTAB
/*      if (getOriginID(slot)     <= (ushort)slot)  */
        if (long_JOIN(getToHash(slot), getAuthHash(slot))     <= slot)
#else
   /*   if (msgTab_mtomesg[slot]  <= (ushort)slot)  */

if(long_JOIN(msgTab_mttohash[slot], msgTab_mtauthhash[slot]) <= (ushort)slot) 


#endif

#ifdef NEWMSGTAB
        /*  saveMessage( (ulong)(id - (ulong)getOriginID(slot)    ), fl); */
            saveMessage( (id - long_JOIN(getToHash(slot), getAuthHash(slot))   ), fl);
#else
        /*  saveMessage( (ulong)(id - (ulong)msgTab_mtomesg[slot] ), fl);  */

            saveMessage( (ulong)(id - long_JOIN(msgTab_mttohash[slot], 
            msgTab_mtauthhash[slot])) , fl);

#endif

        return;
    }

    /* in case it returns without clearing buffer */
    msgBuf->mbfwd[  0]  = '\0';
    msgBuf->mbto[   0]  = '\0';

/*  loc = msgTab2[slot].mtmsgLoc; */

#ifdef NEWMSGTAB
    loc  = getLocation(slot);
#else
    loc  = long_JOIN(msgTab_mtmsgLocLO[slot], msgTab_mtmsgLocHI[slot]); 
#endif

    if (loc == ULONG_ERROR) return;


#ifdef NEWMSGTAB
    if (copyflag)  slot = indexslot(originalId);
#else
    if (copyflag)  slot = (int)indexslot(originalId);
#endif


#ifdef NEWMSGTAB
    if (!mayseeindexmsg(slot) && !getFlags(slot)->NET) return;
#else
    if (!mayseeindexmsg(slot) && !msgTab_mtmsgflags[slot].NET) return;
#endif

    fseek(msgfl, loc, 0);

    getMessage();
    getMsgStr(msgBuf->mbtext, MAXTEXT);

    sscanf(msgBuf->mbId, "%lu", &here);

    /* cludge to return on dummy msg #1 */
    /* if ((int)here == 1) return; */

#ifdef NEWMSGTAB
    if (!mayseemsg() && !getFlags(slot)->NET) return;
#else
    if (!mayseemsg() && !msgTab_mtmsgflags[slot].NET) return;
#endif

    if (here != id )
    {
        cPrintf("Can't find message. Looking for %lu at byte %ld!\n ",
                 id, loc);
        return;
    }

    if (msgBuf->mblink[0])
    {
        if ((fl2 = fopen(msgBuf->mblink, "rt")) == NULL)
        {
            return;
        }
        GetFileMessage(fl2, msgBuf->mbtext, MAXTEXT);
        fclose(fl2);
    }

#ifdef HENGE    
    if (node.network == NET_HENGE)
    {
        HengePutMessage(fl);
    }
    else
    {
#endif         
        PutMessage(fl);
#ifdef HENGE    
    }
#endif         
}
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    m_flag(false),
    m_auto(false),
    m_isLeft(true),
    m_overNum(0),
    m_pthread(NULL)
{
    ui->setupUi(this);


    QIcon icon(":/Image/people.png");
    setWindowIcon(icon);

    // 加载历史记录
    if(!LoadPersionInfo())
    {
        // 没有历史记录
        GetFileMessage("Config/NameList.txt");
    }
    // 加载问题
    LoadQuestions("Config/question.txt");

    // 显示随机姓名
    qsrand(time(NULL));
    int index = qrand() % m_names.size();
    QString curName = m_names.at(index);
    ui->label_name->setText(curName);
    int count = m_perInfo[curName].blackCount;
    if(count == 0)
    {
        ui->delete_black->setEnabled(false);
    }
    else
    {
        ui->delete_black->setEnabled(true);
    }
    // 随机问题
    index = qrand() % m_questions.size();
    ui->label_question->setText(m_questions.at(index));


    // 初始化
    m_timer = new QTimer(this);
    m_pthread = new QThread(this);
    m_wgInfo = new InfoWidget(this);
    m_randomName = new RandomName(m_names.size(), m_questions.size());
    m_wgInfo->SetSutdentNum(m_names.size());    // 设置总人数
    m_wgInfo->SetBlackListNum(m_perInfo[curName].blackCount);   // 初始化黑名单次数
    ui->statusBar->addWidget(m_wgInfo);
    // RandomName对象移入子线程
    m_randomName->moveToThread(m_pthread);

    // 右侧列表 init
    InitSutdentInfo();
    // 启动子线程
    m_pthread->start();

    // 开始/停止
    connect(ui->start, &QPushButton::clicked, [=]()
    {
        if(!m_flag)
        {
            ui->start->setText("停止");
            ui->automate->setEnabled(false);
            m_timer->start(50);
            if(m_overNum > 0 && m_overNum <= m_questions.size())
            {
                QString text = ui->label_question->text();
                m_questions.removeOne(text);
                m_randomName->SetMaxQuestionNumber(m_questions.size());
            }
            m_overNum++;
        }
        else
        {
            m_timer->stop();
            ui->start->setText("开始");
            ui->automate->setEnabled(true);
        }
        m_flag = !m_flag;
    });

    // 托管
    connect(ui->automate, &QPushButton::clicked, [=]()
    {
        m_auto = true;
        ui->start->setEnabled(false);
        ui->automate->setEnabled(false);
        m_timer->start(50);
        if(m_overNum > 0 && m_overNum <= m_questions.size())
        {
            QString text = ui->label_question->text();
            m_questions.removeOne(text);
            qDebug() << m_questions.size();
            m_randomName->SetMaxQuestionNumber(m_questions.size());
        }
        m_overNum++;

    });

    // 添加到黑名单
    connect(ui->blackList, &QPushButton::clicked, [=]()
    {
        // 当前姓名
        QString curName = ui->label_name->text();
        // 黑名单次数+1
        int count = (m_perInfo[curName].blackCount += 1);
        // 刷新列表
        QString curText = ui->comboBox->currentText();
        slotComboIndexChange(curText);
        m_wgInfo->SetBlackListNum(count);
        ui->delete_black->setEnabled(true);
        QMessageBox::information(this, "提示", "成功添加 @_" + curName + "_@ 到黑名单");
    });

    // 从黑名单中删除
    connect(ui->delete_black, &QPushButton::clicked, [=]()
    {
        QString name = ui->label_name->text();
        m_perInfo[name].blackCount --;
        if(m_perInfo[name].blackCount <= 0)
        {
            m_perInfo[name].blackCount = 0;
            ui->delete_black->setEnabled(false);
            m_wgInfo->SetBlackListNum(0);
        }
        QString text = ui->comboBox->currentText();
        slotComboIndexChange(text);
    });

    // 定时器
    connect(m_timer, &QTimer::timeout, m_randomName, &RandomName::GetName);

    // 处理抽签类发出的信号
    connect(m_randomName, &RandomName::sigName, this, &MainWindow::GetRandomName);

    // 系统设置
    connect(ui->actionSystemSet, &QAction::triggered, [=]()
    {
        SyetemSet dlg(this);
        connect(&dlg, &SyetemSet::sigSysSet, [=](QString path)
        {
            // 数据重置
            // 读文件
            GetFileMessage(path);
            // 初始化列表框
            RefreshTableList(m_perInfo);
            // 初始化随机人名
            // 显示随机姓名
            qsrand(time(NULL));
            int index = qrand() % m_names.size();
            QString curName = m_names.at(index);
            ui->label_name->setText(curName);
            m_randomName->SetMaxNameNumber(m_names.size());
        });
        dlg.exec();
    });

    qDebug() << "main Thread ID: " << this->thread() << endl;
}