CVCMIServer.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #ifndef __CVCMISERVER_H__
  2. #define __CVCMISERVER_H__
  3. #include "../global.h"
  4. #include <set>
  5. #include <boost/thread/recursive_mutex.hpp>
  6. /*
  7. * CVCMIServer.h, part of VCMI engine
  8. *
  9. * Authors: listed in file AUTHORS in main folder
  10. *
  11. * License: GNU General Public License v2.0 or later
  12. * Full text of license available in license.txt file, in main folder
  13. *
  14. */
  15. class CMapInfo;
  16. class CConnection;
  17. struct CPackForSelectionScreen;
  18. class CGameHandler;
  19. namespace boost
  20. {
  21. namespace asio
  22. {
  23. namespace ip
  24. {
  25. class tcp;
  26. }
  27. class io_service;
  28. template <typename Protocol> class stream_socket_service;
  29. template <typename Protocol,typename StreamSocketService>
  30. class basic_stream_socket;
  31. template <typename Protocol> class socket_acceptor_service;
  32. template <typename Protocol,typename SocketAcceptorService>
  33. class basic_socket_acceptor;
  34. }
  35. };
  36. typedef boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > TAcceptor;
  37. typedef boost::asio::basic_stream_socket < boost::asio::ip::tcp , boost::asio::stream_socket_service<boost::asio::ip::tcp> > TSocket;
  38. class CVCMIServer
  39. {
  40. boost::asio::io_service *io;
  41. TAcceptor * acceptor;
  42. CConnection *firstConnection;
  43. public:
  44. CVCMIServer(); //c-tor
  45. ~CVCMIServer(); //d-tor
  46. void start();
  47. void startDuel(const std::string &battle, const std::string &leftAI, const std::string &rightAI, int howManyClients);
  48. CGameHandler *initGhFromHostingConnection(CConnection &c);
  49. void newGame();
  50. void loadGame();
  51. void newPregame();
  52. };
  53. class CPregameServer
  54. {
  55. public:
  56. CConnection *host;
  57. int listeningThreads;
  58. std::set<CConnection *> connections;
  59. std::list<CPackForSelectionScreen*> toAnnounce;
  60. boost::recursive_mutex mx;
  61. //std::vector<CMapInfo> maps;
  62. TAcceptor *acceptor;
  63. TSocket *upcomingConnection;
  64. const CMapInfo *curmap;
  65. StartInfo *curStartInfo;
  66. CPregameServer(CConnection *Host, TAcceptor *Acceptor = NULL);
  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. #endif // __CVCMISERVER_H__