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

📄 channelwgt.cpp

📁 用qt4 编写的局域网聊天工具
💻 CPP
📖 第 1 页 / 共 3 页
字号:
  logMessage(Hdr);  Message* msg = new Message(Hdr);  m_chatMsgs->addMsg(msg);  mw_chatText->addMsg(msg);  mw_clearChatText->addMsg(msg);}//\*****************************************************************************void ChannelWgt::addMsg2Chat(Message* msg){  if(msg)  {    qDebug("[ChannelWgt::addMsg2Chat]: adding: %s\n", msg->msg().toLocal8Bit().data());    mw_chatText->addMsg(msg);    if(!isSystemMsg(msg->type()))      mw_clearChatText->addMsg(msg);  }}//\*****************************************************************************void ChannelWgt::addUser(QC_DatagramHeader* Hdr){  UserWgt*   usr;  UserInfo*  info;  UserStatistics* stats;  QByteArray buf;  qDebug("[ChannelWgt::addUser]: uid = %s", QHostAddress(Hdr->src_ip).toString().toAscii().data());  if(!(usr = m_users->enableIfExists(Hdr->src_ip)))  {    info = new UserInfo();    if(!info) return;    stats = new UserStatistics;    if(!stats) return;    usr  = new UserWgt();    if(!usr) return;    usr->setInfo(info);    usr->setStats(stats);    m_users->addUser(usr);  }  else    info = usr->info();  // this is only needed in server mode  usr->info()->setUid(Hdr->src_ip);  addUserInfo(usr, Hdr);  mw_usersList->addUser(usr);  m_usersModel->resort();  updateUsersView();}//\*****************************************************************************void ChannelWgt::hideUser(QC_DatagramHeader* Hdr){  UserWgt* user;  if(m_users->exists(Hdr->src_ip))  {    user = m_users->findUser(Hdr->src_ip);    if(user)    {      mw_usersList->hideUser(user);      user->info()->setEnabled(false);    }  }  m_usersModel->resort();  updateUsersView();}//\*****************************************************************************void ChannelWgt::addUserInfo(QC_DatagramHeader* Hdr){  UserWgt*   usr = m_users->findUser(Hdr->src_ip);  if(NULL == usr)  {    usr = new UserWgt();    usr->setInfo(new UserInfo());    m_users->addUser(usr);  }  addUserInfo(usr, Hdr);}void ChannelWgt::addUserInfo(UserWgt* usr, QC_DatagramHeader* Hdr){  QByteArray buf;  QPixmap*   icon, *tmp;  QCryptographicHash md5_hash(QCryptographicHash::Md5);  bool need_avatar = true;  if(!(buf = ChatCore::getParametr("IpAddress"  , Hdr->parametrs)).isNull())    usr->info()->setIP((QString().fromUtf8(buf)).toLongLong());  usr->info()->setGender(QString().fromUtf8(ChatCore::getParametr("Gender", Hdr->parametrs)).toInt());  if(!(buf = ChatCore::getParametr("OS"         , Hdr->parametrs)).isNull())    usr->stats()->setOs(QString().fromUtf8(buf));  if(!(buf = ChatCore::getParametr("Uptime"     , Hdr->parametrs)).isNull())    usr->stats()->setUptime((QString().fromUtf8(buf)).toLong());  if(!(buf = ChatCore::getParametr("ChatTime"   , Hdr->parametrs)).isNull())    usr->stats()->setChatTime((QString().fromUtf8(buf)).toLong());  if(!(buf = ChatCore::getParametr("LastName"   , Hdr->parametrs)).isNull())    usr->info()->setLastName   (QString().fromUtf8(buf));  if(!(buf = ChatCore::getParametr("FirstName"  , Hdr->parametrs)).isNull())    usr->info()->setFirstName  (QString().fromUtf8(buf));  if(!(buf = ChatCore::getParametr("SecondName" , Hdr->parametrs)).isNull())    usr->info()->setSecondName (QString().fromUtf8(buf));  if(!(buf = ChatCore::getParametr("DateOfBorn" , Hdr->parametrs)).isNull())    usr->info()->setDateOfBorn(QDate().fromString(QString().fromUtf8(buf)));  if(!(buf = ChatCore::getParametr("Address"    , Hdr->parametrs)).isNull())    usr->info()->setAddress(QString().fromUtf8(buf));  if(!(buf = ChatCore::getParametr("HomePhone"  , Hdr->parametrs)).isNull())    usr->info()->setHomePhone(QString().fromUtf8(buf));  if(!(buf = ChatCore::getParametr("MobilePhone", Hdr->parametrs)).isNull())    usr->info()->setMobilePhone(QString().fromUtf8(buf));  if(!(buf = ChatCore::getParametr("WorkPhone"  , Hdr->parametrs)).isNull())    usr->info()->setWorkPhone(QString().fromUtf8(buf));  if(!(buf = ChatCore::getParametr("e-mail"     , Hdr->parametrs)).isNull())    usr->info()->setE_mail(QString().fromUtf8(buf));  if(!(buf = ChatCore::getParametr("ICQ"        , Hdr->parametrs)).isNull())    usr->info()->setICQ(QString().fromUtf8(buf));  if(!(buf = ChatCore::getParametr("Homepage"   , Hdr->parametrs)).isNull())    usr->info()->setHomepage(QString().fromUtf8(buf));  if(!(buf = ChatCore::getParametr("AboutInfo"  , Hdr->parametrs)).isNull())    usr->info()->setAboutInfo(QString().fromUtf8(buf));  if(!(buf = ChatCore::getParametr("StatusDescription", Hdr->parametrs)).isNull())    usr->info()->setStatusDescription(QString().fromUtf8(buf));//   if(!(buf = ChatCore::getParametr("Gender", Hdr->parametrs)).isNull())//     usr->info()->setGender(QString().fromUtf8(buf).toInt());  usr->info()->setStatus     (Hdr->status);  buf = ChatCore::getParametr("Icon", Hdr->parametrs);  if(!buf.isNull())  {    md5_hash.addData(buf);    usr->info()->setAvatarHash(md5_hash.result());    icon = new QPixmap();    icon->loadFromData(buf);    need_avatar = false;  }  else    icon = usr->info()->avatar();  tmp = drawUsersIcon(icon, usr->info());  usr->setIcon(QIcon(*tmp));  delete tmp;  if(!need_avatar)    delete icon;  buf = ChatCore::getParametr("PhotoOk", Hdr->parametrs);  if(buf.isNull())  {    buf = ChatCore::getParametr("Photo", Hdr->parametrs);    if(!buf.isNull())      usr->info()->setPhoto(buf);    buf = ChatCore::getParametr("PhotoHash", Hdr->parametrs);    usr->info()->setPhotoHash(buf);  }  buf = ChatCore::getParametr("PictureOk", Hdr->parametrs);  if(buf.isNull())  {    buf = ChatCore::getParametr("Picture", Hdr->parametrs);    if(!buf.isNull())      usr->info()->setPicture(buf);    buf = ChatCore::getParametr("PictureHash", Hdr->parametrs);    usr->info()->setPictureHash(buf);  }  if(need_avatar)  {    ChatCore::addParametr("IconHash", usr->info()->avatarHash(), m_parametrs);    emitSomeData(AbstractChatCore::AVATAR_REQUEST, "", Hdr->src_ip);  }  usr->info()->setProgramVerName(Hdr->versionName);  usr->info()->setNickname      (Hdr->name);  usr->info()->setCompName      (Hdr->comp_name);  usr->info()->setStatus        (Hdr->status);  usr->info()->setStatusDescription(QString().fromUtf8(ChatCore::getParametr("StatusDescription", Hdr->parametrs)));  usr->setData(Qt::StatusTipRole,               usr->info()->nickname() + tr(" on ") + usr->info()->compName() + "[" +               QHostAddress(usr->info()->ip()).toString() + "]" + tr(" running QChat ") +               usr->info()->programVerName()              );  usr->setData(Qt::ToolTipRole, usr->info()->statusDescription());}//\*****************************************************************************void ChannelWgt::slot_refreshUL(){  qDebug("\n[ChannelWgt::slot_refreshUL]\n");  mw_usersList->clear();  m_users->disableAll();//   slot_statusRequest();  slot_deepRefreshUL();}//\*****************************************************************************void ChannelWgt::slot_chbxInfChgd(){  if(m_sysMessagesChbx->checkState() == Qt::Checked)  {    mw_chatTextStack->setCurrentIndex(1);    m_displayInfoMsgs = false;  }  if(m_sysMessagesChbx->checkState() == Qt::Unchecked)  {    m_displayInfoMsgs = true;    mw_chatTextStack->setCurrentIndex(0);  }}//\*****************************************************************************void ChannelWgt::sendInfoAnswer(QC_DatagramHeader* Hdr){  uchar photo_ok = 0;  uchar pic_ok   = 0;  QByteArray ba;  if(m_status != Globals::INVISIBLE)  {    UserInfo::myInfo()->setStatus(m_name, m_status);    UserInfo::myInfo()->setStatusDescription(m_name, m_statusWgt->description());    ba = ChatCore::getParametr("PhotoHash"  , Hdr->parametrs);    if(!ba.isEmpty())      photo_ok = UserInfo::myInfo()->photoHash() == ba;    ba = ChatCore::getParametr("PictureHash", Hdr->parametrs);    if(!ba.isEmpty())      pic_ok = UserInfo::myInfo()->pictureHash() == ba;    emit infoAnswer(m_name, Hdr->src_ip, m_type, pic_ok | (2 * photo_ok));  }}//\*****************************************************************************void ChannelWgt::sendStatusAnswer(quint64 uid, bool changed, bool send_icon){  if(m_status != Globals::INVISIBLE)  {    UserInfo::myInfo()->setStatus(m_name, m_status);    UserInfo::myInfo()->setStatusDescription(m_name, m_statusDescription);    if(m_type == 1)    {      emit statusAnswer(m_name, Globals::localhost(), m_type, changed, send_icon);      emit statusAnswer(m_name, m_destUid, m_type, changed, send_icon);    }    else      emit statusAnswer(m_name, uid, m_type, changed, send_icon);  }}//\*****************************************************************************void ChannelWgt::slot_infoRequest(UserWgt* user){  m_parametrs.clear();  if(QFile::exists(user->info()->pictureFilename()))    ChatCore::addParametr("PictureHash", user->info()->pictureHash(), m_parametrs);  if(QFile::exists(user->info()->photoFilename()))    ChatCore::addParametr("PhotoHash"  , user->info()->photoHash()  , m_parametrs);  emit sendSomeData(m_name, user->info()->uid(), AbstractChatCore::INFO_REQUEST, "", m_type, &m_parametrs);}//\*****************************************************************************void ChannelWgt::slot_statusChanged(){  UserInfo::myInfo()->setStatus           (m_name, m_status            = m_statusWgt->status());  UserInfo::myInfo()->setStatusDescription(m_name, m_statusDescription = m_statusWgt->description());  sendStatusAnswer(QChatSettings::settings()->broadcast().toIPv4Address(), m_oldStatus != m_status);  m_oldStatus = m_status;}//\*****************************************************************************void ChannelWgt::slot_startStatusChangedTimer(){  m_statusChangedTimer->setInterval(1 * 1000);  m_statusChangedTimer->setSingleShot(true);  m_statusChangedTimer->start();}void ChannelWgt::getSmilesFromData(QC_DatagramHeader * Hdr) // TODO rewrite{  m_smilesFromSender->clear();  QFile file;  QString fname;  QString str;  QByteArray barr_hash;  QByteArray barr1;  QByteArray barr = ChatCore::getParametr("Smiles", Hdr->parametrs);  QByteArray sm_ba;  QCryptographicHash md5_hash(QCryptographicHash::Md5);  int len;  qDebug("[ChannelWgt::getSmilesFromData]: Smiles = %s", QString().fromUtf8(barr).toLocal8Bit().data());  for(int i = 0; i < barr.size(); i++)  {    sm_ba.clear();    for(; barr.at(i) != 0 && i < barr.size(); i++)      sm_ba.append(barr.at(i));    str = QString().fromUtf8(sm_ba);    qDebug("[ChannelWgt::getSmilesFromData]: str = %s", str.toLocal8Bit().data());    barr1 = ChatCore::getParametr("Smile" + str, Hdr->parametrs);    md5_hash.addData(barr1);    barr_hash = md5_hash.result();    md5_hash.reset();    fname = QDir::tempPath() + "/smile";    fname.append('_');    len = barr_hash.size();    for(int i = 0; i < len; i++)      fname.append(QString::number((uchar)barr_hash.at(i), 16));    file.setFileName(fname);    if(file.open(QIODevice::WriteOnly | QIODevice::Unbuffered))      file.write(barr1);    else      qWarning("[ChannelWgt::getSmilesFromData]: couldn't open file %s for writing", fname.toLocal8Bit().data());    file.close();    m_smilesFromSender->append(Smile(QStringList(str), fname));  }}void ChannelWgt::initChannel(){  emit sendSomeData(m_name, QChatSettings::settings()->broadcast().toIPv4Address(), AbstractChatCore::MSGS_NUM_REQUEST, "", m_type, NULL);  m_msgsReqSent     = QTime::currentTime();  m_msgsReqReceived = m_msgsReqSent;  connect(m_initTimer, SIGNAL(timeout()), this, SLOT(slot_finMsgsHistoryReq()));  m_msgsReqNum = 0;  m_initTimer->setSingleShot(true);  m_initTimer->start(QChatSettings::settings()->historyReqTimeout());  slot_statusRequest();  slot_connected();}void ChannelWgt::rebuildChatText(){  mw_chatText     ->clear();  mw_clearChatText->clear();  for(uint i = 0; i < m_chatMsgs->size(); i++)    addMsg2Chat(m_chatMsgs->msg(i));}void ChannelWgt::slot_finMsgsHistoryReq()

⌨️ 快捷键说明

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