最近因項目需要,要學習live555這個開源平台。live555是用c++實作的,對于該平台的介紹網上有很多文章,以下是個人在讀它源碼時的記錄,也是一個初步的了解,和大家一起分享一下。有錯誤,或者不足之處請大家指出。
BasicUsageEnvironment庫
a) BasicHashTable.cpp
1. BasicHashTable類
功能: 一個簡單的hash表的實作
SMALL_HASH_TABLE_SIZE=4
構造函數BasicHashTable(int keyType),傳入參數鍵的類型
Add(char const* key, void* value) 增加一對鍵值 注:void* 指針,它可以儲存任何類型對象的位址
Remove(char const* key) 根據鍵删除一個鍵值對
Lookup(char const* key) 根據鍵查詢鍵值
NumEntries() 傳回實體數目
HashTable* create(int keyType) hash表的建立
Iterator* create(HashTable& hashTable) 傳回hash表的疊代器
b) HandlerSet.hh (handlerSet 的定義)
1. HandlerDescriptor類,句柄描述符
int socketNum //socket數量
BackgroundHandlerProc* handlerProc //句柄背景處理的程序指針
void* clientData //用戶端資料指針
2. HandlerSet類,句柄的集合
assignHandler(int socketNum,TaskScheduler::BackgroundHandlerProc* handlerProc, void* clientData); //配置設定句柄
removeHandler(int socketNum); //根據socket号删除句柄
3. HandlerIterator類,句柄疊代器
HandlerDescriptor* next(); //下一個句柄,沒有則傳回NULL
reset();
c) DelayQueue.hh
1. DelayQueueEntry類,延遲隊列實體
long token(); //????
2. DelyQueue類,延遲隊列
addEntry(DelayQueueEntry* newEntry); //return a token for the entry
updateEntry(DelayQueueEntry* entry, DelayInterval newDelay);
updateEntry( long tokenToFind, DelayInterval newDelay);
removeEntry() //移除實體,但是不删除
DelayInterval const& timeToNextAlarm();
handleAlarm();
d) UsageEnvironment.hh
1. UsageEnvironment類,這是一個抽象的基類
void reclaim();//回收,當沒有剩餘的狀态時,删除自己
taskScheduler() //任務排程程式
//結果資訊的處理
getResultMsg();
setResultMsg();
setResultErrMsg();
appendToResultMsg(); //like setResultMsg(), except that an 'errno' message is appended
reportBackgroundError();//用于報告背景預先設定的錯誤的資訊
getErrno(); // ‘errno’
UsageEnvironment& operator<<(); //console output
2. TaskScheduler類,任務排程類,是一個抽象的基類
virtual TaskToken scheduleDelayedTask(nt64_t microseconds, TaskFunc* proc,void* clientData) //當我們下一個達到排程點的,排程一個任務(在一個延遲之後)。(Does not delay, if “microseconds”<=0,)。傳回一個token,可用于以後的unscheduleDelayTask()的調用。
virtual void unscheduleDelayedTask(TaskToken& prevTask); //設定”prevTask”=NULL(如果prevTask==NULL,no effect)
virtual void rescheduleDelayedTask() // Combines "unscheduleDelayedTask()" with "scheduleDelayedTask()" (setting "task" to the new task token).
typedef void BackgroundHandlerProc(void* clientData, int mask); // handing sockets reads in the background
virtual void turnOnBackgroundReadHandling () //打開背景socket讀取
virtual void turnOffBackgroundReadHandling () //關閉背景socket讀取
virtual void doEventLoop(char* watchVariable = NULL) // Stops the current thread of control from proceeding, but allows delayed tasks (and/or background I/O handling) to proceed.(If "watchVariable" is not NULL, then we return from this routine when *watchVariable != 0)