Files
ylib/include/net/ftp_client.h
2024-05-29 00:00:47 +08:00

61 lines
1.9 KiB
C++

#pragma once
#include "define.h"
#include "util/file.h"
#include "util/thread.h"
#include "base/error.h"
#if USE_NET_FTP
namespace ylib
{
namespace network
{
namespace ftp
{
class client;
typedef void(*CALLBACK_FTPCLIENT_DOWNLOADING)(class ylib::network::ftp::client* client, uint32 all_size, uint32 down_size, uint64 param);
typedef void(*CALLBACK_FTPCLIENT_DOWNLOADED)(class ylib::network::ftp::client* client, bool result, uint64 param);
struct DownInfo
{
~DownInfo()
{
if (file != nullptr)
{
file->close();
delete file;
}
}
ylib::file_io* file = nullptr;
uint32 size = 0;
void* fileptr = nullptr;
std::string local_path;
std::string remote_path;
uint64 param = 0;
CALLBACK_FTPCLIENT_DOWNLOADING downloading = nullptr;
CALLBACK_FTPCLIENT_DOWNLOADED downloaded = nullptr;
bool ok = false;
};
class client :public ylib::error_base, private ylib::ithread
{
public:
client();
~client();
bool connect(const std::string& ipaddress, const std::string& username, const std::string& password, ushort port);
void close();
bool upload(const std::string& local_filepath, const std::string& remote_filepath);
bool download(const std::string& local_filepath, const std::string& remote_filepath, size_t param, CALLBACK_FTPCLIENT_DOWNLOADING downloading, CALLBACK_FTPCLIENT_DOWNLOADED downloaded);
void wait();
bool download(const std::string& local_filepath, const std::string& remote_filepath);
bool create_dir(const std::string& remote_path);
bool delete_dir(const std::string& remote_path);
bool delete_file(const std::string& remote_path);
private:
void* m_ptr = nullptr;
DownInfo* m_download = nullptr;
CALLBACK_FTPCLIENT_DOWNLOADING m_cb_downloading = nullptr;
CALLBACK_FTPCLIENT_DOWNLOADED m_cb_downloaded = nullptr;
virtual bool run() override;
};
}
}
};
#endif