天天看點

live555源碼初步解析(一)

最近因項目需要,要學習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)

繼續閱讀