Files
SOM/plugins/IrcClientPlugin/client.cpp
2025-11-12 00:23:19 +00:00

184 lines
3.9 KiB
C++

#include "client.h"
//#include <QtDebug>
Client::Client(QObject *parent) :
QObject(parent)
{
_socket = new QSslSocket(this);
// We ignore SSL errors since most IRC servers uses invalid certificates.
connect(_socket, SIGNAL(sslErrors(QList<QSslError>)), _socket, SLOT(ignoreSslErrors()));
connect(_socket, SIGNAL(connected()), SLOT(connectionEstablished()));
connect(_socket, SIGNAL(readyRead()), SLOT(readData()));
// Send messages to dispatching.
connect(this, SIGNAL(ReceivedMessage(Message)), SLOT(dispatchMessage(Message)));
}
Client::~Client()
{
}
void Client::sendNick(const QString &nickname)
{
writeLine(QString("NICK %1").arg(nickname));
// We set it here to keep track of it.
_nickname = nickname;
}
void Client::sendUser(const QString &username, const QString &realname, const QString &hostname)
{
writeLine(QString("USER %1 %1 %2 :%3").arg(username).arg(hostname).arg(realname));
}
void Client::sendJoin(const QString &channel)
{
writeLine(QString("JOIN %1").arg(channel));
}
void Client::sendQuit(const QString &message)
{
writeLine(QString("QUIT :%1").arg(message));
}
void Client::sendPong(const QString &message)
{
writeLine(QString("PONG :%1").arg(message));
}
void Client::sendRaw(const QString &message)
{
writeLine(message);
}
void Client::sendPrivmsg(const QString &target, const QString &text)
{
writeLine(QString("PRIVMSG %1 :%2").arg(target).arg(text));
}
void Client::didReceivePrivmsg(const Hostmask &hostmask, const QString &target, const QString &text)
{
emit PrivmsgReceived(hostmask, target, text);
}
void Client::didReceiveNamesList(const QString &text)
{
emit NamesListReceived(text);
}
void Client::didReceiveQuitMsg(const Hostmask& hostmask, const QString& target, const QString& text)
{
emit QuitMsgReceived(hostmask, target, text);
}
void Client::didReceiveTopic(const Hostmask& hostmask, const QString& target, const QString& text)
{
emit TopicReceived(hostmask, target, text);
}
void Client::didReceiveJoinMsg(const Hostmask &hostmask, const QString &target, const QString &text)
{
emit JoinMsgReceived(hostmask, target, text);
}
void Client::connectToServer()
{
_socket->connectToHost(_server_hostname, _server_port);
}
void Client::writeLine(const QString &line)
{
qDebug() << "Send:" << line;
_socket->write(QString("%1\r\n").arg(line).toUtf8());
}
void Client::connectionEstablished()
{
qDebug() << "Connection Established";
sendNick(_nickname);
sendUser(_username, _realname, _socket->peerName());
emit Connected();
}
void Client::readData()
{
while (_socket->canReadLine())
{
QString line = QString::fromUtf8(_socket->readLine());
line.remove("\r\n");
qDebug() << "Recv:" << line;
emit ReceivedMessage(Message::parse(line));
}
}
void Client::registerMessageHandler(const QString& command, MessageHandler* handler)
{
_message_handlers[command.toLower()].append(handler);
handler->setParent(this);
}
void Client::dispatchMessage(const Message& message)
{
foreach (MessageHandler* handler, _message_handlers[message.getCommand().toLower()])
{
handler->handle(this, message);
}
}
void Client::setServerHostname(const QString &hostname)
{
_server_hostname = hostname;
}
void Client::setServerPort(quint16 port)
{
_server_port = port;
}
QString Client::getServerHostname() const
{
return _server_hostname;
}
quint16 Client::getServerPort() const
{
return _server_port;
}
QString Client::getNickname() const
{
return _nickname;
}
QString Client::getUsername() const
{
return _nickname;
}
QString Client::getRealname() const
{
return _realname;
}
void Client::setNickname(const QString &nickname)
{
_nickname = nickname;
}
void Client::setUsername(const QString &username)
{
_username = username;
}
void Client::setRealname(const QString &realname)
{
_realname = realname;
}