|
|
|
/***************************************************************************
|
|
|
|
KChildConnect.cpp - description
|
|
|
|
-------------------
|
|
|
|
begin : Tue May 2 2000
|
|
|
|
copyright : (C) 2000 by Martin Heni
|
|
|
|
email : martin@heni-online.de
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
* *
|
|
|
|
* 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. *
|
|
|
|
* *
|
|
|
|
***************************************************************************/
|
|
|
|
#include <stdio.h>
|
|
|
|
#include "KChildConnect.h"
|
|
|
|
|
|
|
|
#include "KChildConnect.moc"
|
|
|
|
|
|
|
|
KChildConnect::KChildConnect()
|
|
|
|
: TQObject(0,0)
|
|
|
|
{
|
|
|
|
input_pending=false;
|
|
|
|
inputbuffer="";
|
|
|
|
}
|
|
|
|
|
|
|
|
KChildConnect::~KChildConnect()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
KR_STATUS KChildConnect::QueryStatus()
|
|
|
|
{
|
|
|
|
return KR_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Communication with process
|
|
|
|
bool KChildConnect::SendMsg(KEMessage *msg)
|
|
|
|
{
|
|
|
|
TQString sendstring=msg->ToString();
|
|
|
|
// Debug only
|
|
|
|
if (msg->HasKey(TQCString("KLogSendMsg")))
|
|
|
|
{
|
|
|
|
char *p;
|
|
|
|
int size;
|
|
|
|
FILE *fp;
|
|
|
|
msg->GetData(TQCString("KLogSendMsg"),p,size);
|
|
|
|
if (p && (fp=fopen(p,"a")) )
|
|
|
|
{
|
|
|
|
fprintf(fp,"------------------------------------\n");
|
|
|
|
fprintf(fp,"%s", sendstring.utf8().data());
|
|
|
|
fclose(fp);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// end debug only
|
|
|
|
return Send(sendstring);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Send string to parent
|
|
|
|
bool KChildConnect::Send(TQString str)
|
|
|
|
{
|
|
|
|
if (!str || str.length()<1) return true; // no need to send crap
|
|
|
|
printf("%s",str.latin1());
|
|
|
|
fflush(stdout);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
void KChildConnect::Receive(TQString input)
|
|
|
|
{
|
|
|
|
// Cut out CR
|
|
|
|
int len,pos;
|
|
|
|
TQString tmp;
|
|
|
|
|
|
|
|
|
|
|
|
// Call us recursive until there are no CR left
|
|
|
|
len=KEMESSAGE_CR.length();
|
|
|
|
pos=input.find(KEMESSAGE_CR);
|
|
|
|
if (pos>0)
|
|
|
|
{
|
|
|
|
tmp=input.left(pos);
|
|
|
|
if (tmp.length()>0) Receive(tmp); // CR free
|
|
|
|
input=input.right(input.length()-pos-len);
|
|
|
|
if (input.length()>0) Receive(input);
|
|
|
|
return ;
|
|
|
|
}
|
|
|
|
|
|
|
|
// printf(" ---> KChildConnect::Receive: '%s'\n",(const char *)input);
|
|
|
|
if (input==TQString(KEMESSAGE_HEAD) && !input_pending)
|
|
|
|
{
|
|
|
|
input_pending=true;
|
|
|
|
inputcache.clear();
|
|
|
|
return ;
|
|
|
|
}
|
|
|
|
if (!input_pending) return ; // ignore
|
|
|
|
if (input!=TQString(KEMESSAGE_TAIL))
|
|
|
|
{
|
|
|
|
inputcache.append(input.latin1());
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
input_pending=0;
|
|
|
|
|
|
|
|
KEMessage *msg=new KEMessage;
|
|
|
|
char *it;
|
|
|
|
for (it=inputcache.first();it!=0;it=inputcache.next())
|
|
|
|
{
|
|
|
|
msg->AddString(TQCString(it));
|
|
|
|
}
|
|
|
|
|
|
|
|
// printf("+- CHILDprocess:: GOT MESSAGE::Emmiting slotReceiveMsg\n");
|
|
|
|
emit signalReceiveMsg(msg,ID);
|
|
|
|
|
|
|
|
delete msg;
|
|
|
|
}
|
|
|
|
|
|
|
|
void KChildConnect::SetID(int id)
|
|
|
|
{
|
|
|
|
ID=id;
|
|
|
|
}
|
|
|
|
int KChildConnect::QueryID()
|
|
|
|
{
|
|
|
|
return ID;
|
|
|
|
}
|
|
|
|
|