Пример #1
0
/**
 * Polls for new LibDS events and emits Qt signals as appropiate.
 * This function is called every 5 milliseconds.
 */
void DriverStation::processEvents()
{
    DS_Event event;
    while (DS_PollEvent (&event)) {
        switch (event.type) {
        case DS_FMS_COMMS_CHANGED:
            emit fmsAddressChanged();
            emit fmsCommunicationsChanged (event.fms.connected);
            break;
        case DS_RADIO_COMMS_CHANGED:
            emit radioAddressChanged();
            emit radioCommunicationsChanged (event.radio.connected);
            break;
        case DS_NETCONSOLE_NEW_MESSAGE:
            emit newMessage (QString::fromUtf8 (event.netconsole.message));
            break;
        case DS_ROBOT_ENABLED_CHANGED:
            emit enabledChanged (event.robot.enabled);
            break;
        case DS_ROBOT_MODE_CHANGED:
            emit controlModeChanged (controlMode());
            break;
        case DS_ROBOT_COMMS_CHANGED:
            emit robotAddressChanged();
            emit robotCommunicationsChanged (event.robot.connected);
            break;
        case DS_ROBOT_CODE_CHANGED:
            emit robotCodeChanged (event.robot.code);
            break;
        case DS_ROBOT_VOLTAGE_CHANGED:
            emit voltageChanged (event.robot.voltage);
            break;
        case DS_ROBOT_CAN_UTIL_CHANGED:
            emit canUsageChanged (event.robot.can_util);
            break;
        case DS_ROBOT_CPU_INFO_CHANGED:
            emit cpuUsageChanged (event.robot.cpu_usage);
            break;
        case DS_ROBOT_RAM_INFO_CHANGED:
            emit ramUsageChanged (event.robot.ram_usage);
            break;
        case DS_ROBOT_DISK_INFO_CHANGED:
            emit diskUsageChanged (event.robot.disk_usage);
            break;
        case DS_ROBOT_STATION_CHANGED:
            emit stationChanged();
            emit allianceChanged (teamAlliance());
            emit positionChanged (teamPosition());
            break;
        case DS_ROBOT_ESTOP_CHANGED:
            emit emergencyStoppedChanged (event.robot.estopped);
            break;
        case DS_STATUS_STRING_CHANGED:
            emit statusChanged (QString::fromUtf8 (DS_GetStatusString()));
            break;
        default:
            break;
        }
    }

    QTimer::singleShot (5, Qt::CoarseTimer, this, SLOT (processEvents()));
}
Пример #2
0
void
WebService::requestResult( Request *r )
{
    Q_ASSERT( r );
   
    switch (r->type())
    {
        case TypeHandshake:
        { 
            //TODO mxcl before I refactored, the handshake success if block was still
            // executed, but the result code was set to an error, I considered this a
            // bug and hopefully I'll remember to ask someone if that is the case or not
    
            Handshake *handshake = static_cast<Handshake*>(r);

            Q_ASSERT( m_username == handshake->username() );
            Q_ASSERT( m_password == handshake->password() );

            if (handshake->succeeded()) {
                m_streamUrl = handshake->streamUrl(); // legacy
                m_isSubscriber = handshake->isSubscriber();
            }
            
            if (handshake->isMessage())
                QMessageBox::information( 
                        qApp->activeWindow(), 
                        tr( "Last.fm Information" ),
                        handshake->message() );            
            
            emit handshakeResult( handshake );
            
            break;
        }

        // these macros makes the code more readable
        #define CASE( T ) case Type##T: { T##Request *request = static_cast<T##Request*>(r);
        #define break } break

        CASE( ChangeStation )
            StationUrl url = request->stationUrl();
            QString name = request->stationName();

            emit changeStationResult( request );
            
            if (r->succeeded())
                emit stationChanged( url, name );
            break;
       
        CASE( SetTag )
            emit setTagResult( request );
            break;

        CASE( ProxyTest )
            if ( request->succeeded() || request->resultCode() == Request_ProxyAuthenticationRequired )
            {
                m_isAutoDetectedProxy = request->proxyUsed();
                    
                emit proxyTestResult( m_isAutoDetectedProxy, request->resultCode() );
            }
            break;
        
        default:
            ;
    }
    
    /// these are emitted only for the currentUsername()
    switch (r->type()) 
    {
        CASE( Love )
            emit loved( request->track() );
            break;
        CASE( UnLove )
            emit unloved( request->track() );
            break;
        CASE( Ban )
            emit banned( request->track() );
            break;
        CASE( UnBan )
            emit unbanned( request->track() );
            break;
        CASE( UserTags )
            if (request->username() == currentUsername())
                emit userTags( request->tags() );
            break;
        CASE( DeleteFriend )
            emit friendDeleted( request->deletedUsername() );
            break;
        CASE( Friends )
            emit friends( request->usernames() );
            break;
        CASE( Neighbours )
            emit neighbours( request->usernames() );
            break;
        CASE( RecentTracks )
            emit recentTracks( request->tracks() );
            break;
        CASE( RecentlyLovedTracks )
            emit recentLovedTracks( request->tracks() );
            break;
        CASE( RecentlyBannedTracks )
            emit recentBannedTracks( request->tracks() );
            break;
            
        default:
            ;            
    }
   
    #undef CASE
    #undef break

    if ( r->failed() && r->resultCode() != Request_ProxyAuthenticationRequired )
        emit failure( r );
    else        
        emit success( r );

    emit result( r );

    
    if (r->autoDelete())
        // do last in case one of the signals is queued
        r->deleteLater();
}