Rehti MMORPG  1.0.0
Rehti MMORPG is a free and open source MMORPG game.
Client.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <boost/asio/awaitable.hpp>
4 
5 #include "RehtiReader.hpp"
6 #include "graphics.h"
7 #include <audio.h>
8 #include <network.h>
9 
10 class Client
11 {
12 public:
13  Client(std::string ip, std::string port);
14 
20  boost::asio::awaitable<bool> connect();
21 
27  boost::asio::awaitable<void> attack(const int& targetId);
28 
35  boost::asio::awaitable<void> move(const int& x, const int& y);
36 
42  boost::asio::awaitable<void> interactWithObject(const int& objectId);
43 
50  boost::asio::awaitable<void> pickUpItem(const int& itemId, const int& x, const int& y);
51 
56  boost::asio::awaitable<void> useItem(const int itemInstanceId);
57 
62  boost::asio::awaitable<void> dropItem(const int itemInstanceId);
63 
68  boost::asio::awaitable<void> unequipItem(const int itemInstanceId);
69 
75  boost::asio::awaitable<void> talk(const int& npcId);
76 
80  void start();
81 
86  boost::asio::awaitable<bool> login();
87 
91  void processMessages();
92 
96  void startGraphics();
97 
102  void handleMouseClick(const Hit& hit);
103 
104 private:
105  boost::asio::io_context ioContextM;
106  boost::asio::ip::tcp::resolver resolverM;
107  boost::asio::ip::tcp::resolver::results_type endpointsM;
108  boost::asio::executor_work_guard<boost::asio::io_context::executor_type> workGuardM;
109 
110  MessageQueue messagesM;
111  std::unique_ptr<Connection> connectionM;
112 
113  std::thread graphicsThreadM;
114  std::thread connectionThreadM;
115  std::thread ioThreadM;
116 
118  std::condition_variable graphLibReadyM;
119  bool graphLibReadyFlagM = false;
120  std::mutex graphLibMutexM;
121 
122  RehtiAudio audioLibM;
123 
125 
126  GameStateMessage prevGameStateMsgM;
127 
129 };
Loads all of the assets into memory (objects, textures, etc.).
Definition: AssetCache.hpp:17
static AssetCache & getInstance()
Returns the singleton instance of the AssetCache.
Definition: AssetCache.hpp:22
Definition: Client.hpp:11
boost::asio::io_context ioContextM
Definition: Client.hpp:105
boost::asio::awaitable< void > interactWithObject(const int &objectId)
Sends an object interaction message to the server.
Definition: Client.cpp:130
boost::asio::awaitable< void > talk(const int &npcId)
Send talk message to the server.
Definition: Client.cpp:109
GameStateMessage prevGameStateMsgM
Previous game state message.
Definition: Client.hpp:126
boost::asio::awaitable< bool > connect()
Connects to the server.
Definition: Client.cpp:78
boost::asio::executor_work_guard< boost::asio::io_context::executor_type > workGuardM
Definition: Client.hpp:108
boost::asio::awaitable< void > attack(const int &targetId)
Sends an attack message to the server.
Definition: Client.cpp:99
boost::asio::awaitable< void > pickUpItem(const int &itemId, const int &x, const int &y)
Sends a PickUpItemMessage to the server.
Definition: Client.cpp:140
boost::asio::awaitable< void > useItem(const int itemInstanceId)
Send a UseItemMessage for item with given instance id.
Definition: Client.cpp:153
void handleMouseClick(const Hit &hit)
Handles a mouse click hit on the graphics window.
Definition: Client.cpp:387
boost::asio::awaitable< bool > login()
Prompts user for login information and sends a LoginMessage with that information....
Definition: Client.cpp:48
std::mutex graphLibMutexM
Definition: Client.hpp:120
boost::asio::awaitable< void > unequipItem(const int itemInstanceId)
Send a UnequipMessage for item with given instance id.
Definition: Client.cpp:175
boost::asio::awaitable< void > move(const int &x, const int &y)
Sends a move message to the server.
Definition: Client.cpp:119
void start()
Starts the client.
Definition: Client.cpp:29
boost::asio::awaitable< void > dropItem(const int itemInstanceId)
Send a DropItemMessage for item with given instance id.
Definition: Client.cpp:164
void startGraphics()
Starts the graphics library.
Definition: Client.cpp:438
std::thread ioThreadM
Definition: Client.hpp:115
bool graphLibReadyFlagM
GraphLib ready flag.
Definition: Client.hpp:119
std::condition_variable graphLibReadyM
GraphLib ready lock.
Definition: Client.hpp:118
AssetCache & assetCacheM
Definition: Client.hpp:128
std::thread graphicsThreadM
Definition: Client.hpp:113
MessageQueue messagesM
Definition: Client.hpp:110
boost::asio::ip::tcp::resolver::results_type endpointsM
Definition: Client.hpp:107
std::thread connectionThreadM
Definition: Client.hpp:114
Client(std::string ip, std::string port)
Definition: Client.cpp:12
Hit lastHitM
Last detected hit from a mouse click.
Definition: Client.hpp:124
RehtiAudio audioLibM
Definition: Client.hpp:122
std::unique_ptr< Connection > connectionM
Definition: Client.hpp:111
RehtiGraphics * pGraphLibM
Definition: Client.hpp:117
boost::asio::ip::tcp::resolver resolverM
Definition: Client.hpp:106
void processMessages()
Processes messages from the server.
Definition: Client.cpp:186
Definition: RehtiGraphics.hpp:60
Definition: BasicTypes.hpp:153