raw messages! Most of the surrounding framework code is just badly hacked though to make
fiddling with the server possible at least.
# Set needed libraries
SET(QT_USE_QTXML true)
+SET(QT_USE_QTNETWORK true)
SET(QT_DONT_USE_QTGUI true) # This is added later if GUI is requested
INCLUDE(${QT_USE_FILE})
SET(core_SRCS logger.cpp quassel.cpp proxy.cpp core.cpp)
-SET(core_HDRS quassel.h proxy.h core.h)
-SET(core_MOCS logger.h)
+SET(core_HDRS quassel.h proxy.h)
+SET(core_MOCS logger.h core.h)
QT4_WRAP_CPP(_MOC ${core_MOCS})
ADD_LIBRARY(core ${_MOC} ${core_SRCS} ${core_HDRS})
***************************************************************************/
#include "core.h"
+#include "server.h"
#include <QSettings>
void Core::init() {
+}
+
+void Core::run() {
+
+ connect(this, SIGNAL(connectToIrc( const QString&, quint16 )), &server, SLOT(connectToIrc( const QString&, quint16 )));
+ connect(&server, SIGNAL(recvLine(const QString &)), this, SIGNAL(outputLine(const QString &)));
+ //connect(
+ server.start();
+ qDebug() << "Core running...";
+
+ exec();
+}
+
+void Core::connectToIrc( const QString &h, quint16 port) {
+ server.connectToIrc(h, port);
+}
+
+void Core::inputLine(const QString &s) {
+ server.putRawLine( s);
+
}
VarMap Core::loadIdentities() {
#include <QString>
#include <QVariant>
+#include "server.h"
+
typedef QMap<QString, QVariant> VarMap;
-class Core {
+class Core : public QThread {
+ Q_OBJECT
public:
+
static void init();
static VarMap loadNetworks();
static void storeNetworks(VarMap);
static VarMap loadIdentities();
static void storeIdentities(VarMap);
+ public slots:
+ void inputLine(const QString &); // temp
+ void connectToIrc(const QString &, quint16 port = 6667);
+
+ signals:
+ void outputLine(const QString &); // temp
+
+ private:
+ void run();
+
+ Server server; // temp
+
};
#endif
ChannelWidget::ChannelWidget(QWidget *parent) : QWidget(parent) {
ui.setupUi(this);
- ui.lineEdit->setText("foobar");
+ //ui.lineEdit->setText("foobar");
- //ui.splitter->
+/* //ui.splitter->
ui.textBrowser->setHtml("[17:21] <em>--> Dante has joined #quassel (~hurz@p1af2242.dip.t-dialin.net)</em><br>"
"[17:21] <em>--> Sput has joined #quassel (~Sput42@vincent.mindpool.net)</em><br>"
"[17:23] <<b>Dante</b>> Das sieht ja soweit schonmal Klasse aus!<br>"
);
ui.listWidget->addItem("@Dante");
ui.listWidget->addItem("@Sput");
+ */
+ //connect(&core, SIGNAL(outputLine( const QString& )), ui.textBrowser, SLOT(insertPlainText(const QString &)));
+ //connect(ui.lineEdit, SIGNAL(
+ connect(&core, SIGNAL(outputLine( const QString& )), ui.textBrowser, SLOT(insertPlainText(const QString &)));
+ connect(ui.lineEdit, SIGNAL(returnPressed()), this, SLOT(enterPressed()));
+ connect(this, SIGNAL(inputLine( const QString& )), &core, SLOT(inputLine( const QString& )));
+ core.start();
+ core.connectToIrc("irc.quakenet.org");
}
+
+void ChannelWidget::enterPressed() {
+ emit inputLine(ui.lineEdit->text());
+ ui.lineEdit->clear();
+}
+
+
\ No newline at end of file
#include "ui_channelwidget.h"
+#include "core.h"
+
class ChannelWidget : public QWidget {
Q_OBJECT
public:
ChannelWidget(QWidget *parent = 0);
+ signals:
+ void inputLine(const QString &);
+
+ private slots:
+ void enterPressed();
+
private:
Ui::ChannelWidget ui;
+
+ Core core;
+ Server server;
};
#include "channelwidget.h"
#include "serverlist.h"
+#include "core.h"
+#include "server.h"
+
MainWin::MainWin() : QMainWindow() {
setWindowTitle("Quassel IRC");
#include "mainwin.h"
#include "messages.h"
+#include "server.h"
int main(int argc, char **argv) {
//Message *m = new Message("admin");
//m->*(m->getCmdHandler())(QStringList(""));
//(m->*(m->getCmdHandler()))(QStringList());
- //exit(0);
-
+
QApplication app(argc, argv);
QApplication::setOrganizationDomain("quassel-irc.org");
SET(network_SRCS messages.cpp builtin_cmds.cpp builtin_handlers.cpp server.cpp)
-SET(network_HDRS messages.h server.h)
-SET(network_MOCS )
+SET(network_HDRS messages.h)
+SET(network_MOCS server.h)
QT4_WRAP_CPP(_MOC ${network_MOCS})
ADD_LIBRARY(network ${_MOC} ${network_SRCS} ${network_HDRS})
QString cmd;
QStringList params;
- Message(QString cmd, QStringList args = 0);
+ Message(QString cmd, QStringList args = QStringList());
virtual ~Message() {};
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
+
+#include "server.h"
+
+Server::Server() {
+ socket = new QTcpSocket();
+
+}
+
+Server::~Server() {
+ delete socket;
+}
+
+void Server::run() {
+ connect(socket, SIGNAL(connected()), this, SLOT(socketConnected()));
+ connect(socket, SIGNAL(disconnected()), this, SLOT(socketDisconnected()));
+ connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(socketError(QAbstractSocket::SocketError)));
+ connect(socket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(socketStateChanged(QAbstractSocket::SocketState)));
+ connect(socket, SIGNAL(readyRead()), this, SLOT(socketHasData()));
+
+ stream.setDevice(socket);
+ //connectToIrc("irc.quakenet.org", 6667);
+ exec();
+}
+
+/*
+QAbstractSocket::SocketState TcpConnection::state( ) const {
+ return socket.state();
+}
+*/
+
+void Server::connectToIrc( const QString & host, quint16 port ) {
+ qDebug() << "Connecting...";
+ socket->connectToHost(host, port);
+}
+
+void Server::disconnectFromIrc( ) {
+ socket->disconnectFromHost();
+}
+
+void Server::putRawLine( const QString &s ) {
+ qDebug() << "Raw line: " << s;
+ stream << s << "\r\n" << flush;
+}
+
+void Server::socketHasData( ) {
+ while(socket->canReadLine()) {
+ QString s = stream.readLine();
+ qDebug() << "Read: " << s;
+ emit recvLine(s + "\n");
+ }
+}
+
+void Server::socketError( QAbstractSocket::SocketError err ) {
+ qDebug() << "Socket Error!";
+ //emit error(err);
+}
+
+void Server::socketConnected( ) {
+ qDebug() << "Socket connected!";
+ //emit connected();
+}
+
+void Server::socketDisconnected( ) {
+ qDebug() << "Socket disconnected!";
+ //emit disconnected();
+}
+
+void Server::socketStateChanged(QAbstractSocket::SocketState state) {
+ qDebug() << "Socket state changed: " << state;
+}
+
+
#include <QtCore>
#include <QtNetwork>
-class Server {
+#define DEFAULT_PORT 6667
+
+/**
+ * This is a server object, managing a single connection to an IRC server, handling the associated channels and so on.
+ * We have this run in its own thread mainly to not block other server objects or the core if something goes wrong,
+ * e.g. if some scripts starts running wild...
+ */
+
+class Server : public QThread {
Q_OBJECT
+ public:
+ Server();
+ ~Server();
+
+ void run();
+
+ // serverState state();
+
+ public slots:
+ // void setServerOptions();
+ void connectToIrc(const QString &host, quint16 port = DEFAULT_PORT);
+ void disconnectFromIrc();
+
+ void putRawLine(const QString &input /*, Buffer *source = 0 */);
+
+ signals:
+ //void outputLine(const QString & /*, Buffer *target = 0 */);
+ void recvLine(const QString&);
+
+ private slots:
+ void socketHasData();
+ void socketError(QAbstractSocket::SocketError);
+ void socketConnected();
+ void socketDisconnected();
+ void socketStateChanged(QAbstractSocket::SocketState);
private:
+ QTcpSocket *socket;
+ QTextStream stream;
};
-class Connection : public QThread {
+/*
+class TcpConnection : public QThread {
+ Q_OBJECT
+ public:
+ void run();
+ QAbstractSocket::SocketState state() const;
-};
+ public slots:
+ void connectToHost(const QString &host, quint16 port = DEFAULT_PORT);
+ void disconnectFromHost();
+ void sendLine(const QString &);
+ signals:
+ void recvLine(QString);
+ void error(QAbstractSocket::SocketError);
+ void connected();
+ void disconnected();
+ void stateChanged(QAbstractSocket::SocketState);
+
+ private:
+ QTcpSocket socket;
+ QTextStream stream;
+};
+*/
#endif