123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- /*=============================================================================
- Library: CTK
- Copyright (c) German Cancer Research Center,
- Division of Medical and Biological Informatics
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- =============================================================================*/
- #include "ctkEventBusImpl_p.h"
- #include <QSetIterator>
- #include "ctkEventHandlerWrapper_p.h"
- #include "ctkBusEvent.h"
- #include "ctkEventDefinitions.h"
- #define ctkEventArgument(type,data) QArgument<type >(#type, data)
- ctkEventBusImpl::ctkEventBusImpl()
- {
- m_EventBusManager = ctkEventBus::ctkEventBusManager::instance();
- }
- void ctkEventBusImpl::postEvent(const ::ctkEvent& event)
- {
- dispatchEvent(event, true);
- }
- void ctkEventBusImpl::sendEvent(const ::ctkEvent& event)
- {
- dispatchEvent(event, false);
- }
- void ctkEventBusImpl::publishSignal(const QObject* publisher, const char* signal, const QString& topic,
- Qt::ConnectionType type)
- {
- Q_UNUSED(type);
- ctkBusEvent *mesbEvent = new ctkBusEvent(topic, ctkEventBus::ctkEventTypeLocal, ctkEventBus::ctkSignatureTypeSignal, const_cast<QObject *>(publisher), signal);
- m_EventBusManager->addEventProperty(*mesbEvent);
- }
- void ctkEventBusImpl::unpublishSignal(const QObject *publisher, const char *signal, const QString &topic)
- {
- Q_UNUSED(publisher)
- Q_UNUSED(signal)
- Q_UNUSED(topic)
- //TODO implement
- }
- qlonglong ctkEventBusImpl::subscribeSlot(const QObject* subscriber, const char* member,
- const ctkDictionary& properties, Qt::ConnectionType type)
- {
- Q_UNUSED(type)
- ctkDictionary toSend(properties);
- QString topic = properties.value(TOPIC).toString();
- toSend.insert(TOPIC, topic);
- toSend.insert(TYPE, ctkEventBus::ctkEventTypeLocal);
- toSend.insert(SIGTYPE, ctkEventBus::ctkSignatureTypeCallback);
- QVariant var;
- var.setValue(const_cast<QObject *>(subscriber));
- toSend.insert(OBJECT, var);
- toSend.insert(SIGNATURE,member);
- ctkBusEvent *mesbEvent = new ctkBusEvent(topic, toSend);
- m_EventBusManager->addEventProperty(*mesbEvent);
- return topic.toLongLong();
- }
- void ctkEventBusImpl::unsubscribeSlot(qlonglong subscriptionId) {
- Q_UNUSED(subscriptionId)
- // @@@@to be implemented
- }
- bool ctkEventBusImpl::updateProperties(qlonglong subscriptionId, const ctkDictionary& properties)
- {
- Q_UNUSED(subscriptionId)
- Q_UNUSED(properties)
- // @@@@to be implemented
- return false;
- }
- void ctkEventBusImpl::dispatchEvent(const ctkEvent& event, bool isAsync)
- {
- Q_UNUSED(isAsync)
- ctkBusEvent *mebEvent = new ctkBusEvent("",ctkEventBus::ctkEventTypeRemote,ctkEventBus::ctkSignatureTypeSignal, this, "no");
- //cycle for all other elements
- QStringList keyList = event.getPropertyNames();
- QStringList::const_iterator constIterator;
- for (constIterator = keyList.constBegin(); constIterator != keyList.constEnd(); ++constIterator) {
- QVariant value = event.getProperty((*constIterator));
- //qDebug() << (*constIterator) << " " << value.toString();
- (*mebEvent)[(*constIterator)] = event.getProperty((*constIterator));
- }
- typedef QList<QGenericArgument> ctkEventArgumentList;
- ctkEventArgumentList list;
- list.append(Q_ARG(QVariantList,event.getProperty("localEvent").toList()));
- list.append(Q_ARG(QVariantList,event.getProperty("localData").toList()));
- m_EventBusManager->notifyEvent(*mebEvent, &list);
- }
- bool ctkEventBusImpl::createServer(const QString &communication_protocol, unsigned int listen_port) {
- return m_EventBusManager->createServer(communication_protocol,listen_port);
- }
- void ctkEventBusImpl::startListen() {
- m_EventBusManager->startListen();
- }
- bool ctkEventBusImpl::createClient(const QString &communication_protocol, const QString &server_host, unsigned int port) {
- return m_EventBusManager->createClient(communication_protocol,server_host,port);
- }
|