Changeset 206 in pacpusframework for trunk/include/Pacpus/kernel/InputOutputInterface.h


Ignore:
Timestamp:
10/30/13 12:26:34 (11 years ago)
Author:
Marek Kurdej
Message:

Major: cleaned connection interfaces.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/Pacpus/kernel/InputOutputInterface.h

    r202 r206  
    2323        : InputInterfaceBase(name, component, component)
    2424        , method(processMethod)
    25     {}
     25    {
     26    }
    2627
    2728    ~InputInterface()
    28     {}
     29    {
     30    }
    2931
    3032    std::size_t getDataSize() const
     
    3941
    4042    // FIXME: what's the purpose of this function?
    41     PacpusEvent * getEventTemplate()
    42     {
    43         return new PacpusTypedEvent<T>(TYPED_EVENT);
    44     }
     43    //PacpusEvent * getEventTemplate()
     44    //{
     45    //    return new PacpusTypedEvent<T>(TYPED_EVENT);
     46    //}
    4547
    4648    // FIXME: what's the purpose of this function?
    4749    void customEvent(QEvent * event)
    4850    {
    49         // TODO check component state started
    50         //if (_component) get state
     51        // check that component has been started
     52        if ((NULL == getComponent()) || (!getComponent()->isActive())) {
     53            LOG_DEBUG("component is not active");
     54            return;
     55        }
     56       
     57        LOG_DEBUG("Receiver: " << getSignature());
     58
     59        //PacpusTypedEvent<T> * typedEvent = dynamic_cast<PacpusTypedEvent<T> *>(event);
     60        PacpusEvent * pacpusEvent = dynamic_cast<PacpusEvent *>(event);
     61        if (!pacpusEvent) {
     62            LOG_WARN("dynamic_cast failed: not a PacpusEvent");
     63            return;
     64        }
     65        PacpusTypedEvent<T> * typedEvent = dynamic_cast<PacpusTypedEvent<T> *>(pacpusEvent);
     66        if (!typedEvent) {
     67            LOG_WARN("dynamic_cast failed: incompatible event types");
     68            return;
     69        }
     70
    5171        switch (event->type()) {
    5272        case TYPED_EVENT:
    53             {
    54             PacpusTypedEvent<T> * typedEvent = dynamic_cast<PacpusTypedEvent<T> *> (event);
    55 
    56             LOG_DEBUG("Receiver: " << getSignature());
    57 
    58             if (typedEvent->timerange() < 500 && readingMode() == TimeBounded) {
     73            if (TimeBounded == readingMode() && typedEvent->timerange() < 500) {
    5974                LOG_WARN("Incorrect TimeRange (0), switch to NeverSkip");
    6075                readingMode() = NeverSkip;
     
    6378            switch (readingMode()) {
    6479            case TimeBounded:
    65 
    6680                if (road_time() - typedEvent->time() > typedEvent->timerange()) {
    67                     LOG_DEBUG("Data skipped, receiver: " << this->getSignature());
     81                    LOG_TRACE("Data skipped, receiver: " << this->getSignature());
    6882                    break;
    6983                }
     
    7387
    7488            case GetLast:
    75 
    7689                (dynamic_cast<C*>(component())->*method)(typedEvent->data());
    7790                // delete all remaining events
     
    8598            default:
    8699                LOG_WARN("Unknown reading mode " << readingMode());
     100                break;
    87101            }
    88102            break;
    89         }
    90103
    91104        // Add here new event type if needed
     
    95108            break;
    96109        }
    97     event->accept();
     110        event->accept();
    98111    }
    99112
    100113    // TODO for Pulling mode (not yet implemented !!!)
    101     T & getData() {
     114    T & getData()
     115    {
    102116        T data;
    103117        // TODO ask output data;
    104 
    105118        return data;
    106119    }
     
    125138    {}
    126139
    127     // Used by Components to send data througth typed output
     140    /// Send data through a typed output
    128141    void send(const T & data, road_time_t t = road_time(), road_timerange_t tr = 0);
    129142   
     
    150163        //  It is not safe to access the event after it has been posted.   
    151164        QEvent * newEvent = new PacpusTypedEvent<T>(TYPED_EVENT, data, t, tr);
    152         QCoreApplication::postEvent(it->getInterface(), newEvent, it->getPriority());
     165        QCoreApplication::postEvent(
     166            it->getInterface(),
     167            newEvent,
     168            it->getPriority()
     169        );
    153170        LOG_DEBUG("Sender: " << it->getInterface()->getSignature());
    154171        LOG_DEBUG("Data &: " << &data);
Note: See TracChangeset for help on using the changeset viewer.