00001 #ifndef EVENT_LOOP__BACKGROUND_SOCKET_H
00002 #define EVENT_LOOP__BACKGROUND_SOCKET_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include <EventLoop/Global.h>
00015
00016 #include <memory>
00017 #include <string>
00018
00019 namespace EL
00020 {
00029
00030 class BackgroundSocket
00031 {
00032
00033
00034
00035
00037 public:
00038 enum Type
00039 {
00044 T_START_JOB,
00045
00049 T_SET_INPUT_FILE,
00050
00055 T_SET_ENTRY,
00056
00060 T_EXECUTE,
00061
00063 T_EXECUTE_CONFIRM,
00064
00069 T_END_JOB,
00070
00072 T_END_JOB_CONFIRM,
00073
00078 T_INVALID
00079 };
00080
00081
00082
00086 public:
00087 void testInvariant () const;
00088
00089
00095 public:
00096 BackgroundSocket (int val_socket);
00097
00098
00102 public:
00103 ~BackgroundSocket ();
00104
00105
00111 public:
00112 void write (Type type, const std::string& payload);
00113
00114
00120 public:
00121 void read (Type& type, std::string& payload);
00122
00123
00132 public:
00133 static void makeSockets (int sockets [2]);
00134
00140 public:
00141 static std::auto_ptr<BackgroundSocket>
00142 startWorker (const BackgroundJob& job);
00143
00144
00145
00146
00147
00148
00149
00151 private:
00152 int m_socket;
00153
00155 private:
00156 std::string m_inputBuffer;
00157
00159 private:
00160 std::string m_outputBuffer;
00161 };
00162 }
00163
00164 #endif