/* -------------------------------------------------------------------- */ 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; }