arts Library API Documentation

kartsserver.cpp

00001 // Copyright (c) 2000-2001 Charles Samuels <charles@kde.org> 00002 // Neil Stevens <neil@qualityassistant.com> 00003 // 00004 // Permission is hereby granted, free of charge, to any person obtaining a copy 00005 // of this software and associated documentation files (the "Software"), to deal 00006 // in the Software without restriction, including without limitation the rights 00007 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 00008 // copies of the Software, and to permit persons to whom the Software is 00009 // furnished to do so, subject to the following conditions: 00010 // 00011 // The above copyright notice and this permission notice shall be included in 00012 // all copies or substantial portions of the Software. 00013 // 00014 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 00015 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00016 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 00017 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIAB\ILITY, WHETHER IN 00018 // AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 00019 // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 00020 00021 #include <flowsystem.h> 00022 #include <ksimpleconfig.h> 00023 #include <kprocess.h> 00024 #include <kstandarddirs.h> 00025 #include <qdir.h> 00026 #include <qfile.h> 00027 #include "kartsserver.h" 00028 00029 struct KArtsServer::Data 00030 { 00031 Arts::SoundServerV2 server; 00032 }; 00033 00034 KArtsServer::KArtsServer(QObject *parent, const char *name) 00035 : QObject(parent, name) 00036 , d(new Data) 00037 { 00038 d->server = Arts::SoundServerV2::null(); 00039 } 00040 00041 KArtsServer::~KArtsServer(void) 00042 { 00043 d->server = Arts::SoundServerV2::null(); 00044 delete d; 00045 } 00046 00047 Arts::SoundServerV2 KArtsServer::server(void) 00048 { 00049 bool error = d->server.error(); 00050 if( d->server.isNull() || error ) 00051 { 00052 d->server = Arts::Reference("global:Arts_SoundServerV2"); 00053 if( error && !d->server.isNull() && !d->server.error() ) 00054 emit restartedServer(); 00055 } 00056 00057 if(!d->server.isNull() && !d->server.error()) 00058 return d->server; 00059 00060 // aRts seems not to be running, let's try to run it 00061 // First, let's read the configuration as in kcmarts 00062 KConfig config("kcmartsrc", false /*bReadOnly*/, false /*bUseKDEGlobals*/); 00063 KProcess proc; 00064 00065 config.setGroup("Arts"); 00066 00067 bool rt = config.readBoolEntry("StartRealtime", false); 00068 bool x11Comm = config.readBoolEntry("X11GlobalComm", false); 00069 00070 // put the value of x11Comm into .mcoprc 00071 KSimpleConfig X11CommConfig(QDir::homeDirPath()+"/.mcoprc"); 00072 00073 if(x11Comm) 00074 X11CommConfig.writeEntry("GlobalComm", "Arts::X11GlobalComm"); 00075 else 00076 X11CommConfig.writeEntry("GlobalComm", "Arts::TmpGlobalComm"); 00077 00078 X11CommConfig.sync(); 00079 00080 proc << QFile::encodeName(KStandardDirs::findExe(QString::fromLatin1("kdeinit_wrapper"))); 00081 00082 if(rt) 00083 proc << QFile::encodeName(KStandardDirs::findExe(QString::fromLatin1("artswrapper"))); 00084 else 00085 proc << QFile::encodeName(KStandardDirs::findExe(QString::fromLatin1("artsd"))); 00086 00087 proc << QStringList::split( " ", config.readEntry( "Arguments", "-F 10 -S 4096 -s 60 -m artsmessage -l 3 -f" ) ); 00088 00089 if(proc.start(KProcess::Block) && proc.normalExit()) 00090 { 00091 // We could have a race-condition here. 00092 // The correct way to do it is to make artsd fork-and-exit 00093 // after starting to listen to connections (and running artsd 00094 // directly instead of using kdeinit), but this is better 00095 // than nothing. 00096 int time = 0; 00097 do 00098 { 00099 sleep(1); 00100 d->server = Arts::Reference("global:Arts_SoundServerV2"); 00101 } while(++time < 5 && (d->server.isNull())); 00102 00103 emit restartedServer(); 00104 } 00105 // TODO else what? 00106 00107 return d->server; 00108 } 00109 00110 // vim: sw=4 ts=4 noet 00111 #include "kartsserver.moc"
KDE Logo
This file is part of the documentation for arts Library Version 3.2.3.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sat Jun 12 15:09:01 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003