199 lines
6.0 KiB
C++
199 lines
6.0 KiB
C++
#include <std_include.hpp>
|
|
#include "../services.hpp"
|
|
#include "../fileshare.hpp"
|
|
#include "component/platform.hpp"
|
|
|
|
#include <utilities/io.hpp>
|
|
|
|
namespace demonware
|
|
{
|
|
bdPooledStorage::bdPooledStorage() : service(58, "bdPooledStorage")
|
|
{
|
|
this->register_task(1, &bdPooledStorage::getPooledMetaDataByID);
|
|
this->register_task(5, &bdPooledStorage::_preUpload);
|
|
this->register_task(6, &bdPooledStorage::_postUploadFile);
|
|
this->register_task(8, &bdPooledStorage::remove);
|
|
this->register_task(9, &bdPooledStorage::_preDownload);
|
|
this->register_task(17, &bdPooledStorage::_preUploadSummary);
|
|
this->register_task(18, &bdPooledStorage::_postUploadSummary);
|
|
this->register_task(19, &bdPooledStorage::_preDownloadSummary);
|
|
this->register_task(20, &bdPooledStorage::_preUploadMultiPart);
|
|
this->register_task(21, &bdPooledStorage::_postUploadMultiPart);
|
|
this->register_task(22, &bdPooledStorage::_preDownloadMultiPart);
|
|
}
|
|
|
|
void bdPooledStorage::getPooledMetaDataByID(service_server* server, byte_buffer* buffer) const
|
|
{
|
|
std::vector<uint64_t> requested_files;
|
|
buffer->read_array(10, &requested_files);
|
|
|
|
auto reply = server->create_reply(this->task_id());
|
|
|
|
for (auto fileID : requested_files)
|
|
{
|
|
std::string metafile = fileshare::get_metadata_path(fileshare::get_file_name(fileID));
|
|
|
|
fileshare::FileMetadata metadata;
|
|
if (metadata.ReadMetaDataJson(metafile, metadata.FILE_STATUS_DESCRIBED)
|
|
&& utilities::io::file_exists(fileshare::get_file_path(metadata.fileName)))
|
|
{
|
|
auto taskResult = new bdFileMetaData;
|
|
metadata.MetadataTaskResult(taskResult, false);
|
|
|
|
reply->add(taskResult);
|
|
}
|
|
}
|
|
|
|
reply->send();
|
|
}
|
|
|
|
void bdPooledStorage::_preUpload(service_server* server, byte_buffer* buffer) const
|
|
{
|
|
std::string filename; uint16_t category;
|
|
buffer->read_string(&filename);
|
|
buffer->read_uint16(&category);
|
|
|
|
uint32_t timestamp = static_cast<uint32_t>(time(nullptr));
|
|
|
|
fileshare::FileMetadata metadata;
|
|
metadata.file.id = timestamp;
|
|
metadata.file.name = filename;
|
|
metadata.file.timestamp = timestamp;
|
|
|
|
metadata.author.xuid = platform::bnet_get_userid();
|
|
metadata.author.name = platform::bnet_get_username();
|
|
|
|
metadata.category = static_cast<fileshare::fileshareCategory_e>(category);
|
|
metadata.fileName = fileshare::get_file_name(metadata.file.id, metadata.category);
|
|
|
|
metadata.WriteMetaDataJson(fileshare::get_metadata_path(metadata.fileName), metadata.FILE_STATUS_UPLOADING);
|
|
|
|
auto reply = server->create_reply(this->task_id());
|
|
|
|
auto result = new bdURL;
|
|
result->m_url = fileshare::get_file_url(metadata.fileName);
|
|
result->m_serverType = 8;
|
|
result->m_serverIndex = "fs";
|
|
result->m_fileID = metadata.file.id;
|
|
|
|
reply->add(result);
|
|
reply->send();
|
|
}
|
|
|
|
void bdPooledStorage::_postUploadFile(service_server* server, byte_buffer* buffer) const
|
|
{
|
|
uint64_t fileID; uint32_t fileSize;
|
|
uint16_t serverType; std::string serverIndex;
|
|
|
|
buffer->read_uint64(&fileID);
|
|
buffer->read_uint16(&serverType);
|
|
buffer->read_string(&serverIndex);
|
|
buffer->read_uint32(&fileSize);
|
|
|
|
auto metafile = fileshare::get_metadata_path(fileshare::get_file_name(fileID));
|
|
|
|
fileshare::FileMetadata metadata;
|
|
if (metadata.ReadMetaDataJson(metafile)) {
|
|
metadata.file.size = fileSize;
|
|
metadata.fileSize = utilities::io::file_size(fileshare::get_file_path(metadata.fileName));
|
|
|
|
metadata.WriteMetaDataJson(metafile, metadata.FILE_STATUS_UPLOADED);
|
|
}
|
|
|
|
auto reply = server->create_reply(this->task_id());
|
|
|
|
auto result = new bdUInt64Result;
|
|
result->value = fileID;
|
|
reply->add(result);
|
|
|
|
reply->send();
|
|
}
|
|
|
|
void bdPooledStorage::remove(service_server* server, byte_buffer* /*buffer*/) const
|
|
{
|
|
// TODO:
|
|
auto reply = server->create_reply(this->task_id());
|
|
reply->send();
|
|
}
|
|
|
|
void bdPooledStorage::_preDownload(service_server* server, byte_buffer* buffer) const
|
|
{
|
|
uint64_t fileID;
|
|
buffer->read_uint64(&fileID);
|
|
|
|
std::string metafile = fileshare::get_metadata_path(fileshare::get_file_name(fileID));
|
|
|
|
fileshare::FileMetadata metadata;
|
|
if (metadata.ReadMetaDataJson(metafile, metadata.FILE_STATUS_DESCRIBED)
|
|
&& utilities::io::file_exists(fileshare::get_file_path(metadata.fileName)))
|
|
{
|
|
auto reply = server->create_reply(this->task_id());
|
|
|
|
auto taskResult = new bdFileMetaData;
|
|
metadata.MetadataTaskResult(taskResult, true);
|
|
reply->add(taskResult);
|
|
|
|
reply->send();
|
|
}
|
|
else
|
|
{
|
|
auto reply = server->create_reply(this->task_id(), 2000/*BD_CONTENTSTREAMING_FILE_NOT_AVAILABLE*/);
|
|
reply->send();
|
|
}
|
|
}
|
|
|
|
void bdPooledStorage::_preUploadSummary(service_server* server, byte_buffer* buffer) const
|
|
{
|
|
uint64_t fileID{}; uint32_t fileSize{};
|
|
//std::string DDL_MetaData;
|
|
buffer->read_uint64(&fileID);
|
|
buffer->read_uint32(&fileSize);
|
|
|
|
auto metafile = fileshare::get_metadata_path(fileshare::get_file_name(fileID));
|
|
|
|
fileshare::FileMetadata metadata;
|
|
if (metadata.ReadMetaDataJson(metafile)) {
|
|
buffer->read_blob(&metadata.ddl_metadata);
|
|
buffer->read_array(10, &metadata.tags);
|
|
|
|
metadata.WriteMetaDataJson(metafile, metadata.FILE_STATUS_DESCRIBED);
|
|
}
|
|
|
|
auto reply = server->create_reply(this->task_id(), 108/*BD_SERVICE_NOT_AVAILABLE*/);
|
|
reply->send();
|
|
}
|
|
|
|
void bdPooledStorage::_postUploadSummary(service_server* server, byte_buffer* /*buffer*/) const
|
|
{
|
|
auto reply = server->create_reply(this->task_id());
|
|
reply->send();
|
|
}
|
|
|
|
void bdPooledStorage::_preDownloadSummary(service_server* server, byte_buffer* /*buffer*/) const
|
|
{
|
|
// TODO:
|
|
auto reply = server->create_reply(this->task_id());
|
|
reply->send();
|
|
}
|
|
|
|
void bdPooledStorage::_preUploadMultiPart(service_server* server, byte_buffer* /*buffer*/) const
|
|
{
|
|
// TODO:
|
|
auto reply = server->create_reply(this->task_id());
|
|
reply->send();
|
|
}
|
|
|
|
void bdPooledStorage::_postUploadMultiPart(service_server* server, byte_buffer* /*buffer*/) const
|
|
{
|
|
// TODO:
|
|
auto reply = server->create_reply(this->task_id());
|
|
reply->send();
|
|
}
|
|
|
|
void bdPooledStorage::_preDownloadMultiPart(service_server* server, byte_buffer* /*buffer*/) const
|
|
{
|
|
// TODO:
|
|
auto reply = server->create_reply(this->task_id());
|
|
reply->send();
|
|
}
|
|
} |