00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef __HOM_ShellIO_h__
00017 #define __HOM_ShellIO_h__
00018
00019 #include "HOM_API.h"
00020 #include "HOM_Module.h"
00021 #include <string>
00022 #include <boost/tuple/tuple.hpp>
00023
00024 SWIGOUT(%rename(ShellIO) HOM_ShellIO;)
00025
00026 class HOM_API HOM_ShellIO
00027 {
00028 public:
00029 HOM_ShellIO()
00030 { HOM_CONSTRUCT_OBJECT(this) }
00031 HOM_ShellIO(const HOM_ShellIO &)
00032 { HOM_CONSTRUCT_OBJECT(this) }
00033 virtual ~HOM_ShellIO()
00034 { HOM_DESTRUCT_OBJECT(this) }
00035
00036
00037
00038 #ifdef SWIG
00039 %extend {
00040 %kwargs readline;
00041 InterpreterObject readline(int size=-1) throw(HOM_Error)
00042 {
00043
00044
00045
00046 boost::tuple<std::string, bool> result =
00047 self->readlineWithKeyboardInterrupt(size);
00048 if (result.get<1>())
00049 {
00050
00051
00052 return NULL;
00053 }
00054 return HOMconvertValueForInterpreter(result.get<0>(), SWIG_POINTER_OWN);
00055 }
00056
00057 void addCloseCallback(InterpreterObject callback)
00058 throw(HOM_Error)
00059 { self->addOpaqueCloseCallback(callback); }
00060
00061 void removeCloseCallback(InterpreterObject callback)
00062 throw(HOM_Error)
00063 { self->removeOpaqueCloseCallback(callback); }
00064
00065
00066
00067 std::vector<InterpreterObject> CloseCallbacks()
00068 throw(HOM_Error)
00069 {
00070 std::vector<void *> opaque_callbacks(self->opaqueCloseCallbacks());
00071
00072 std::vector<InterpreterObject> callbacks;
00073 for (int i=0; i < opaque_callbacks.size(); ++i)
00074 callbacks.push_back((InterpreterObject)opaque_callbacks[i]);
00075 return callbacks;
00076 }
00077
00078
00079 void addExitCallback(InterpreterObject callback) throw(HOM_Error)
00080 { self->addOpaqueCloseCallback(callback); }
00081 void removeExitCallback(InterpreterObject callback) throw(HOM_Error)
00082 { self->removeOpaqueCloseCallback(callback); }
00083 std::vector<InterpreterObject> exitCallbacks() throw(HOM_Error)
00084 {
00085 std::vector<void *> opaque_callbacks(self->opaqueCloseCallbacks());
00086
00087 std::vector<InterpreterObject> callbacks;
00088 for (int i=0; i < opaque_callbacks.size(); ++i)
00089 callbacks.push_back((InterpreterObject)opaque_callbacks[i]);
00090 return callbacks;
00091 }
00092 }
00093 #endif
00094
00095
00096
00097
00098 SWIGOUT(%ignore readlineWithKeyboardInterrupt;)
00099 virtual boost::tuple<std::string, bool /*interrupt_occurred*/>
00100 readlineWithKeyboardInterrupt(int size) throw(HOM_Error) = 0;
00101
00102 SWIGOUT(%ignore addOpaqueCloseCallback;)
00103 virtual void addOpaqueCloseCallback(void *callback)
00104 throw(HOM_Error) = 0;
00105 SWIGOUT(%ignore removeOpaqueCloseCallback;)
00106 virtual void removeOpaqueCloseCallback(void *callback)
00107 throw(HOM_OperationFailed, HOM_Error) = 0;
00108 SWIGOUT(%ignore opaqueCloseCallbacks;)
00109 virtual std::vector<void *> opaqueCloseCallbacks()
00110 throw(HOM_Error) = 0;
00111 SWIGOUT(%ignore executeCloseCallbacks;)
00112 virtual void executeCloseCallbacks() = 0;
00113
00114
00115 virtual void write(const std::string &data) throw(HOM_Error) = 0;
00116
00117
00118
00119
00120 SWIGOUT(%ignore hasWrittenData;)
00121 virtual bool hasWrittenData() = 0;
00122
00123
00124
00125
00126 SWIGOUT(%ignore getDataStream;)
00127 virtual std::stringstream &getDataStream() = 0;
00128
00129
00130
00131 virtual std::string getAndClearWrittenData() throw(HOM_Error) = 0;
00132
00133
00134
00135 virtual void addDataForReading(const char *data) throw(HOM_Error) = 0;
00136
00137
00138
00139
00140 virtual void addEOFForReading() throw(HOM_Error) = 0;
00141
00142
00143
00144
00145 virtual void interruptShellThread() throw(HOM_Error) = 0;
00146
00147
00148
00149
00150
00151 virtual bool isWaitingForCommand() throw(HOM_Error) = 0;
00152 virtual void setIsWaitingForCommand(bool on) throw(HOM_Error) = 0;
00153
00154 virtual bool isatty() throw(HOM_Error) = 0;
00155 virtual void flush() throw (HOM_Error) = 0;
00156 };
00157
00158 #endif