CVCMIServer.h 2.4 KB

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