changed structure of the application to be more easily exportable

This commit is contained in:
unknown 2015-05-27 16:54:48 +02:00
parent a61b2ba603
commit a0aca93799
9 changed files with 131 additions and 103 deletions

3
.gitignore vendored
View File

@ -3,4 +3,5 @@ debug/*
release/* release/*
*.user *.user
*.Debug *.Debug
*.Release *.Release
Makefile

View File

@ -10,19 +10,20 @@ TARGET = SparrowBot
TEMPLATE = app TEMPLATE = app
CONFIG += c++11 CONFIG += c++11
SOURCES += main.cpp\ SOURCES += mainwindow.cpp \
mainwindow.cpp \
sparrowbot.cpp \
socketirc.cpp \ socketirc.cpp \
message.cpp \ message.cpp \
user.cpp \ user.cpp \
prompt.cpp prompt.cpp \
ircbot.cpp \
botapp.cpp
HEADERS += mainwindow.h \ HEADERS += mainwindow.h \
sparrowbot.h \
socketirc.h \ socketirc.h \
message.h \ message.h \
user.h \ user.h \
prompt.h prompt.h \
ircbot.h \
botapp.h
FORMS += mainwindow.ui FORMS += mainwindow.ui

72
botapp.cpp Normal file
View File

@ -0,0 +1,72 @@
#include "botapp.h"
BotApp::BotApp(int argc, char** argv) :
nogui(false),
server("irc.freenode.net"),
port(6667),
nick("SparrowBotDebug"),
chan("epicsparrow")
{
// parsing arguments
for(int i=1; i<argc; ++i)
{
QString str = QString(argv[i]);
if(str.compare("-nogui") == 0)
nogui = true;
else if(str.contains('='))
{
QStringList argList = str.split('=');
if(argList.size() == 2)
{
QString key = argList.at(0);
if(key.compare("server") == 0)
server = argList.at(1);
else if(key.compare("port") == 0)
port = argList.at(1).toInt();
else if(key.compare("nick") == 0)
nick = argList.at(1);
else if(key.compare("chan") == 0)
chan = argList.at(1);
}
}
}
sock = new SocketIRC(server, port);
bot = new IRCBot(nick, chan);
if(nogui)
coreApp = new QCoreApplication(argc, argv);
else
coreApp = new QApplication(argc, argv);
QObject::connect(sock, SIGNAL(receivedMsg(QString)), bot, SLOT(receiveMsg(QString)));
QObject::connect(bot, SIGNAL(sendMsg(QString)), sock, SLOT(sendMsg(QString)));
QObject::connect(coreApp, SIGNAL(aboutToQuit()), bot, SLOT(disconnect()));
}
BotApp::~BotApp()
{
delete(sock);
delete(bot);
if(!nogui)
delete(window);
}
int BotApp::exec()
{
if(!nogui)
{
window = new MainWindow();
QObject::connect(sock, SIGNAL(receivedMsg(QString)), window->getConsole(), SLOT(append(QString)));
QObject::connect(bot, SIGNAL(sendMsg(QString)), window->getConsole(), SLOT(append(QString)));
QObject::connect(window->getPrompt(), SIGNAL(sendMsg(QString)), sock, SLOT(sendMsg(QString)));
QObject::connect(window->getPrompt(), SIGNAL(returnPressed()), window->getPrompt(), SLOT(confirmationPerformed()));
window->show();
}
return sock->connectToServer(coreApp);
}
int main(int argc, char *argv[])
{
BotApp app = BotApp(argc, argv);
return app.exec();
}

28
botapp.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef BOTAPP_H
#define BOTAPP_H
#include "mainwindow.h"
#include "socketirc.h"
#include "ircbot.h"
#include <QApplication>
class BotApp
{
bool nogui = false;
QString server = "irc.freenode.net";
int port = 6667;
QString nick = "SparrowBotDebug";
QString chan = "epicsparrow";
SocketIRC* sock;
IRCBot* bot;
QCoreApplication* coreApp;
MainWindow* window;
public:
BotApp(int argc, char** argv);
~BotApp();
int exec();
};
#endif // BOTAPP_H

View File

@ -1,11 +1,11 @@
#include "sparrowbot.h" #include "ircbot.h"
#include <iostream> #include <iostream>
#include <stdio.h> #include <stdio.h>
#include <QStringList> #include <QStringList>
using namespace std; using namespace std;
void SparrowBot::receiveMsg(QString str) void IRCBot::receiveMsg(QString str)
{ {
Message msg = Message(str, &users); Message msg = Message(str, &users);
@ -31,7 +31,7 @@ void SparrowBot::receiveMsg(QString str)
} }
} }
void SparrowBot::handleMessage(Message msg) void IRCBot::handleMessage(Message msg)
{ {
// si la ligne est un message // si la ligne est un message
if(msg.command.compare(QString("PRIVMSG"), Qt::CaseInsensitive) == 0) if(msg.command.compare(QString("PRIVMSG"), Qt::CaseInsensitive) == 0)
@ -105,42 +105,42 @@ void SparrowBot::handleMessage(Message msg)
} }
} }
QString SparrowBot::pong(QString target) QString IRCBot::pong(QString target)
{ {
return QString("PONG :%1").arg(target); return QString("PONG :%1").arg(target);
} }
QString SparrowBot::join(QString theChan) QString IRCBot::join(QString theChan)
{ {
return QString("JOIN #%1").arg(theChan); return QString("JOIN #%1").arg(theChan);
} }
QString SparrowBot::whois(QString nick) QString IRCBot::whois(QString nick)
{ {
return QString("WHOIS %1").arg(nick); return QString("WHOIS %1").arg(nick);
} }
QString SparrowBot::say(QString str) QString IRCBot::say(QString str)
{ {
return QString("PRIVMSG #%1 :%2").arg(chan).arg(str); return QString("PRIVMSG #%1 :%2").arg(chan).arg(str);
} }
QString SparrowBot::privateSay(QString str, QString target) QString IRCBot::privateSay(QString str, QString target)
{ {
return QString("PRIVMSG %1 :%2").arg(target).arg(str); return QString("PRIVMSG %1 :%2").arg(target).arg(str);
} }
QString SparrowBot::action(QString str) QString IRCBot::action(QString str)
{ {
return QString("PRIVMSG #%1 :\001ACTION %2\001").arg(chan).arg(str); return QString("PRIVMSG #%1 :\001ACTION %2\001").arg(chan).arg(str);
} }
QString SparrowBot::quit(QString str) QString IRCBot::quit(QString str)
{ {
return QString("QUIT :%1").arg(str); return QString("QUIT :%1").arg(str);
} }
void SparrowBot::disconnect() void IRCBot::disconnect()
{ {
emit sendMsg(quit("I'll be back")); emit sendMsg(quit("I'll be back"));
} }

View File

@ -1,11 +1,11 @@
#ifndef SPARROWBOT_H #ifndef IRCBOT_H
#define SPARROWBOT_H #define IRCBOT_H
#include "user.h" #include "user.h"
#include "message.h" #include "message.h"
#include <QObject> #include <QObject>
class SparrowBot : public QObject class IRCBot : public QObject
{ {
Q_OBJECT Q_OBJECT
@ -17,11 +17,12 @@ class SparrowBot : public QObject
UserList users; UserList users;
public: public:
SparrowBot(QString nick_, QString chan_) : nick(nick_), chan(chan_), status(OFFLINE) {} IRCBot(QString nick_, QString chan_) : nick(nick_), chan(chan_), status(OFFLINE) {}
private: private:
void handleMessage(Message msg); void handleMessage(Message msg);
protected:
// IRC commands // IRC commands
QString pong(QString target); QString pong(QString target);
QString join(QString theChan); QString join(QString theChan);
@ -39,4 +40,4 @@ signals:
void sendMsg(QString msg); void sendMsg(QString msg);
}; };
#endif // SPARROWBOT_H #endif // IRCBOT_H

View File

@ -1,75 +0,0 @@
#include "mainwindow.h"
#include "socketirc.h"
#include "sparrowbot.h"
#include <QApplication>
int main(int argc, char *argv[])
{
bool nogui = false;
QString server = "irc.freenode.net";
int port = 6667;
QString nick = "SparrowBotDebug";
QString chan = "epicsparrow";
// parsing arguments
for(int i=1; i<argc; ++i)
{
QString str = QString(argv[i]);
if(str.compare("-nogui") == 0)
nogui = true;
else if(str.contains('='))
{
QStringList argList = str.split('=');
if(argList.size() == 2)
{
QString key = argList.at(0);
if(key.compare("server") == 0)
server = argList.at(1);
else if(key.compare("port") == 0)
port = argList.at(1).toInt();
else if(key.compare("nick") == 0)
nick = argList.at(1);
else if(key.compare("chan") == 0)
chan = argList.at(1);
}
}
}
// create the socket
SocketIRC sock(server, port);
// create the bot
SparrowBot* bot = new SparrowBot(nick, chan);
// connect the bot to the socket
QObject::connect(&sock, SIGNAL(receivedMsg(QString)), bot, SLOT(receiveMsg(QString)));
QObject::connect(bot, SIGNAL(sendMsg(QString)), &sock, SLOT(sendMsg(QString)));
// set up UI
if(!nogui)
{
QApplication app(argc, argv);
// init window
MainWindow w;
QObject::connect(&sock, SIGNAL(receivedMsg(QString)), w.getConsole(), SLOT(append(QString)));
QObject::connect(bot, SIGNAL(sendMsg(QString)), w.getConsole(), SLOT(append(QString)));
QObject::connect(w.getPrompt(), SIGNAL(sendMsg(QString)), &sock, SLOT(sendMsg(QString)));
QObject::connect(w.getPrompt(), SIGNAL(returnPressed()), w.getPrompt(), SLOT(confirmationPerformed()));
w.show();
QObject::connect(&app, SIGNAL(aboutToQuit()), bot, SLOT(disconnect()));
sock.connectToServer(&app);
}
else
{
QCoreApplication coreApp(argc, argv);
QObject::connect(&coreApp, SIGNAL(aboutToQuit()), bot, SLOT(disconnect()));
sock.connectToServer(&coreApp);
}
delete(bot);
return 0;
}

View File

@ -20,7 +20,7 @@ void SocketIRC::sendMsg(QString msg)
sock.flush(); sock.flush();
} }
void SocketIRC::connectToServer(QCoreApplication* app_) int SocketIRC::connectToServer(QCoreApplication* app_)
{ {
app = app_; app = app_;
@ -34,9 +34,9 @@ void SocketIRC::connectToServer(QCoreApplication* app_)
if(app != NULL) if(app != NULL)
app->exit(); app->exit();
else else
exit(0); return 0;
} }
app->exec(); return app->exec();
} }
void SocketIRC::readMsg() void SocketIRC::readMsg()

View File

@ -16,7 +16,7 @@ public:
SocketIRC(QString server_, int port_); SocketIRC(QString server_, int port_);
void setServer(QString server_); void setServer(QString server_);
void setPort(int port_); void setPort(int port_);
void connectToServer(QCoreApplication* app_); int connectToServer(QCoreApplication* app_);
private: private: