Make protocol messages structs instead of classes
[quassel.git] / src / common / signalproxy.cpp
index 4cadfa8..418fdec 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2012 by the Quassel Project                        *
+ *   Copyright (C) 2005-2013 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
  ***************************************************************************/
 
-#include "signalproxy.h"
-
-#include <QObject>
-#include <QIODevice>
-#include <QAbstractSocket>
+#include <QCoreApplication>
 #include <QHostAddress>
-#include <QHash>
-#include <QMultiHash>
-#include <QList>
-#include <QSet>
-#include <QDebug>
 #include <QMetaMethod>
 #include <QMetaProperty>
-#include <QRegExp>
+#include <QThread>
+
 #ifdef HAVE_SSL
-#include <QSslSocket>
+    #include <QSslSocket>
 #endif
-#include <QThread>
-#include <QTime>
-#include <QEvent>
-#include <QCoreApplication>
 
+#include "signalproxy.h"
+
+#include "peer.h"
 #include "protocol.h"
 #include "syncableobject.h"
 #include "util.h"
@@ -49,8 +40,8 @@ using namespace Protocol;
 class RemovePeerEvent : public QEvent
 {
 public:
-    RemovePeerEvent(SignalProxy::AbstractPeer *peer) : QEvent(QEvent::Type(SignalProxy::RemovePeerEvent)), peer(peer) {}
-    SignalProxy::AbstractPeer *peer;
+    RemovePeerEvent(Peer *peer) : QEvent(QEvent::Type(SignalProxy::RemovePeerEvent)), peer(peer) {}
+    Peer *peer;
 };
 
 
@@ -257,7 +248,7 @@ void SignalProxy::setMaxHeartBeatCount(int max)
 }
 
 
-bool SignalProxy::addPeer(AbstractPeer *peer)
+bool SignalProxy::addPeer(Peer *peer)
 {
     if (!peer)
         return false;
@@ -300,14 +291,14 @@ void SignalProxy::removeAllPeers()
 {
     Q_ASSERT(proxyMode() == Server || _peers.count() <= 1);
     // wee need to copy that list since we modify it in the loop
-    QSet<AbstractPeer *> peers = _peers;
-    foreach(AbstractPeer *peer, peers) {
+    QSet<Peer *> peers = _peers;
+    foreach(Peer *peer, peers) {
         removePeer(peer);
     }
 }
 
 
-void SignalProxy::removePeer(AbstractPeer *peer)
+void SignalProxy::removePeer(Peer *peer)
 {
     if (!peer) {
         qWarning() << Q_FUNC_INFO << "Trying to remove a null peer!";
@@ -342,7 +333,7 @@ void SignalProxy::removePeer(AbstractPeer *peer)
 
 void SignalProxy::removePeerBySender()
 {
-    removePeer(qobject_cast<SignalProxy::AbstractPeer *>(sender()));
+    removePeer(qobject_cast<Peer *>(sender()));
 }
 
 
@@ -502,7 +493,7 @@ void SignalProxy::stopSynchronize(SyncableObject *obj)
 template<class T>
 void SignalProxy::dispatch(const T &protoMessage)
 {
-    foreach (AbstractPeer *peer, _peers) {
+    foreach (Peer *peer, _peers) {
         if (peer->isOpen())
             peer->dispatch(protoMessage);
         else
@@ -511,30 +502,30 @@ void SignalProxy::dispatch(const T &protoMessage)
 }
 
 
-void SignalProxy::handle(SignalProxy::AbstractPeer *peer, const SyncMessage &syncMessage)
+void SignalProxy::handle(Peer *peer, const SyncMessage &syncMessage)
 {
-    if (!_syncSlave.contains(syncMessage.className()) || !_syncSlave[syncMessage.className()].contains(syncMessage.objectName())) {
-        qWarning() << QString("no registered receiver for sync call: %1::%2 (objectName=\"%3\"). Params are:").arg(syncMessage.className(), syncMessage.slotName(), syncMessage.objectName())
-                   << syncMessage.params();
+    if (!_syncSlave.contains(syncMessage.className) || !_syncSlave[syncMessage.className].contains(syncMessage.objectName)) {
+        qWarning() << QString("no registered receiver for sync call: %1::%2 (objectName=\"%3\"). Params are:").arg(syncMessage.className, syncMessage.slotName, syncMessage.objectName)
+                   << syncMessage.params;
         return;
     }
 
-    SyncableObject *receiver = _syncSlave[syncMessage.className()][syncMessage.objectName()];
+    SyncableObject *receiver = _syncSlave[syncMessage.className][syncMessage.objectName];
     ExtendedMetaObject *eMeta = extendedMetaObject(receiver);
-    if (!eMeta->slotMap().contains(syncMessage.slotName())) {
-        qWarning() << QString("no matching slot for sync call: %1::%2 (objectName=\"%3\"). Params are:").arg(syncMessage.className(), syncMessage.slotName(), syncMessage.objectName())
-                   << syncMessage.params();
+    if (!eMeta->slotMap().contains(syncMessage.slotName)) {
+        qWarning() << QString("no matching slot for sync call: %1::%2 (objectName=\"%3\"). Params are:").arg(syncMessage.className, syncMessage.slotName, syncMessage.objectName)
+                   << syncMessage.params;
         return;
     }
 
-    int slotId = eMeta->slotMap()[syncMessage.slotName()];
+    int slotId = eMeta->slotMap()[syncMessage.slotName];
     if (proxyMode() != eMeta->receiverMode(slotId)) {
         qWarning("SignalProxy::handleSync(): invokeMethod for \"%s\" failed. Wrong ProxyMode!", eMeta->methodName(slotId).constData());
         return;
     }
 
     QVariant returnValue((QVariant::Type)eMeta->returnType(slotId));
-    if (!invokeSlot(receiver, slotId, syncMessage.params(), returnValue)) {
+    if (!invokeSlot(receiver, slotId, syncMessage.params, returnValue)) {
         qWarning("SignalProxy::handleSync(): invokeMethod for \"%s\" failed ", eMeta->methodName(slotId).constData());
         return;
     }
@@ -543,9 +534,9 @@ void SignalProxy::handle(SignalProxy::AbstractPeer *peer, const SyncMessage &syn
         int receiverId = eMeta->receiveMap()[slotId];
         QVariantList returnParams;
         if (eMeta->argTypes(receiverId).count() > 1)
-            returnParams << syncMessage.params();
+            returnParams << syncMessage.params;
         returnParams << returnValue;
-        peer->dispatch(SyncMessage(syncMessage.className(), syncMessage.objectName(), eMeta->methodName(receiverId), returnParams));
+        peer->dispatch(SyncMessage(syncMessage.className, syncMessage.objectName, eMeta->methodName(receiverId), returnParams));
     }
 
     // send emit update signal
@@ -553,57 +544,57 @@ void SignalProxy::handle(SignalProxy::AbstractPeer *peer, const SyncMessage &syn
 }
 
 
-void SignalProxy::handle(SignalProxy::AbstractPeer *peer, const InitRequest &initRequest)
+void SignalProxy::handle(Peer *peer, const InitRequest &initRequest)
 {
-   if (!_syncSlave.contains(initRequest.className())) {
+   if (!_syncSlave.contains(initRequest.className)) {
         qWarning() << "SignalProxy::handleInitRequest() received initRequest for unregistered Class:"
-                   << initRequest.className();
+                   << initRequest.className;
         return;
     }
 
-    if (!_syncSlave[initRequest.className()].contains(initRequest.objectName())) {
+    if (!_syncSlave[initRequest.className].contains(initRequest.objectName)) {
         qWarning() << "SignalProxy::handleInitRequest() received initRequest for unregistered Object:"
-                   << initRequest.className() << initRequest.objectName();
+                   << initRequest.className << initRequest.objectName;
         return;
     }
 
-    SyncableObject *obj = _syncSlave[initRequest.className()][initRequest.objectName()];
-    peer->dispatch(InitData(initRequest.className(), initRequest.objectName(), initData(obj)));
+    SyncableObject *obj = _syncSlave[initRequest.className][initRequest.objectName];
+    peer->dispatch(InitData(initRequest.className, initRequest.objectName, initData(obj)));
 }
 
 
-void SignalProxy::handle(SignalProxy::AbstractPeer *peer, const InitData &initData)
+void SignalProxy::handle(Peer *peer, const InitData &initData)
 {
     Q_UNUSED(peer)
 
-    if (!_syncSlave.contains(initData.className())) {
+    if (!_syncSlave.contains(initData.className)) {
         qWarning() << "SignalProxy::handleInitData() received initData for unregistered Class:"
-                   << initData.className();
+                   << initData.className;
         return;
     }
 
-    if (!_syncSlave[initData.className()].contains(initData.objectName())) {
+    if (!_syncSlave[initData.className].contains(initData.objectName)) {
         qWarning() << "SignalProxy::handleInitData() received initData for unregistered Object:"
-                   << initData.className() << initData.objectName();
+                   << initData.className << initData.objectName;
         return;
     }
 
-    SyncableObject *obj = _syncSlave[initData.className()][initData.objectName()];
-    setInitData(obj, initData.initData());
+    SyncableObject *obj = _syncSlave[initData.className][initData.objectName];
+    setInitData(obj, initData.initData);
 }
 
 
-void SignalProxy::handle(SignalProxy::AbstractPeer *peer, const RpcCall &rpcCall)
+void SignalProxy::handle(Peer *peer, const RpcCall &rpcCall)
 {
     Q_UNUSED(peer)
 
     QObject *receiver;
     int methodId;
-    SlotHash::const_iterator slot = _attachedSlots.constFind(rpcCall.slotName());
-    while (slot != _attachedSlots.constEnd() && slot.key() == rpcCall.slotName()) {
+    SlotHash::const_iterator slot = _attachedSlots.constFind(rpcCall.slotName);
+    while (slot != _attachedSlots.constEnd() && slot.key() == rpcCall.slotName) {
         receiver = (*slot).first;
         methodId = (*slot).second;
-        if (!invokeSlot(receiver, methodId, rpcCall.params())) {
+        if (!invokeSlot(receiver, methodId, rpcCall.params)) {
             ExtendedMetaObject *eMeta = extendedMetaObject(receiver);
             qWarning("SignalProxy::handleSignal(): invokeMethod for \"%s\" failed ", eMeta->methodName(methodId).constData());
         }
@@ -772,7 +763,7 @@ void SignalProxy::updateSecureState()
     bool wasSecure = _secure;
 
     _secure = !_peers.isEmpty();
-    foreach (const AbstractPeer *peer,  _peers) {
+    foreach (const Peer *peer,  _peers) {
         _secure &= peer->isSecure();
     }