ioman.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #ifndef IOMAN_H
  2. #define IOMAN_H
  3. #include "cmdman.h"
  4. #include "fileman.h"
  5. #include <boost/asio.hpp>
  6. #include <condition_variable>
  7. #include <mutex>
  8. #include <string>
  9. #include <thread>
  10. #include <vector>
  11. using boost::asio::ip::tcp;
  12. class IoMan {
  13. private:
  14. boost::asio::io_service ios;
  15. boost::asio::streambuf sendbuf;
  16. boost::asio::streambuf recvbuf;
  17. boost::system::error_code errcode;
  18. tcp::socket *tcpsock;
  19. std::string ipstring;
  20. int port;
  21. bool connected;
  22. CmdMan cmdman;
  23. FileMan fileman;
  24. /*
  25. 3 threads: handleinput, handlenetwork, handleresponse
  26. */
  27. std::thread tinput, tnetwork, tresponse;
  28. std::mutex mainmutex, inputmutex, networkmutex, responsemutex;
  29. bool runmain, runinput, runnetwork, runresponse;
  30. std::vector<Json::Value> netinput;
  31. std::vector<std::string> localinput;
  32. std::mutex netmutex, localmutex;
  33. std::condition_variable netcv, localcv;
  34. /*
  35. to be put elsewhere
  36. */
  37. Json::CharReader *reader;
  38. Json::StreamWriterBuilder wbuilder;
  39. string jsonerror;
  40. void networkMain();
  41. void inputMain();
  42. void responseMain();
  43. enum Status { off, on, err };
  44. Status versionstatus;
  45. Status loginstatus;
  46. std::mutex initmutex;
  47. std::condition_variable initcv;
  48. bool startlist;
  49. protected:
  50. enum OutMsgType { normal, error, debug };
  51. std::mutex msgmutex;
  52. virtual void printMessage(std::string msg, OutMsgType type);
  53. virtual void printWelcomeMessage() = 0;
  54. virtual std::string getCmdPrompt() = 0;
  55. virtual std::string getUserPrompt() = 0;
  56. virtual std::string getPassPrompt() = 0;
  57. public:
  58. // Basic constructor
  59. IoMan(char *ipcstring);
  60. // destructor to clean up all generic stuff
  61. ~IoMan();
  62. // enters loop to handle further interaction based on derived class
  63. void run();
  64. // setup stuff
  65. bool init();
  66. // tries to establish connection, returns error string if applicable
  67. bool connect();
  68. // disconnect from server
  69. void disconnect();
  70. };
  71. #endif