summaryrefslogtreecommitdiff
path: root/noncore/net/opieirc/ircsession.cpp
Unidiff
Diffstat (limited to 'noncore/net/opieirc/ircsession.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/opieirc/ircsession.cpp99
1 files changed, 99 insertions, 0 deletions
diff --git a/noncore/net/opieirc/ircsession.cpp b/noncore/net/opieirc/ircsession.cpp
new file mode 100644
index 0000000..b81038f
--- a/dev/null
+++ b/noncore/net/opieirc/ircsession.cpp
@@ -0,0 +1,99 @@
1#include "ircsession.h"
2#include "ircmessageparser.h"
3#include "ircversion.h"
4
5IRCSession::IRCSession(IRCServer *server) {
6 m_server = server;
7 m_connection = new IRCConnection(m_server);
8 m_parser = new IRCMessageParser(this);
9 connect(m_connection, SIGNAL(messageArrived(IRCMessage *)), this, SLOT(handleMessage(IRCMessage *)));
10 connect(m_parser, SIGNAL(outputReady(IRCOutput)), this, SIGNAL(outputReady(IRCOutput)));
11 connect(m_connection, SIGNAL(outputReady(IRCOutput)), this, SIGNAL(outputReady(IRCOutput)));
12}
13
14IRCSession::~IRCSession() {
15 delete m_parser;
16 delete m_connection;
17}
18
19void IRCSession::beginSession() {
20 m_connection->doConnect();
21}
22
23void IRCSession::join(QString channelname) {
24 m_connection->sendLine("JOIN "+channelname);
25}
26
27void IRCSession::sendMessage(IRCPerson *person, QString message) {
28 m_connection->sendLine("PRIVMSG " + person->nick() + " :" + message);
29}
30
31void IRCSession::sendMessage(IRCChannel *channel, QString message) {
32 m_connection->sendLine("PRIVMSG " + channel->channelname() + " :" + message);
33}
34
35bool IRCSession::isSessionActive() {
36 return m_connection->isConnected();
37}
38
39void IRCSession::endSession() {
40 if (m_connection->isLoggedIn())
41 m_connection->sendLine("QUIT :" APP_VERSION);
42 else
43 m_connection->close();
44}
45
46void IRCSession::part(IRCChannel *channel) {
47 m_connection->sendLine("PART " + channel->channelname() + " :" + APP_VERSION);
48}
49
50
51IRCChannel *IRCSession::getChannel(QString channelname) {
52 QListIterator<IRCChannel> it(m_channels);
53 for (; it.current(); ++it) {
54 if (it.current()->channelname() == channelname) {
55 return it.current();
56 }
57 }
58 return 0;
59}
60
61IRCPerson *IRCSession::getPerson(QString nickname) {
62 QListIterator<IRCPerson> it(m_people);
63 for (; it.current(); ++it) {
64 if (it.current()->nick() == nickname) {
65 return it.current();
66 }
67 }
68 return 0;
69}
70
71void IRCSession::getChannelsByPerson(IRCPerson *person, QList<IRCChannel> &channels) {
72 QListIterator<IRCChannel> it(m_channels);
73 for (; it.current(); ++it) {
74 if (it.current()->getPerson(person->nick()) != 0) {
75 channels.append(it.current());
76 }
77 }
78}
79
80void IRCSession::addPerson(IRCPerson *person) {
81 m_people.append(person);
82}
83
84void IRCSession::addChannel(IRCChannel *channel) {
85 m_channels.append(channel);
86}
87
88void IRCSession::removeChannel(IRCChannel *channel) {
89 m_channels.remove(channel);
90}
91
92void IRCSession::removePerson(IRCPerson *person) {
93 m_people.remove(person);
94}
95
96void IRCSession::handleMessage(IRCMessage *message) {
97 m_parser->parse(message);
98}
99