source: pacpusframework/branches/2.0-beta1/include/Pacpus/kernel/inputOutputBase.h@ 96

Last change on this file since 96 was 96, checked in by morasjul, 11 years ago

2.0 minor fixs

  • Property svn:executable set to *
File size: 3.5 KB
Line 
1#ifndef IN_OUT_BASE_H
2#define IN_OUT_BASE_H
3
4#include <Pacpus/kernel/pacpus.h>
5#include <Pacpus/kernel/ConnectionBase.h>
6#include <Pacpus/kernel/PacpusEvent.h>
7
8#include <QApplication>
9#include <typeinfo>
10#include <QList>
11#include <QStringList>
12
13namespace pacpus {
14
15class ComponentBase;
16
17class PACPUSLIB_API AbstractInterface : public QObject
18{
19 Q_OBJECT
20protected:
21 AbstractInterface(QString name, ComponentBase * component, QObject * parent = 0):_name(name),_component(component),QObject(parent) {}
22 ~AbstractInterface(){}
23public:
24 QString getSignature();
25 QString getName() {return _name;}
26 virtual QString getDataType() = 0;
27 ComponentBase * getComponent() {return _component;}
28
29 void addConnection(ConnectionBase connection) { _connection.append(connection);}
30 bool removeConnection(ConnectionBase connection) { return _connection.removeOne(connection);}
31
32protected:
33 QString _name;
34 ComponentBase * _component;
35 QList<ConnectionBase> _connection;
36};
37
38class PACPUSLIB_API InputInterfaceBase : public AbstractInterface
39{
40 Q_OBJECT
41protected:
42 InputInterfaceBase(QString name, ComponentBase * component, QObject * parent = 0):AbstractInterface(name,component,parent) {}
43
44public:
45 //InputInterfaceBase(QString name, ComponentBase * component,int a, QObject * parent = 0):AbstractInterface(name,component,parent) {} // TODO add ctor with function pointer
46
47 virtual ~InputInterfaceBase(){}
48
49 virtual void customEvent(QEvent* e) {
50
51 //if(event->type())
52 //TODO get event Type anf call callback function
53
54 QByteArray buf;
55 QDataStream out(&buf,QIODevice::WriteOnly);
56 out << e;
57 // Callback QByteArray
58 }
59
60 virtual PacpusEvent getEventTemplate() {return PacpusEvent(GENERIC_EVENT);} // TODO check ??
61
62};
63
64class PACPUSLIB_API OutputInterfaceBase: public AbstractInterface
65{
66 Q_OBJECT
67
68public:
69 OutputInterfaceBase(QString name, ComponentBase * component, QObject * parent = 0):AbstractInterface(name,component,parent) {}
70
71 virtual ~OutputInterfaceBase(){}
72
73 QStringList getInputConnectedList() {
74 QStringList list;
75 for(QList<ConnectionBase>::iterator it = _connection.begin(); it!=_connection.end(); ++it)
76 list.append(it->getInterface()->getName());
77 return list;
78 }
79
80 void send(/*const*/ QByteArray & data) {
81
82 // TODo getEvent
83 //PacpusEvent& event = _connection.at(0).getInterface()->
84 QDataStream in(&data,QIODevice::ReadOnly);
85 //in >> event;
86
87 //for(QList<ConnectionBase>::iterator it = _connection.begin(); it!=_connection.end(); ++it)
88 // QApplication::postEvent(it->getInterface(),&event,it->getPriority());
89
90
91 }
92
93};
94
95static bool connectInterface(OutputInterfaceBase* out, InputInterfaceBase * in, int priority)
96{
97 if(out->getDataType() == in->getDataType() || out->getDataType() == QString(typeid(QByteArray).name()) || in->getDataType() == QString(typeid(QByteArray).name())) {
98
99 // Add connection
100 out->addConnection(ConnectionBase(in,priority)); // TODO make connect function
101 in->addConnection(ConnectionBase(out,priority));
102 //LOG_INFO("connection : Output " << out->getSignature() << " => Input " << in->getSignature());
103 return true;
104 } else {
105 //LOG_WARN("connecting " << out->getSignature() << ":" << out->getDataType() << " to " << in->getSignature() << ":" << in->getDataType() << " failled : DataType incompatible " << QString(typeid(QByteArray).name()));
106 return false;
107 }
108}
109
110} // namespace pacpus
111
112#endif // IN_OUT_BASE_H
Note: See TracBrowser for help on using the repository browser.