kiotestslow.cc00001 #include <stdio.h>
00002 #include <kmedia2.h>
00003 #include <kcmdlineargs.h>
00004 #include <connect.h>
00005 #include <klocale.h>
00006 #include <kapplication.h>
00007 #include <kaboutdata.h>
00008 #include <stdsynthmodule.h>
00009 #include "qiomanager.h"
00010 #include "artskde.h"
00011
00012 using namespace std;
00013 using namespace Arts;
00014
00015 namespace Arts {
00016
00017 class KIOTestSlow_impl : public KIOTestSlow_skel,
00018 public TimeNotify,
00019 public StdSynthModule
00020 {
00021 int pos;
00022 list< DataPacket<mcopbyte>* > q;
00023 InputStream _inputStream;
00024
00025 public:
00026 InputStream inputStream() { return _inputStream; }
00027 void inputStream(InputStream i) { _inputStream = i; }
00028
00029 KIOTestSlow_impl()
00030 {
00031 Dispatcher::the()->ioManager()->addTimer(10, this);
00032 pos = 0;
00033 }
00034 void notifyTime()
00035 {
00036 if(!_inputStream.isNull() && _inputStream.eof())
00037 {
00038 printf("\n[*EOF*] remaining = %d packets\n");
00039 _inputStream = InputStream::null();
00040 return;
00041 }
00042
00043 int TODO = 100;
00044 do {
00045 if(q.empty())
00046 return;
00047
00048 DataPacket<mcopbyte> *p = q.front();
00049 char ch = p->contents[pos++];
00050 if(p->size == pos)
00051 {
00052 p->processed();
00053 q.pop_front();
00054 pos = 0;
00055 }
00056
00057 if(ch == '\n')
00058 {
00059 long size = 0;
00060 list<DataPacket<mcopbyte>*>::iterator i;
00061 for(i = q.begin(); i != q.end(); i++)
00062 size += (*i)->size;
00063 printf("\n[queued %8ld] ",size-pos);
00064 }
00065 else
00066 putchar(ch);
00067
00068 } while(TODO-- > 0);
00069 }
00070 void process_data(DataPacket<mcopbyte> *p)
00071 {
00072 if(p->size == 0)
00073 p->processed();
00074 else
00075 q.push_back(p);
00076 }
00077 };
00078 REGISTER_IMPLEMENTATION(KIOTestSlow_impl);
00079 };
00080
00081 static KCmdLineOptions options[] =
00082 {
00083 { "+[URL]", I18N_NOOP("URL to open"), 0 },
00084 KCmdLineLastOption
00085 };
00086
00087 #undef USE_FILEINPUTSTREAM
00088
00089 int main(int argc, char **argv)
00090 {
00091 KAboutData aboutData( "kiotestslow", I18N_NOOP("KIOTest"), I18N_NOOP("0.1"), "", KAboutData::License_GPL, "");
00092
00093 KCmdLineArgs::init(argc,argv,&aboutData);
00094 KCmdLineArgs::addCmdLineOptions(options);
00095 KApplication app;
00096 QIOManager qiomanager;
00097 Dispatcher dispatcher(&qiomanager);
00098 #ifndef USE_FILEINPUTSTREAM
00099 KIOInputStream stream;
00100 #else
00101 FileInputStream stream;
00102 #endif
00103 KIOTestSlow writer;
00104
00105 KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
00106
00107 if(args->count())
00108 {
00109 #ifdef USE_FILEINPUTSTREAM
00110 if(!stream.open(args->arg(0)))
00111 #else
00112 if(!stream.openURL(args->arg(0)))
00113 #endif
00114 {
00115 printf("can't open url");
00116 exit(1);
00117 }
00118 }
00119 else
00120 exit(1);
00121
00122 args->clear();
00123
00124 writer.inputStream(stream);
00125 connect(stream, writer);
00126
00127 writer.start();
00128 stream.start();
00129
00130 app.exec();
00131 }
|