AppChat  0.5.0
TCP client-server caht application with boost::asio library.
client.h
1 #ifndef CLIENT_H
2 #define CLIENT_H
3 
4 #include <iostream>
5 #include <string>
6 #include <deque>
7 #include <mutex>
8 #include <boost/asio.hpp>
9 #include "protocol/protocol.h"
10 #include <QWidget>
11 
17 class Client: public QObject {
18  Q_OBJECT
19 
20 public:
27  Client(boost::asio::io_service &io, const boost::asio::ip::tcp::resolver::results_type& eps,
28  input_request_ptr request)
29  : io_service(io), sock(io), eps(eps)
30  {
31  std::cout << "ctor client" << std::endl;
32  do_connect(eps, request);
33  }
34 
39  void write(const std::string& message);
40 
44  void write(text_request_ptr);
45 
49  void write(join_room_request_ptr);
50 
55  void set_login_id(identifier_t id) { client_id = id;}
56 
61  const char* get_login() const { return login; }
62 
66  void close_connection();
67 
71  ~Client() {
72  std::cout << "Destr client" << std::endl;
74  }
75 
76 private:
77  boost::asio::io_service &io_service;
78  boost::asio::ip::tcp::socket sock;
79  std::mutex mtx_sock;
80  const boost::asio::ip::tcp::resolver::results_type& eps;
81 
82  std::deque<packet_ptr> packets_to_server;
83 
84  char login[Block::LoginName];
85  char password[Block::Password];
86  identifier_t client_id;
87  identifier_t room_id = 0;
88 
89 private:
94  [[deprecated]]
95  input_request_ptr logon();
96 
100  void do_connect(const boost::asio::ip::tcp::resolver::results_type&, input_request_ptr);
101 
106  void send_login_request(input_request_ptr request);
107 
111  void read_response_header();
112 
116  void read_response_data(registr_response_ptr);
117 
122  void read_response_data(autor_response_ptr);
123 
128  void read_response_data(text_response_ptr);
129 
133  void send_request_header();
134 
140  void send_request_data();
141 
142 
143 signals:
150  void send_text(const std::string& from, const std::string& text, DateTime dt);
151 
155  void send_input_code(InputCode);
156 };
157 
158 #endif // CLIENT_H
Client(boost::asio::io_service &io, const boost::asio::ip::tcp::resolver::results_type &eps, input_request_ptr request)
Construct a new Client object.
Definition: client.h:27
const char * get_login() const
Login getter.
Definition: client.h:61
void send_input_code(InputCode)
send input code
void write(const std::string &message)
Send text message.
Definition: client.cpp:26
Client class.
Definition: client.h:17
void close_connection()
Finish the communication with server.
Definition: client.cpp:3
~Client()
destructor
Definition: client.h:71
Definition: datetime.h:6
void set_login_id(identifier_t id)
Setter for client_id.
Definition: client.h:55
void send_text(const std::string &from, const std::string &text, DateTime dt)