using namespace std;
+
/**
* Constructor
* @param executablePath - path to the program that will be run
*/
Program::Program(const char * executablePath) : input(NULL), output(NULL), pid(0)
{
+
+
int readPipe[2]; int writePipe[2];
assert(pipe(readPipe) == 0);
assert(pipe(writePipe) == 0);
if (kill(pid, 0) == 0) //Check if the process created is still running...
{
fputc(EOF, output); //If it was, tell it to stop with EOF
- sleep(1); //Give it 1 second to respond...
+ usleep(500000); //Give it 1/2 a second to respond...
if (kill(pid, 0) == 0) //Check if its still running
{
kill(pid, 9); //Slay the infidel mercilessly!
* Sends a message to the wrapped AI program
* WARNING: Always prints a new line after the message (so don't include a new line)
* This is because everything is always line buffered.
+ * @returns true if the message was successfully sent; false if it was not (ie: the process was not running!)
*/
bool Program::SendMessage(const char * print, ...)
{
va_list ap;
va_start(ap, print);
- vfprintf(output, print, ap);
- fprintf(output, "\n");
-
+ if (vfprintf(output, print, ap) < 0 || fprintf(output, "\n") < 0)
+ {
+ va_end(ap);
+ return false;
+ }
+ va_end(ap);
- va_end(ap);
+
return true;
}
}
+
+