AppChat  0.5.0
TCP client-server caht application with boost::asio library.
transport_request.h
1 #ifndef TRANSPORTREQUEST_H
2 #define TRANSPORTREQUEST_H
3 
4 #include "request.h"
5 
6 class TransportRequest : public Request {
7 public:
9  std::memcpy(header, &PROTOCOL_VERS, Block::VersionProtocol);
10  }
11  virtual const void* get_data() const override { return __data; }
12  virtual void* get_data() override { return __data; }
13 
14  virtual const char* get_login() const {
15  return __data;
16  }
17 
18  virtual identifier_t get_roomid() const {
26  identifier_t roomid;
27  std::memcpy(&roomid, __data + Block::LoginName, sizeof(identifier_t));
28  return roomid;
29  }
30 
31  virtual uint32_t get_length_data() const override { return LengthRequest;}
32 
33 protected:
34  static constexpr uint32_t LengthRequest = Block::LoginName + Block::RoomId + Block::TextMessage;
35  char __data[LengthRequest];
36 };
37 
38 class TextRequest : public TransportRequest {
39 public:
40  TextRequest() {
41 // std::memcpy(header, &PROTOCOL_VERS, Block::VersionProtocol);
42  std::memcpy(header+Block::VersionProtocol, &type_request, Block::Command);
43  }
44 
45  TextRequest(const std::string& login, identifier_t roomid, const std::string& text) {
46 // std::memcpy(header, &PROTOCOL_VERS, Block::VersionProtocol);
47  std::memcpy(header+Block::VersionProtocol, &type_request, Block::Command);
48  std::snprintf(__data, Block::LoginName, "%s", login.data());
49  std::memcpy(__data+Block::LoginName, &roomid, Block::RoomId);
50  std::snprintf(__data+Block::LoginName+Block::RoomId, Block::TextMessage, "%s", text.data());
51  }
52 
53  TextRequest(request_ptr request) {
54  std::memcpy(header, request->get_header(), Block::Header);
55  std::memcpy(header, &PROTOCOL_VERS, Block::VersionProtocol);
56  std::memcpy(header+Block::VersionProtocol, &type_request, Block::Command);
57  }
58 
59  const char* get_message() const {
60  return __data+Block::LoginName+Block::RoomId;
61  }
62 private:
63  const TypeCommand type_request = TypeCommand::EchoRequest;
64 };
65 
66 using text_request_ptr = std::shared_ptr<TextRequest>;
67 
68 #endif // TRANSPORTREQUEST_H
Definition: request.h:7
Definition: transport_request.h:6
Definition: transport_request.h:38
virtual identifier_t get_roomid() const
Definition: transport_request.h:18