From 2bda8f7717adf28da4af0d34fb82f63d2868c31d Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdeutils@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- ksim/monitors/snmp/monitor.cpp | 96 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 ksim/monitors/snmp/monitor.cpp (limited to 'ksim/monitors/snmp/monitor.cpp') diff --git a/ksim/monitors/snmp/monitor.cpp b/ksim/monitors/snmp/monitor.cpp new file mode 100644 index 0000000..7a97825 --- /dev/null +++ b/ksim/monitors/snmp/monitor.cpp @@ -0,0 +1,96 @@ +/* This file is part of the KDE project + Copyright (C) 2003 Simon Hausmann + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include "monitor.h" + +#include +#include + +using namespace KSim::Snmp; + +Monitor::Monitor( const HostConfig &host, const Identifier &oid, int refresh, QObject *parent, const char *name ) + : QObject( parent, name ), m_oid( oid ), m_session( host ) +{ + if ( refresh > 0 ) + m_timerId = startTimer( refresh ); + else + m_timerId = -1; + + QTimer::singleShot( 0, this, SLOT( performSnmpRequest() ) ); +} + +Monitor::~Monitor() +{ + if ( QThread::running() ) + QThread::wait(); +} + +void Monitor::run() +{ + AsyncSnmpQueryResult *result = new AsyncSnmpQueryResult; + + result->oid = m_oid; + result->success = performSyncSnmpRequest( result->data, &result->error ); + + QCustomEvent *ev = new QCustomEvent( QEvent::User, result ); + QApplication::postEvent( this, ev ); +} + +void Monitor::customEvent( QCustomEvent *ev ) +{ + if ( ev->type() != QEvent::User ) + return; + + AsyncSnmpQueryResult *result = reinterpret_cast( ev->data() ); + if ( result->success ) { + emit newData( result->data ); + emit newData( result->oid, result->data ); + } else { + emit error( result->error ); + emit error( result->oid, result->error ); + } + + delete result; +} + +void Monitor::timerEvent( QTimerEvent *ev ) +{ + if ( ev->timerId() != m_timerId ) + return; + + performSnmpRequest(); +} + +void Monitor::performSnmpRequest() +{ + if ( QThread::running() ) + return; + + start(); +} + +bool Monitor::performSyncSnmpRequest( Value &data, ErrorInfo *errorInfo ) +{ + return m_session.snmpGet( m_oid, data, errorInfo ); +} + +#include "monitor.moc" + +/* vim: et sw=4 ts=4 + */ -- cgit v1.2.1