Distribution_Service/CC_SDK/Include/CCServlet/CCResponse.h
2025-12-03 18:08:23 +08:00

179 lines
5.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef CCWeb_Response_H
#define CCWeb_Response_H
#pragma once
// 检查宏定义
#ifdef Status
#undef Status
#endif
#include "CCRequest.h"
#include <openssl/ssl.h>
#include <openssl/err.h>
#include "TL/Queue.h"
/**
* @namespace CTL
* @brief 该命名空间包含处理 Web 请求和响应的类和函数。
*/
namespace CTL {
/**
* @class Response
* @brief 该类用于处理 HTTP 响应,包括向客户端发送文件、资源和自定义内容。
*/
class Response{
public:
~Response();
/**
* @brief 初始化响应对象。
*
* @param channel 客户端套接字。
* @param cors 跨域资源共享 (CORS) 设置,如果不需要 CORS 可以传入 nullptr。
*/
void Init(HttpSocketChannel* channel, CORS* cors);
/**
* @brief 设置响应的路由地址。
*
* @param url 路由地址。
*/
void setUrl(const String& url);
/**
* @brief 向客户端发送文件作为响应。
*
* @param Path 文件路径。
* @param Status_t 发送的 HTTP 状态码,默认为 200。
* @return 如果文件发送成功返回 true否则返回 false。
*/
bool ResponseFile(const CTL::String& Path, int Status_t = 200);
/**
* @brief 向客户端发送资源作为响应。
*
* @param Data 资源数据。
* @param Status_t 发送的 HTTP 状态码,默认为 200。
* @return 如果资源发送成功返回 true否则返回 false。
*/
bool Resource(const CCVector<char>& Data, int Status_t = 200);
/**
* @brief 向客户端发送可下载的文件资源。
*
* @param Path 文件路径。
* @param SendBufferSize 发送缓冲区大小,默认为 4096 字节。
* @return 如果文件发送成功返回 true否则返回 false。
*/
bool ResourceDownload(const CTL::String& Path, int SendBufferSize = 4096);
/**
* @brief 设置响应头信息。
*
* @param Key 头信息键。
* @param value 头信息值。
*/
void SetHeader(const CTL::String& Key, const CTL::String& value);
/**
* @brief 向客户端写入字符串数据。
*
* @param Data 要发送的数据。
* @return 如果数据发送成功返回 true否则返回 false。
*/
bool Write(const CTL::String& Data);
/**
* @brief 向客户端发送原始数据。
*
* @param buffer 数据缓冲区。
* @param size 缓冲区大小。
* @return 如果数据发送成功返回 true否则返回 false。
*/
bool SendData(const char* buffer, size_t size);
/**
* @brief 向客户端写入字符向量数据,并设置状态码。
*
* @param Data 要发送的数据。
* @param Status_t 发送的 HTTP 状态码。
* @return 如果数据发送成功返回 true否则返回 false。
*/
bool Write(const CCVector<char>& Data, int Status_t);
/**
* @brief 向客户端写入字符串数据,并设置状态码。
*
* @param Data 要发送的数据。
* @param Status_t 发送的 HTTP 状态码。
* @return 如果数据发送成功返回 true否则返回 false。
*/
bool Write(const CTL::String& Data, int Status_t);
/**
* @brief 处理路由响应。
*/
void ResponseRouting();
/**
* @brief 写入响应头信息。
*
* @param Status_t HTTP 状态码。
* @param ContentType 内容类型。
*/
void WriteHeader(int Status_t, const CTL::String& ContentType);
/**
* @brief 处理范围请求的媒体文件。
*
* @param request 请求对象。
* @param path 文件路径。
* @param Content_Type 内容类型,默认为 "-.-"。
*/
void RangeMediaFile(Request request, const CTL::String& path, CTL::String Content_Type = "-.-");
/**
* @brief 让浏览器重新访问另一个URL。
*
* @param url 对象链接。
*/
void SendRedirect(const String& url);
private:
/**
* @brief 发送响应头信息。
*
* @param Status_t HTTP 状态码。
* @param HeaderFlag HTTP 头 末尾标志。
*/
void SendHeader(int Status_t, const CTL::String& HeaderFlag = "OK");
/**
* @brief 发送响应头信息。
*
* @param Status_t HTTP 状态码。
* @param HeaderFlag HTTP 头 末尾标志。
*/
String GetHeader(int Status_t, const CTL::String& HeaderFlag = "OK");
private:
inline static CCMutex _mutex;
// 文件头信息映射表。
CCMap<CTL::String, CTL::String> FileHeaders;
// 自定义响应头信息映射表。
CCMap<CTL::String, CTL::String> Headers;
// 客户端套接字。
HttpSocketChannel* channel = nullptr;
// CORS 设置。
CORS* CORS_ = nullptr;
String m_url;
// EventLoop* m_eventLoop = nullptr;
public:
};
}
#endif