X-Git-Url: https://git.ucc.asn.au/?p=progcomp2012.git;a=blobdiff_plain;f=progcomp%2Fjudge%2Fmanager%2Fprogram.h;fp=progcomp%2Fjudge%2Fmanager%2Fprogram.h;h=8fef6964a89f41568f326df5aecbb49fa44da2d9;hp=0000000000000000000000000000000000000000;hb=88fc5a96c424e9a451b98f3b680bc1980345320d;hpb=e3b15cd5dea739f7523920d83bda592db95a7b93 diff --git a/progcomp/judge/manager/program.h b/progcomp/judge/manager/program.h new file mode 100644 index 0000000..8fef696 --- /dev/null +++ b/progcomp/judge/manager/program.h @@ -0,0 +1,40 @@ +#ifndef PROGRAM_H +#define PROGRAM_H + +#include "thread_util.h" + +#include + +/** + * A wrapping class for an external program, which can exchange messages with the current process through stdin/stdout + * Useful for attaching control of an operation to an external process - for example, AI for a game + */ +class Program +{ + public: + Program(const char * executeablePath); //Constructor + virtual ~Program(); //Destructor + + + + + bool SendMessage(const char * print, ...); //Sends a formated message (NOTE: Prints a newline) + bool SendMessage(const std::string & buffer) {return SendMessage(buffer.c_str());} //Sends a C++ string message + bool GetMessage(std::string & buffer, double timeout=-1); //Retrieves a message, or waits for a timeout (if positive) + + bool Running() const; + + + + protected: + FILE * input; //Stream used for sending information TO the process + FILE * output; //Stream used for retrieving information FROM the process + + private: + pid_t pid; //Process ID of the program wrapped + +}; + +#endif //PROGRAM_H + +