#include "FileIncoming.h"
#include "../utils/Utils.h"
#include
namespace Transfer
{
FileIncoming::FileIncoming(std::string &&fileTmpName, std::string &&fileName, std::string &&fileType, const size_t fileSize) noexcept
: file_tmp_name(std::move(fileTmpName) ), file_name(std::move(fileName) ),
file_type(std::move(fileType) ), file_size(fileSize)
{
}
FileIncoming::FileIncoming(const FileIncoming &obj)
: file_tmp_name(obj.file_tmp_name), file_name(obj.file_name),
file_type(obj.file_type), file_size(obj.file_size)
{
}
FileIncoming::FileIncoming(FileIncoming &&obj) noexcept
: file_tmp_name(std::move(obj.file_tmp_name) ), file_name(std::move(obj.file_name) ),
file_type(std::move(obj.file_type) ), file_size(obj.file_size)
{
obj.file_size = 0;
}
const std::string &FileIncoming::getTmpName() const noexcept
{
return this->file_tmp_name;
}
const std::string &FileIncoming::getName() const noexcept
{
return this->file_name;
}
const std::string &FileIncoming::getType() const noexcept
{
return this->file_type;
}
size_t FileIncoming::getSize() const noexcept
{
return this->file_size;
}
bool FileIncoming::isExists() const noexcept
{
std::ifstream file(this->file_tmp_name, std::ifstream::binary);
const bool is_exists = file.good();
file.close();
return is_exists;
}
};
namespace Utils
{
void packFilesIncoming(std::vector &buf, const std::unordered_multimap &map)
{
packNumber(buf, map.size() );
for (auto it = map.cbegin(); map.cend() != it; ++it)
{
packString(buf, it->first);
const Transfer::FileIncoming &file = it->second;
packString(buf, file.getTmpName() );
packString(buf, file.getName() );
packString(buf, file.getType() );
packNumber(buf, file.getSize() );
}
}
const uint8_t *unpackFilesIncoming(std::unordered_multimap &map, const uint8_t *src)
{
size_t count;
src = unpackNumber(&count, src);
for (size_t i = 0; i < count; ++i)
{
std::string key;
src = unpackString(key, src);
std::string file_tmp_name;
src = unpackString(file_tmp_name, src);
std::string file_name;
src = unpackString(file_name, src);
std::string file_type;
src = unpackString(file_type, src);
size_t file_size;
src = unpackNumber(&file_size, src);
map.emplace(std::move(key), Transfer::FileIncoming(std::move(file_tmp_name), std::move(file_name), std::move(file_type), file_size) );
}
return src;
}
};