1/****************************************************************************
2**
3** Copyright (C) 2017 Ford Motor Company
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the QtRemoteObjects module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40#include "qremoteobjectregistrysource_p.h"
41#include <QtCore/qdatastream.h>
42
43QT_BEGIN_NAMESPACE
44
45QRegistrySource::QRegistrySource(QObject *parent)
46 : QObject(parent)
47{
48 qRegisterMetaTypeStreamOperators<QRemoteObjectSourceLocation>();
49 qRegisterMetaTypeStreamOperators<QRemoteObjectSourceLocations>();
50}
51
52QRegistrySource::~QRegistrySource()
53{
54}
55
56QRemoteObjectSourceLocations QRegistrySource::sourceLocations() const
57{
58 qCDebug(QT_REMOTEOBJECT) << "sourceLocations property requested on RegistrySource" << m_sourceLocations;
59 return m_sourceLocations;
60}
61
62void QRegistrySource::removeServer(const QUrl &url)
63{
64 for (auto it = m_sourceLocations.begin(), end = m_sourceLocations.end(); it != end; /* erasing */) {
65 if (it.value().hostUrl == url)
66 it = m_sourceLocations.erase(it);
67 else
68 ++it;
69 }
70}
71
72void QRegistrySource::addSource(const QRemoteObjectSourceLocation &entry)
73{
74 qCDebug(QT_REMOTEOBJECT) << "An entry was added to the RegistrySource" << entry;
75 if (m_sourceLocations.contains(akey: entry.first)) {
76 if (m_sourceLocations[entry.first].hostUrl == entry.second.hostUrl)
77 qCWarning(QT_REMOTEOBJECT) << "Node warning: Ignoring Source" << entry.first
78 << "as this Node already has a Source by that name.";
79 else
80 qCWarning(QT_REMOTEOBJECT) << "Node warning: Ignoring Source" << entry.first
81 << "as another source (" << m_sourceLocations[entry.first]
82 << ") has already registered that name.";
83 return;
84 }
85 m_sourceLocations[entry.first] = entry.second;
86 emit remoteObjectAdded(entry);
87}
88
89void QRegistrySource::removeSource(const QRemoteObjectSourceLocation &entry)
90{
91 if (m_sourceLocations.contains(akey: entry.first) && m_sourceLocations[entry.first].hostUrl == entry.second.hostUrl) {
92 m_sourceLocations.remove(akey: entry.first);
93 emit remoteObjectRemoved(entry);
94 }
95}
96
97QT_END_NAMESPACE
98

source code of qtremoteobjects/src/remoteobjects/qremoteobjectregistrysource.cpp