CVCMIServer.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #pragma once
  2. #include <boost/program_options.hpp>
  3. /*
  4. * CVCMIServer.h, part of VCMI engine
  5. *
  6. * Authors: listed in file AUTHORS in main folder
  7. *
  8. * License: GNU General Public License v2.0 or later
  9. * Full text of license available in license.txt file, in main folder
  10. *
  11. */
  12. class CMapInfo;
  13. class CConnection;
  14. struct CPackForSelectionScreen;
  15. class CGameHandler;
  16. namespace boost
  17. {
  18. namespace asio
  19. {
  20. namespace ip
  21. {
  22. class tcp;
  23. }
  24. class io_service;
  25. template <typename Protocol> class stream_socket_service;
  26. template <typename Protocol,typename StreamSocketService>
  27. class basic_stream_socket;
  28. template <typename Protocol> class socket_acceptor_service;
  29. template <typename Protocol,typename SocketAcceptorService>
  30. class basic_socket_acceptor;
  31. }
  32. };
  33. typedef boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > TAcceptor;
  34. typedef boost::asio::basic_stream_socket < boost::asio::ip::tcp , boost::asio::stream_socket_service<boost::asio::ip::tcp> > TSocket;
  35. class CVCMIServer
  36. {
  37. ui16 port;
  38. boost::asio::io_service *io;
  39. TAcceptor * acceptor;
  40. CConnection *firstConnection;
  41. public:
  42. CVCMIServer(); //c-tor
  43. ~CVCMIServer(); //d-tor
  44. void start();
  45. CGameHandler *initGhFromHostingConnection(CConnection &c);
  46. void newGame();
  47. void loadGame();
  48. void newPregame();
  49. #ifdef VCMI_ANDROID
  50. static void create();
  51. #endif
  52. };
  53. struct StartInfo;
  54. class CPregameServer
  55. {
  56. public:
  57. CConnection *host;
  58. int listeningThreads;
  59. std::set<CConnection *> connections;
  60. std::list<CPackForSelectionScreen*> toAnnounce;
  61. boost::recursive_mutex mx;
  62. TAcceptor *acceptor;
  63. TSocket *upcomingConnection;
  64. const CMapInfo *curmap;
  65. StartInfo *curStartInfo;
  66. CPregameServer(CConnection *Host, TAcceptor *Acceptor = nullptr);
  67. ~CPregameServer();
  68. void run();
  69. void processPack(CPackForSelectionScreen * pack);
  70. void handleConnection(CConnection *cpc);
  71. void connectionAccepted(const boost::system::error_code& ec);
  72. void initConnection(CConnection *c);
  73. void start_async_accept();
  74. enum { INVALID, RUNNING, ENDING_WITHOUT_START, ENDING_AND_STARTING_GAME
  75. } state;
  76. void announceTxt(const std::string &txt, const std::string &playerName = "system");
  77. void announcePack(const CPackForSelectionScreen &pack);
  78. void sendPack(CConnection * pc, const CPackForSelectionScreen & pack);
  79. void startListeningThread(CConnection * pc);
  80. };
  81. extern boost::program_options::variables_map cmdLineOptions;