std::vector<LogMessage> LogMessage::parseLogText(const std::string& logText) { std::vector<LogMessage> result; std::string text = logText; // get preceeding comments boost::smatch matches; boost::regex messageRegex("\\[([^\\]]*)\\]\\s*<([\\-0-9]+)>([^\\[]*)(.*)"); while(boost::regex_search(text, matches, messageRegex)){ std::string channel(matches[1].first, matches[1].second); boost::trim(channel); std::string levelString(matches[2].first, matches[2].second); boost::trim(levelString); std::string message(matches[3].first, matches[3].second); boost::trim(message); std::string remainingText(matches[4].first, matches[4].second); boost::trim(remainingText); int level = boost::lexical_cast<int>(levelString); result.push_back(LogMessage((LogLevel)level, channel, message)); // reduce the parsed text text = remainingText; } return result; }
// This function gets called whenever the chat server has sent us some text: void MainWindow::readyRead() { // We'll loop over every (complete) line of text that the server has sent us: while(socket->canReadLine()) { // Here's the line the of text the server sent us (we use UTF-8 so // that non-English speakers can chat in their native language) QString line = QString::fromUtf8(socket->readLine()).trimmed(); // These two regular expressions describe the kinds of messages // the server can send us: // Normal messges look like this: "username:The message" QRegExp messageRegex("^([^:]+):(.*)$"); // Any message that starts with "/users:" is the server sending us a // list of users so we can show that list in our GUI: QRegExp usersRegex("^/users:(.*)$"); // Is this a users message: if(usersRegex.indexIn(line) != -1) { // If so, udpate our users list on the right: QStringList users = usersRegex.cap(1).split(","); userListWidget->clear(); foreach(QString user, users) { new QListWidgetItem(QPixmap(":/user.png"), user, userListWidget); userListWidget->sortItems(Qt::AscendingOrder); } }
void MainWindow::readyRead() { while(socket->hasPendingDatagrams()) { QByteArray buffer; buffer.resize(socket->pendingDatagramSize()); QHostAddress sender; quint16 port; socket->readDatagram(buffer.data(), buffer.size(), &sender, &port); QString line = QString::fromUtf8(buffer).trimmed(); QRegExp messageRegex("^([^:]+):(.*)$"); if (messageRegex.indexIn(line) != -1) { QString user = messageRegex.cap(1); QString message = messageRegex.cap(2); bool newbee = true; for (int i = 0; i < listWidget->count(); i++) if (listWidget->item(i)->text() == user) { newbee = false; break; } if (newbee){ listWidget->addItem(user); } if(message == "is online"||message == "is offline") chat_log->append("<" + user + "> " + message); else chat_log->append("<" + user + ">: " + message); } } }
// Called when the chat server sends the client some text void MainWindow::readyRead() { while(socket->canReadLine()) { // TODO Handle Error QString line = QString::fromUtf8(socket->readLine()).trimmed(); // Regex to describe normal messages // "username:message" QRegExp messageRegex("^([^:]+):(.*)$"); // Regex to describe a user for the user list // Starts with "/users:" QRegExp usersRegex("^/users:(.*)$"); if(usersRegex.indexIn(line) != -1) { // Update the users list QStringList users = usersRegex.cap(1).split(","); userListWidget->clear(); foreach(QString user, users) new QListWidgetItem(QPixmap(":/user.png"), user, userListWidget); } else if(messageRegex.indexIn(line) != -1) { // Append the message to the chatbox QString user = messageRegex.cap(1); QString message = messageRegex.cap(2); roomTextEdit->append("<b>" + user + "</b>: " + message); } } }
void MainWindow::readyRead() { while(socket->canReadLine()) { QString line = QString::fromUtf8(socket->readLine()).trimmed(); QRegExp messageRegex("^([^:]+):(.*)$"); if(messageRegex.indexIn(line) != -1) { QString user = messageRegex.cap(1); QString message = messageRegex.cap(2); ui->roomTextEdit->append("<b>"+user+"</b>:"+message); } } }
void MainWindow::readyRead() { // We'll loop over every (complete) line of text that the server has sent us: while(socket->canReadLine()) { // Here's the line the of text the server sent us (we use UTF-8 so // that non-English speakers can chat in their native language) QString line = QString::fromUtf8(socket->readLine()).trimmed(); QObject* textedit = Root->findChild<QObject*>("textedit1"); QString text =textedit->property("text").toString(); QRegExp messageRegex("^([^:]+):(.*)$"); QRegExp usersRegex("^/users:(.*)$"); QObject* textinput = Root->findChild<QObject*>("textinput2"); QString str; str=(textinput->property("text")).toString(); // Is this a users message: QString smileok= QString("=)"); QString smilesad= QString("=("); if(usersRegex.indexIn(line) != -1) { } // Is this a normal chat message: else if(messageRegex.indexIn(line) != -1) { if (line.contains(smileok)) { int k = line.indexOf(smileok); line.replace(k,2,"<img src=\":/crazy.gif\"/>"); } if (line.contains(smilesad)) { int k = line.indexOf(smilesad); line.replace(k,2,"<img src=\":/beee.gif\"/>"); } text=text+"\n"+line; textedit->setProperty("text",text); } } }
void MainWindow::readyRead(){ while(socket->canReadLine()){ //sa ovim Utf8 moze da se koriste i nasa slova QString line = QString::fromUtf8(socket->readLine()).trimmed(); //normalne poruke sa servera su "korisnickoime: poruka..." QRegExp messageRegex("^([^:]+):(.*)$"); //poruke servera "/users:..." salju nam korisnike , koje stavljamo u listu QRegExp usersRegex("^/users:(.*)$"); QRegExp usersRegex2("^/users:(.*)$"); if(usersRegex.indexIn(line) != -1) // -1 ako ne nadje { QStringList users = usersRegex.cap(1).split(","); (ui->listWidget)->clear(); //brisem sve korisnike iz liste , zbog update /* int c = ui->listWidget->count(); for(int row = 0; row < c; row++) { delete ui->listWidget->takeItem(0); qDebug() << "count after iteration" << row << "is " << listWidget->count(); } */ foreach(QString user, users) new QListWidgetItem(user, ui->listWidget); //QPixmap(":/user.png"), kao prvi argument za ikonice korisnika } else if(messageRegex.indexIn(line) != -1) { QString user = messageRegex.cap(1); QString message = messageRegex.cap(2); ui->textEdit->append("<b>" + user + "</b>: " + message); } } }