Exemplo n.º 1
0
  void Irc::Parse(const QString& line)
  {
    Message msg(line, m_bot);
    qDebug() << line;
    QString cmd = msg.GetCommand();
    map<QString, list<Event> > events;

    // Should be 001-004
    if (cmd == "001")
    {
      Event evt(Event::CONNECT, msg);
      events["irc.connect"].push_back(evt);
    }
    else if (cmd == "NOTICE")
    {
      Event evt(Event::NOTICE, msg);
      events["irc.notice"].push_back(evt);
    }
    else if (cmd == "PRIVMSG")
    {
      Event evt(Event::OTHER, msg);
      events["irc.privmsg"].push_back(evt);
    }
    else
    {
      Event evt(Event::OTHER, msg);
      QString key = "irc." + msg.GetCommand().toLower();
      events[key].push_back(evt);
    }

    EventDispatcher* ed = m_bot->GetEventDispatcher();
    map<QString, list<Event> >::iterator mi;
    list<Event>::iterator li;
    for (mi = events.begin(); mi != events.end(); ++mi)
    {
      for (li = mi->second.begin(); li != mi->second.end(); ++li)
      {
        ed->Notify(mi->first.toStdString(), *li);
      }
    }
  }