~ubuntu-branches/ubuntu/saucy/libkdegames/saucy-updates

« back to all changes in this revision

Viewing changes to libkdegamesprivate/kgame/kmessageio.cpp

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell, Rohan Garg, Philip Muškovac, Jonathan Riddell
  • Date: 2013-06-21 01:42:38 UTC
  • mfrom: (1.2.3)
  • Revision ID: package-import@ubuntu.com-20130621014238-mk0kx5llg3m15ua6
Tags: 4:4.10.80-0ubuntu1
[ Rohan Garg ]
* New upstream release

[ Philip Muškovac ]
* Add Qml imports to libkdegames6.install 
* Add new symbols to libkdegames6.symbols

[ Jonathan Riddell ]
* New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
362
362
  mProcess=0;
363
363
}
364
364
 
365
 
 
366
 
// ----------------------- KMessageFilePipe ---------------------------
367
 
KMessageFilePipe::KMessageFilePipe(QObject *parent,QFile *readfile,QFile *writefile) : KMessageIO(parent)
368
 
{
369
 
  mReadFile=readfile;
370
 
  mWriteFile=writefile;
371
 
  mReceiveCount=0;
372
 
  mReceiveBuffer.resize(1024);
373
 
}
374
 
 
375
 
KMessageFilePipe::~KMessageFilePipe()
376
 
{
377
 
}
378
 
 
379
 
bool KMessageFilePipe::isConnected () const
380
 
{
381
 
  return (mReadFile!=0)&&(mWriteFile!=0);
382
 
}
383
 
 
384
 
// Send to parent
385
 
void KMessageFilePipe::send(const QByteArray &msg)
386
 
{
387
 
  unsigned int size=msg.size()+2*sizeof(long);
388
 
 
389
 
  char *tmpbuffer=new char[size];
390
 
  long *p1=(long *)tmpbuffer;
391
 
  long *p2=p1+1;
392
 
  memcpy(tmpbuffer+2*sizeof(long),msg.data(),msg.size());
393
 
  *p1=0x4242aeae;
394
 
  *p2=size;
395
 
 
396
 
  QByteArray buffer(tmpbuffer,size);
397
 
  mWriteFile->write(buffer);
398
 
  mWriteFile->flush();
399
 
  delete [] tmpbuffer;
400
 
 
401
 
  /* DEBUG:
402
 
  fprintf(stderr,"+++ KMessageFilePipe:: SEND(%d to parent) realsize=%d\n",msg.size(),buffer.size());
403
 
  for (int i=0;i<buffer.size();i++) fprintf(stderr,"%02x ",(unsigned char)buffer.at(i));fprintf(stderr,"\n");
404
 
  fflush(stderr);
405
 
  */
406
 
 
407
 
 
408
 
}
409
 
 
410
 
void KMessageFilePipe::exec()
411
 
{
412
 
 
413
 
  // According to BL: Blocking read is ok
414
 
  // while(mReadFile->atEnd()) { usleep(100); }
415
 
   char ch;
416
 
   mReadFile->getChar(&ch);
417
 
 
418
 
   while (mReceiveCount>=mReceiveBuffer.size()) mReceiveBuffer.resize(mReceiveBuffer.size()+1024);
419
 
   mReceiveBuffer[mReceiveCount]=ch;
420
 
   mReceiveCount++;
421
 
 
422
 
   // Change for message
423
 
   if (mReceiveCount>=int(2*sizeof(long)))
424
 
   {
425
 
     long *p1=(long *)mReceiveBuffer.data();
426
 
     long *p2=p1+1;
427
 
     int len;
428
 
     if (*p1!=0x4242aeae)
429
 
     {
430
 
       fprintf(stderr,"KMessageFilePipe::exec:: Cookie error...transmission failure...serious problem...\n");
431
 
       fflush(stderr);
432
 
//       for (int i=0;i<16;i++) fprintf(stderr,"%02x ",mReceiveBuffer[i]);fprintf(stderr,"\n");
433
 
     }
434
 
     len=(int)(*p2);
435
 
     if (len==mReceiveCount)
436
 
     {
437
 
       //fprintf(stderr,"KMessageFilePipe::exec:: Got Message with len %d\n",len);
438
 
 
439
 
       QByteArray msg;
440
 
       msg.resize(len);
441
 
       //msg.setRawData(mReceiveBuffer.data()+2*sizeof(long),len-2*sizeof(long));
442
 
       qCopy(mReceiveBuffer.begin()+2*sizeof(long),mReceiveBuffer.begin()+len, msg.begin());
443
 
//      msg.duplicate(mReceiveBuffer.data()+2*sizeof(long),len-2*sizeof(long));
444
 
       emit received(msg);
445
 
       //msg.resetRawData(mReceiveBuffer.data()+2*sizeof(long),len-2*sizeof(long));
446
 
       mReceiveCount=0;
447
 
     }
448
 
   }
449
 
 
450
 
 
451
 
   return ;
452
 
 
453
 
 
454
 
}
455
 
 
456
365
#include "kmessageio.moc"
457
366