add eConsoleAppContainer to execute shell scripts or applications from python without...
[enigma2.git] / lib / base / console.h
diff --git a/lib/base/console.h b/lib/base/console.h
new file mode 100644 (file)
index 0000000..bfa0240
--- /dev/null
@@ -0,0 +1,48 @@
+#ifndef __LIB_BASE_CONSOLE_H__
+#define __LIB_BASE_CONSOLE_H__
+
+#include <string>
+#include <lib/base/ebase.h>
+#include <lib/python/connections.h>
+#include <queue>
+
+#ifndef SWIG
+struct queue_data
+{
+       queue_data( char *data, int len )
+               :data(data), len(len)
+       {
+       }
+       char *data;
+       int len;
+};
+#endif
+
+class eConsoleAppContainer: public Object
+{
+#ifndef SWIG
+       int fd[3];
+       int pid;
+       int killstate;
+       std::queue<struct queue_data> outbuf;
+       eSocketNotifier *in, *out, *err;
+       void readyRead(int what);
+       void readyErrRead(int what);
+       void readyWrite(int what);
+       void closePipes();
+#endif
+public:
+       eConsoleAppContainer();
+       int execute( const std::string &str );
+       ~eConsoleAppContainer();
+       int getPID() { return pid; }
+       void kill();
+       void sendCtrlC();
+       void write( const char *data, int len );
+       bool running() { return (fd[0]!=-1) && (fd[1]!=-1) && (fd[2]!=-1); }
+       PSignal1Str<void, const char*> dataAvail;
+       PSignal1<void,int> dataSent;
+       PSignal1<void,int> appClosed;
+};
+
+#endif // __LIB_BASE_CONSOLE_H__