1 /***************************************************************************
2 * Copyright (C) 2005-2019 by the Quassel Project *
3 * devel@quassel-irc.org *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) version 3. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
19 ***************************************************************************/
21 #include "internalpeer.h"
25 using namespace Protocol;
27 InternalPeer::InternalPeer(QObject* parent)
28 : Peer(nullptr, parent)
30 static bool registered = []() {
31 qRegisterMetaType<QPointer<InternalPeer>>();
32 qRegisterMetaType<Protocol::SyncMessage>();
33 qRegisterMetaType<Protocol::RpcCall>();
34 qRegisterMetaType<Protocol::InitRequest>();
35 qRegisterMetaType<Protocol::InitData>();
40 setFeatures(Quassel::Features{});
43 InternalPeer::~InternalPeer()
50 QString InternalPeer::description() const
52 return tr("internal connection");
55 QString InternalPeer::address() const
57 return tr("internal connection");
60 quint16 InternalPeer::port() const
65 bool InternalPeer::isOpen() const
70 bool InternalPeer::isSecure() const
75 bool InternalPeer::isLocal() const
80 void InternalPeer::close(const QString& reason)
86 int InternalPeer::lag() const
91 ::SignalProxy* InternalPeer::signalProxy() const
96 void InternalPeer::setSignalProxy(::SignalProxy* proxy)
98 if (!proxy && _proxy) {
107 if (proxy && !_proxy) {
113 qWarning() << Q_FUNC_INFO << "Changing the SignalProxy is not supported!";
116 void InternalPeer::setPeer(InternalPeer* peer)
119 selectOverload<const Protocol::SyncMessage&>(&InternalPeer::dispatchMessage),
121 selectOverload<const Protocol::SyncMessage&>(&InternalPeer::handleMessage));
123 selectOverload<const Protocol::RpcCall&>(&InternalPeer::dispatchMessage),
125 selectOverload<const Protocol::RpcCall&>(&InternalPeer::handleMessage));
127 selectOverload<const Protocol::InitRequest&>(&InternalPeer::dispatchMessage),
129 selectOverload<const Protocol::InitRequest&>(&InternalPeer::handleMessage));
131 selectOverload<const Protocol::InitData&>(&InternalPeer::dispatchMessage),
133 selectOverload<const Protocol::InitData&>(&InternalPeer::handleMessage));
135 connect(peer, &Peer::disconnected, this, &InternalPeer::peerDisconnected);
140 void InternalPeer::peerDisconnected()
142 disconnect(sender(), nullptr, this, nullptr);
149 void InternalPeer::dispatch(const SyncMessage& msg)
151 emit dispatchMessage(msg);
154 void InternalPeer::dispatch(const RpcCall& msg)
156 emit dispatchMessage(msg);
159 void InternalPeer::dispatch(const InitRequest& msg)
161 emit dispatchMessage(msg);
164 void InternalPeer::dispatch(const InitData& msg)
166 emit dispatchMessage(msg);
169 void InternalPeer::handleMessage(const Protocol::SyncMessage& msg)
174 void InternalPeer::handleMessage(const Protocol::RpcCall& msg)
179 void InternalPeer::handleMessage(const Protocol::InitRequest& msg)
184 void InternalPeer::handleMessage(const Protocol::InitData& msg)
190 void InternalPeer::handle(const T& msg)
192 static auto setSourcePeer = [](Peer* peer) {
193 auto p = SignalProxy::current();
195 p->setSourcePeer(peer);
201 setSourcePeer(nullptr);