Merge pull request #86 from Douwanna/release/2.4

Update notes.
This commit is contained in:
FrankLee 2020-06-03 09:17:19 +08:00 committed by GitHub
commit 5655c54c32
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 138 additions and 5 deletions

View File

@ -40,11 +40,13 @@ namespace tars
/** /**
* @file tc_epoller.h * @file tc_epoller.h
* @brief epoll操作封装类 * @brief epoll操作封装类
* @brief Epoll operation encapsulation class
*/ */
///////////////////////////////////////////////// /////////////////////////////////////////////////
/** /**
* @brief epoll异常类 * @brief epoll异常类
* @brief epoll exception class
*/ */
struct TC_Epoller_Exception : public TC_Exception struct TC_Epoller_Exception : public TC_Exception
{ {
@ -54,12 +56,14 @@ struct TC_Epoller_Exception : public TC_Exception
/** /**
* @brief epoller操作类EPOLLET方式做触发 * @brief epoller操作类EPOLLET方式做触发
* @brief epoller operation class, EPOLLET has been used by default for triggering
*/ */
class TC_Epoller class TC_Epoller
{ {
public: public:
/** /**
* @brief epoll从wait中醒过来 * @brief epoll从wait中醒过来
* @brief Notice epoll to wake up from 'wait'
*/ */
class NotifyInfo class NotifyInfo
{ {
@ -69,31 +73,37 @@ public:
/** /**
* *
* Initialization
*/ */
void init(TC_Epoller *ep); void init(TC_Epoller *ep);
/** /**
* *
* Add corresponding data
*/ */
void add(uint64_t data); void add(uint64_t data);
/** /**
* notify醒过来 * notify醒过来
* Notice notify to wake up
*/ */
void notify(); void notify();
/** /**
* *
* Diposit
*/ */
void release(); void release();
/** /**
* fd * fd
* Get notifyFd
*/ */
int notifyFd(); int notifyFd();
/** /**
* , * ,
* Clear up notice, otherwise, it will always respond
*/ */
// void clear(); // void clear();
protected: protected:
@ -103,26 +113,32 @@ public:
// bool _clear = true; // bool _clear = true;
TC_Epoller *_ep; TC_Epoller *_ep;
/*Events associated with the notification handle*/
uint64_t _data; //关联到通知句柄的事件 uint64_t _data; //关联到通知句柄的事件
}; };
/** /**
* @brief . * @brief .
* @brief Constructor Function
* *
* @param bEt ET模式 * @param bEt ET模式
* @param bEt The default is et mode, which is notified when the status changes
*/ */
TC_Epoller(); TC_Epoller();
/** /**
* @brief . * @brief .
* @brief Destructor
*/ */
~TC_Epoller(); ~TC_Epoller();
/** /**
* @brief epoll句柄. * @brief epoll句柄.
* @brief Generate epoll handle.
* *
* @param max_connections epoll服务需要支持的最大连接数 * @param max_connections epoll服务需要支持的最大连接数
* @param max_connections Maximum number of connections the epoll service needs to support
*/ */
void create(int max_connections); void create(int max_connections);
@ -135,49 +151,66 @@ public:
/** /**
* @brief . * @brief .
* @brief Add listening handle.
* *
* @param fd * @param fd
* @param fd handle
* @param data , epoll_event中获取到 * @param data , epoll_event中获取到
* @param data auxiliary data that can be obtained in epoll_event subsequently
* @param event EPOLLIN|EPOLLOUT * @param event EPOLLIN|EPOLLOUT
* @param event Events to be listened on EPOLLIN|EPOLLOUT
* *
*/ */
void add(SOCKET_TYPE fd, uint64_t data, int32_t event); void add(SOCKET_TYPE fd, uint64_t data, int32_t event);
/** /**
* @brief . * @brief .
* @brief Modify handle event
* *
* @param fd * @param fd
* @param fd handle
* @param data , epoll_event中获取到 * @param data , epoll_event中获取到
* @param data auxiliary data that can be obtained in epoll_event subsequently
* @param event EPOLLIN|EPOLLOUT * @param event EPOLLIN|EPOLLOUT
* @param event Events to be listened on EPOLLIN|EPOLLOUT
*/ */
void mod(SOCKET_TYPE fd, uint64_t data, int32_t event); void mod(SOCKET_TYPE fd, uint64_t data, int32_t event);
/** /**
* @brief . * @brief .
* @brief Delete handle event.
* *
* @param fd * @param fd
* @param fd handle
* @param data , epoll_event中获取到 * @param data , epoll_event中获取到
* @param data auxiliary data that can be obtained in epoll_event subsequently
* @param event EPOLLIN|EPOLLOUT * @param event EPOLLIN|EPOLLOUT
* @param event Events to be listened on EPOLLIN|EPOLLOUT
*/ */
void del(SOCKET_TYPE fd, uint64_t data, int32_t event); void del(SOCKET_TYPE fd, uint64_t data, int32_t event);
/** /**
* @brief . * @brief .
* @brief wait time
* *
* @param millsecond * @param millsecond
* @return int * @return int
* @return int Number of handles triggered by events
*/ */
int wait(int millsecond); int wait(int millsecond);
/** /**
* @brief . * @brief .
* @brief Get the triggered handle
* *
* @return struct epoll_event& * @return struct epoll_event&
* @return Struct epoll_event& triggered event
*/ */
epoll_event& get(int i);// { assert(_pevs != 0); return _pevs[i]; } epoll_event& get(int i);// { assert(_pevs != 0); return _pevs[i]; }
/** /**
* @brief * @brief
* @brief whether it have event to read
* *
* @return * @return
*/ */
@ -185,6 +218,7 @@ public:
/** /**
* @brief * @brief
* @brief whether it have event to write
* *
* @return * @return
*/ */
@ -192,6 +226,7 @@ public:
/** /**
* @brief * @brief
* @brief whether it have eception event
* *
* @return * @return
*/ */
@ -199,13 +234,16 @@ public:
/** /**
* @brief / * @brief /
* @brief Get low/high bit data
* @param high: true:, false: * @param high: true:, false:
* @param high: true:high level, false:low level
* @return * @return
*/ */
static uint32_t getU32(const epoll_event &ev, bool high); static uint32_t getU32(const epoll_event &ev, bool high);
/** /**
* @brief 64bit数据 * @brief 64bit数据
* @brief Get 64 bit data
* @return * @return
*/ */
static uint64_t getU64(const epoll_event &ev); static uint64_t getU64(const epoll_event &ev);
@ -214,12 +252,19 @@ protected:
/** /**
* @brief epollEPOLL设为边缘触发EPOLLET模式 * @brief epollEPOLL设为边缘触发EPOLLET模式
* @brief Control epoll, set EPOLL to Edge Trigger EPOLLET mode
* @param fd create函数时被赋值 * @param fd create函数时被赋值
* @param fd Handle, assigned when creating function
* @param data , epoll_event中获取到 * @param data , epoll_event中获取到
* @param data auxiliary data that can be obtained in epoll_event subsequently
* @param event * @param event
* @param event the event to be listened
* @param op EPOLL_CTL_ADD fd到epfd中 * @param op EPOLL_CTL_ADD fd到epfd中
* EPOLL_CTL_MODfd的监听事件 * EPOLL_CTL_MODfd的监听事件
* EPOLL_CTL_DELepfd中删除一个fd * EPOLL_CTL_DELepfd中删除一个fd
* @param op EPOLL_CTL_ADDRegister new FD into EPFD
* EPOLL_CTL_MODModify the monitoring events for registered fd
* EPOLL_CTL_DELDelete an FD from epfd
* *
*/ */
void ctrl(SOCKET_TYPE fd, uint64_t data, uint32_t events, int op); void ctrl(SOCKET_TYPE fd, uint64_t data, uint32_t events, int op);
@ -237,11 +282,13 @@ protected:
/** /**
* *
* The max amount of connections
*/ */
int _max_connections; int _max_connections;
/** /**
* *
* Event Set
*/ */
epoll_event *_pevs; epoll_event *_pevs;
}; };

View File

@ -28,40 +28,52 @@ namespace tars
/** /**
* @file tc_ex.h * @file tc_ex.h
* @brief * @brief
* @brief Exception Class
*/ */
///////////////////////////////////////////////// /////////////////////////////////////////////////
/** /**
* @brief . * @brief .
* @brief Exception Class
*/ */
class TC_Exception : public exception class TC_Exception : public exception
{ {
public: public:
/** /**
* @brief errno的构造函数 * @brief errno的构造函数
* @brief Constructor , provide a constructor which can pass errno
* @param err, (linux版本, errno获取错误码, windows版本, GetLastError()) * @param err, (linux版本, errno获取错误码, windows版本, GetLastError())
* @param err Whether system error information is included(linux: use errno to get error code, windows: use GetLastError() to get errors)
* *
* @param buffer * @param buffer
* @param buffer alert information of exceptions
*/ */
explicit TC_Exception(const string &buffer); explicit TC_Exception(const string &buffer);
/** /**
* @brief ,errno的构造函数 * @brief ,errno的构造函数
* @brief Constructor , provider a constructor to pass errno
* *
* *
* get error message directly when throw exception
* *
* @param buffer * @param buffer
* @param buffer alert information of exceptions
*
* @param errno :errno, windows版本 :GetLastError() * @param errno :errno, windows版本 :GetLastError()
* @param errno pass:errno, windows version pass:GetLastError()
*/ */
TC_Exception(const string &buffer, int err); TC_Exception(const string &buffer, int err);
/** /**
* @brief * @brief
* @brief Destructor
*/ */
virtual ~TC_Exception() throw(); virtual ~TC_Exception() throw();
/** /**
* @brief . * @brief .
* @brief Error Message
* *
* @return const char* * @return const char*
*/ */
@ -69,22 +81,28 @@ public:
/** /**
* @brief * @brief
* @brief Get error code
* *
* @return 0 * @return 0
* @return if get successfully , return 0
*/ */
int getErrCode() { return _code; } int getErrCode() { return _code; }
/** /**
* @brief (linux是errno, windows是GetLastError()) * @brief (linux是errno, windows是GetLastError())
* @brief Get the error string (linux: errno, windows: GetLastError())
* *
* @return 0 * @return 0
* @return if get successfully , return 0
*/ */
static string parseError(int err); static string parseError(int err);
/** /**
* @brief (linux是errno, windows是GetLastError) * @brief (linux是errno, windows是GetLastError)
* @brief Get system error code(linux: errno, windows: GetLastError())
* *
* @return 0 * @return 0
* @return if get successfully , return 0
*/ */
static int getSystemCode(); static int getSystemCode();
@ -95,18 +113,23 @@ private:
/** /**
* *
* Error Code
*/ */
int _code; int _code;
/** /**
* *
* Information about exceptions
*/ */
string _buffer; string _buffer;
}; };
//为了避免windows平台GetLastError()获取不对的问题, 因为抛异常, throw TC_Exception("xxxx", TC_Exception::getSystemCode())时 //为了避免windows平台GetLastError()获取不对的问题, 因为抛异常, throw TC_Exception("xxxx", TC_Exception::getSystemCode())时
//In order to avoid getting the wrong getlasterror() on Windows platform, throw TC_ Exception("xxxx", TC_ Exception:: getsystemcode())
//回调用系统函数分配内存, 导致错误码被改写, 因此专门定义宏来抛出异常 //回调用系统函数分配内存, 导致错误码被改写, 因此专门定义宏来抛出异常
//Callback uses system function to allocate memory, which causes error code to be rewritten, so it specially defines macro to throw exception
//先获取到错误码, 再throw //先获取到错误码, 再throw
//Get the error code first, and then throw
#define THROW_EXCEPTION_SYSCODE(EX_CLASS, buffer) \ #define THROW_EXCEPTION_SYSCODE(EX_CLASS, buffer) \
{ \ { \
int ret = TC_Exception::getSystemCode(); \ int ret = TC_Exception::getSystemCode(); \

View File

@ -29,11 +29,13 @@ namespace tars
/** /**
*@file tc_fifo.h *@file tc_fifo.h
*@brief FIFO封装类. *@brief FIFO封装类.
*@brief FIFO encapsulation class
*/ */
///////////////////////////////////////////////// /////////////////////////////////////////////////
/** /**
*@brief . *@brief .
*@brief Pipeline operation.
*/ */
class TC_Fifo class TC_Fifo
{ {
@ -42,6 +44,8 @@ public:
/** /**
* @brief . * @brief .
* EM_WRITEEM_READ * EM_WRITEEM_READ
* @brief Enumeration types for pipeline operations
* Defines the type of operation on the pipeline, EM_ Write: write pipe, EM_ Read: read pipe
*/ */
enum ENUM_RW_SET enum ENUM_RW_SET
{ {
@ -52,75 +56,99 @@ public:
public: public:
/** /**
* @brief . * @brief .
* @brief Constructor
* *
* @param bOwener : ture * @param bOwener : ture
* @param bOwener : Whether the pipeline is owned, the default is ture
*/ */
TC_Fifo(bool bOwener = true); TC_Fifo(bool bOwener = true);
/** /**
* @brief . * @brief .
* @brief Constructor
*/ */
~TC_Fifo(); ~TC_Fifo();
public: public:
/** /**
* @brief FIFO. * @brief FIFO.
* @brief Open FIFO
* *
* @param sPath FIFO文件的路径 * @param sPath FIFO文件的路径
* @param sPath the file path of the FIFO to open
* @param enRW * @param enRW
* @param enRN Pipe opration type
* @param mode FIFO文件的权限 * @param mode FIFO文件的权限
* @param mode The permissions of this FIFO file are read-write by default
* @return 0-,-1- * @return 0-,-1-
* @return 0 - successfull, -1 - failed
*/ */
int open(const std::string & sPath, ENUM_RW_SET enRW, mode_t mode = 0777); int open(const std::string & sPath, ENUM_RW_SET enRW, mode_t mode = 0777);
/** /**
* @brief fifo * @brief fifo
* @brief Close FIFO
*/ */
void close(); void close();
/** /**
* @brief FIFO的文件描述符. * @brief FIFO的文件描述符.
* @brief Get the file descriptor of FIFO
* *
* @return FIFO的文件描述符 * @return FIFO的文件描述符
* @return the file descriptor of FIFO
*/ */
int fd() const { return _fd; } int fd() const { return _fd; }
/** /**
* @brief , 00 * @brief , 00
* @brief read data, when read successfully, return the actual number of bytes read, if the value returned is 0, the end of the file has been read; less than 0 indicates an error
* @param buffer * @param buffer
* @param buffer the content to be read
* @param max_size * @param max_size
* @param max_size size of the data to be read
* @return ,0 * @return ,0
* @return the length of the read data , if it is less then 0, read failed
*/ */
int read(char * szBuff, const size_t sizeMax); int read(char * szBuff, const size_t sizeMax);
/** /**
* @brief . * @brief .
* @brief Write data to the pipeline
* *
* @param szBuff * @param szBuff
* @param szBuff data to be wrote
* @param sizeBuffLen * @param sizeBuffLen
* @param sizeBuffLen size of data
* @return 0 * @return 0
* 0 * 0
* @return geater than 0: Some or all of the data are shown and written
* less than 0: Error
*/ */
int write(const char * szBuff, const size_t sizeBuffLen); int write(const char * szBuff, const size_t sizeBuffLen);
private: private:
/** /**
* FIFO文件的路径 * FIFO文件的路径
* file path of FIFO
*/ */
std::string _sPathName; std::string _sPathName;
/** /**
* FIFO * FIFO
* whether it have FIFO
*/ */
bool _bOwner; bool _bOwner;
/** /**
* FIFO的文件的操作类型 * FIFO的文件的操作类型
* file opration type of FIFO
*/ */
ENUM_RW_SET _enRW; ENUM_RW_SET _enRW;
/** /**
* FIFO的文件描述符 * FIFO的文件描述符
* file descriptor of FIFO
*/ */
int _fd; int _fd;
}; };

View File

@ -46,6 +46,7 @@ struct TC_FileMutex_Exception : public TC_Lock_Exception
/** /**
* @brief , :. * @brief , :.
* @brief file lock , attion : You can only lock between processes
*/ */
class TC_FileMutex class TC_FileMutex
{ {
@ -53,45 +54,56 @@ public:
/** /**
* @brief . * @brief .
* @brief Constructor
*/ */
TC_FileMutex(); TC_FileMutex();
/** /**
* @brief . * @brief .
* @brief Desturctor
*/ */
virtual ~TC_FileMutex(); virtual ~TC_FileMutex();
/** /**
* @brief . * @brief .
* @brief Initialize file lock
* *
* @param filename * @param filename
* @param filename file name of the file to be operated
*/ */
void init(const std::string& filename); void init(const std::string& filename);
/** /**
* @brief . * @brief .
* @brief Add read lock
* *
*@return 0--1- *@return 0--1-
*@return 0 - lock successfully, -1 - failed to lock
*/ */
int rlock(); int rlock();
/** /**
* @brief . * @brief .
* @brief Unlock
* *
* @return 0--1- * @return 0--1-
* @return 0 - unlock successfully, -1 - failed to unlock
*/ */
int unrlock(); int unrlock();
/** /**
* @brief . * @brief .
* @brief Try read lock.
* *
* @throws TC_FileMutex_Exception * @throws TC_FileMutex_Exception
* @return false, false * @return true, false
* @return return true: lock successfully, return false: failed to lock
*/ */
bool tryrlock(); bool tryrlock();
/** /**
* @brief . * @brief .
* @brief Add write lock
* *
* @return int * @return int
*/ */
@ -99,60 +111,83 @@ public:
/** /**
* @brief . * @brief .
* @brief Unlock
*/ */
int unwlock(); int unwlock();
/** /**
* @brief . * @brief .
* @brief Try write lock.
* *
* @return boolfalse, false * @return booltrue, false
* @return return true: lock successfully, return false: failed to lock
* @throws TC_FileMutex_Exception * @throws TC_FileMutex_Exception
*/ */
bool trywlock(); bool trywlock();
/** /**
* @brief . * @brief .
* @brief Read Lock.
* *
* @return int, 0 * @return int, 0
* @return int, 0 - correct
*/ */
int lock(){return wlock();}; int lock(){return wlock();};
/** /**
* @brief . * @brief .
* @brief Unlock
*/ */
int unlock(); int unlock();
/** /**
* @brief . * @brief .
* @brief Try unlock
* *
* @throws TC_FileMutex_Exception * @throws TC_FileMutex_Exception
* @return int, 0 * @return int, 0
* @return int, 0 - correct
*/ */
bool trylock() {return trywlock();}; bool trylock() {return trywlock();};
protected: protected:
/** /**
* @brief . * @brief .
* @brief Set a lock.
* *
* @param fd * @param fd
* @param fd the file descriptor of the lock to be set
* @param cmd * @param cmd
* @param cmd opeational order
* @param type F_RDLCK ,F_WRLCK ,F_UNLCK * @param type F_RDLCK ,F_WRLCK ,F_UNLCK
* @param type three states: F_RDLCK ,F_WRLCK ,F_UNLCK
* @param offset * @param offset
* @param offset the offset
* @param whence * @param whence
* @param whence the starting position pf the lock,three ways
* @param len * @param len
* @param len the size of the locked area
* @return int0-1. * @return int0-1.
* @return int: successfully,return 0; else return -1
*/ */
int lock(int fd, int cmd, int type, off_t offset, int whence, off_t len); int lock(int fd, int cmd, int type, off_t offset, int whence, off_t len);
/** /**
* @brief . * @brief .
* @brief Whether it is locked by other threads
* *
* @param fd * @param fd
* @param fd the file desciptor to be set
* @param type F_RDLCK ,F_WRLCK ,F_UNLCK * @param type F_RDLCK ,F_WRLCK ,F_UNLCK
* @param type three types: F_RDLCK ,F_WRLCK ,F_UNLCK
* @param offset * @param offset
* @param offset the offset
* @param whence * @param whence
* @param whence the starting position of the lock ,three ways
* @param len * @param len
* @param len the size of the locked area
* @return bool truefalse. * @return bool truefalse.
* @return int: successfully,return 0; else return -1
*/ */
bool hasLock(int fd, int type, off_t offset, int whence, off_t len); bool hasLock(int fd, int type, off_t offset, int whence, off_t len);