You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
2.5 KiB
132 lines
2.5 KiB
#include <stdio.h>
|
|
#include <kmedia2.h>
|
|
#include <kcmdlineargs.h>
|
|
#include <connect.h>
|
|
#include <klocale.h>
|
|
#include <kapplication.h>
|
|
#include <kaboutdata.h>
|
|
#include <stdsynthmodule.h>
|
|
#include "qiomanager.h"
|
|
#include "artskde.h"
|
|
|
|
using namespace std;
|
|
using namespace Arts;
|
|
|
|
namespace Arts {
|
|
/* simulate slow receiver */
|
|
class KIOTestSlow_impl : public KIOTestSlow_skel,
|
|
public TimeNotify,
|
|
public StdSynthModule
|
|
{
|
|
int pos;
|
|
list< DataPacket<mcopbyte>* > q;
|
|
InputStream _inputStream;
|
|
|
|
public:
|
|
InputStream inputStream() { return _inputStream; }
|
|
void inputStream(InputStream i) { _inputStream = i; }
|
|
|
|
KIOTestSlow_impl()
|
|
{
|
|
Dispatcher::the()->ioManager()->addTimer(10, this);
|
|
pos = 0;
|
|
}
|
|
void notifyTime()
|
|
{
|
|
if(!_inputStream.isNull() && _inputStream.eof())
|
|
{
|
|
printf("\n[*EOF*] remaining = %d packets\n");
|
|
_inputStream = InputStream::null();
|
|
return;
|
|
}
|
|
|
|
int TODO = 100;
|
|
do {
|
|
if(q.empty())
|
|
return;
|
|
|
|
DataPacket<mcopbyte> *p = q.front();
|
|
char ch = p->contents[pos++];
|
|
if(p->size == pos)
|
|
{
|
|
p->processed();
|
|
q.pop_front();
|
|
pos = 0;
|
|
}
|
|
|
|
if(ch == '\n')
|
|
{
|
|
long size = 0;
|
|
list<DataPacket<mcopbyte>*>::iterator i;
|
|
for(i = q.begin(); i != q.end(); i++)
|
|
size += (*i)->size;
|
|
printf("\n[queued %8ld] ",size-pos);
|
|
}
|
|
else
|
|
putchar(ch);
|
|
|
|
} while(TODO-- > 0);
|
|
}
|
|
void process_data(DataPacket<mcopbyte> *p)
|
|
{
|
|
if(p->size == 0)
|
|
p->processed();
|
|
else
|
|
q.push_back(p);
|
|
}
|
|
};
|
|
REGISTER_IMPLEMENTATION(KIOTestSlow_impl);
|
|
};
|
|
|
|
static KCmdLineOptions options[] =
|
|
{
|
|
{ "+[URL]", I18N_NOOP("URL to open"), 0 },
|
|
KCmdLineLastOption
|
|
};
|
|
|
|
#undef USE_FILEINPUTSTREAM
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
TDEAboutData aboutData( "kiotestslow", I18N_NOOP("KIOTest"), I18N_NOOP("0.1"), "", TDEAboutData::License_GPL, "");
|
|
|
|
TDECmdLineArgs::init(argc,argv,&aboutData);
|
|
TDECmdLineArgs::addCmdLineOptions(options);
|
|
TDEApplication app;
|
|
QIOManager qiomanager;
|
|
Dispatcher dispatcher(&qiomanager);
|
|
#ifndef USE_FILEINPUTSTREAM
|
|
TDEIOInputStream stream;
|
|
#else
|
|
FileInputStream stream;
|
|
#endif
|
|
KIOTestSlow writer;
|
|
|
|
TDECmdLineArgs *args = TDECmdLineArgs::parsedArgs();
|
|
|
|
if(args->count())
|
|
{
|
|
#ifdef USE_FILEINPUTSTREAM
|
|
if(!stream.open(args->arg(0)))
|
|
#else
|
|
if(!stream.openURL(args->arg(0)))
|
|
#endif
|
|
{
|
|
printf("can't open url");
|
|
exit(1);
|
|
}
|
|
}
|
|
else
|
|
exit(1);
|
|
|
|
args->clear();
|
|
|
|
writer.inputStream(stream);
|
|
connect(stream, writer);
|
|
|
|
writer.start();
|
|
stream.start();
|
|
|
|
app.exec();
|
|
}
|