IPCUnix.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #ifndef ATOMIC_PLATFORM_WINDOWS
  2. #pragma once
  3. #include "../Core/Object.h"
  4. namespace Atomic
  5. {
  6. class PipePair {
  7. public:
  8. PipePair();
  9. int fd1() const { return fd_[0]; }
  10. int fd2() const { return fd_[1]; }
  11. private:
  12. int fd_[2];
  13. };
  14. class PipeUnix {
  15. public:
  16. PipeUnix();
  17. bool OpenClient(int fd);
  18. bool OpenServer(int fd);
  19. bool Write(const void* buf, size_t sz);
  20. bool Read(void* buf, size_t* sz);
  21. bool IsConnected() const { return fd_ != -1; }
  22. private:
  23. int fd_;
  24. };
  25. class PipeTransport : public PipeUnix {
  26. public:
  27. static const size_t kBufferSz = 4096;
  28. bool Send(const void* buf, size_t sz) {
  29. return Write(buf, sz);
  30. }
  31. char* Receive(size_t* size);
  32. private:
  33. PODVector<char> buf_;
  34. };
  35. class IPCProcess : public Object
  36. {
  37. OBJECT(IPCProcess)
  38. public:
  39. IPCProcess(Context* context, int fd1, int fd2, int pid = -1);
  40. virtual ~IPCProcess();
  41. bool IsRunning();
  42. int fd1() const { return fd1_; }
  43. int fd2() const { return fd2_; }
  44. bool Launch(const String& command, const Vector<String>& args, const String& initialDirectory);
  45. private:
  46. int pid_;
  47. int fd1_;
  48. int fd2_;
  49. };
  50. }
  51. #endif