important concepts(重要概念)
你應該理解
libjingle
中以下的重要概念: ●
signals
(訊號) ●
threads and messages
(執行緒、訊息) ●
naming conventions
(命名約定) ●
ssl support
(ssl
支援)
● connections
(鏈結) ●
transports, channels, and connections
(傳輸、通道、鏈結) ●
candidates
(協商) ●
data packets
(資料報)
signals
(訊號)
libjingle
使用sigslot
庫促進物件間的通訊。
sigslot
是一種framework
,它可以把呼叫方(
calling member
)和任意類實現的接收函式很容易地關聯起來,工作方式就像這樣: 1、
發出呼叫的類宣告乙個資料成員(被稱作訊號),宣告方式使用一種很像模板的語法。這個訊號資料成員定義了和接收函式一致的引數。(注:這個接收函式當然是屬於某個類了) 2、
類中的接收函式在實現時,它的引數必須與它關聯的訊號的引數相同,這裡的引數相同是指數量相同,型別相同和次序相同。這個接收函式有時被稱作
receiver
或slot
(注意:接收函式可以與訊號資料成員同屬乙個類)。接收函式不能有返回值(可以是
void
)。它必須繼承自
sigslot::has_slots<>。
3、通過呼叫訊號資料成員的
connect
函式,使訊號資料成員與接收函式關聯起來,呼叫時傳遞兩個引數:乙個是接收函式所在類的物件指標,另乙個是類中的接收函式的位址。 4、
呼叫方使用訊號成員就像是呼叫它自己的函式一樣,傳遞給與訊號成員宣告時一致的引數就可以了。如果呼叫訊號成員成功,則所有與此訊號成員關聯的任意類中的接收函式都會被呼叫。
我們可以把任意數量的訊號成員與乙個接收函式關係起來。
libjingle
有時就是把多個訊號成員與乙個接收函式關聯起來,達到統一處理訊息之目的。相反,一些類物件宣告乙個訊號物件,是為了從乙個「訊號點」廣播訊息(「訊號點」語意上講就是乙個訊號成員物件,此物件關聯了眾多的接收函式,當此訊號成員被呼叫時,這些接收函式都能接收到訊息,即這些接收函式都被呼叫)。當物件(包括訊號成員所在物件和傳遞給connect函式的接收函式所屬類物件)被銷毀時,
sigslot
庫會小心處理取消關聯和引用關係。
下面的**示範了
sigslot
庫的使用方法:
// class that sends the notification.
class sender
// listening class. it must inherit sigslot.
class receiver : public sigslot::has_slots<>
// when anyone calls panic(), receiver::ondanger gets the message.
// notice that the number and type of parameters match
// those in sender::signaldanger, and that it doesn't return a value.
void receiver::ondanger(string message, std::time_t time) }
... }
sender
類宣告了乙個訊號資料成員:
sigslot::signal2signaldanger;
語句中的「
」宣告了可以與此訊號成員關聯的接收函式的引數形式,必須是
void functionname( string,std::time_t )
形式。
從sender
類的成員數
void panic()
實現中可以看到,使用訊號成員的形式就像是在呼叫乙個與訊號成員同名的函式
signaldanger("help!", std::time(0));
,引數型別就是宣告訊號成員時指定的引數。
receiver
類繼承自
sigslot::has_slots<>
,它的成員函式就具有了成為「接收函式」的「潛質」。 從
receiver
的建構函式可以看出,當
receiver
物件建立時,必須向它指定乙個訊號類(即宣告了訊號成員的類)物件作為構建造函式的引數,當然此訊號類必須有
receiver
定義的操作用到的訊號成員的樣式。 一旦
receiver
類物件被建立,
sender
類中的訊號成員就與
receiver
類中的ondanger
()函式關聯起來了,只要
sender
物件的panic()
被呼叫,
receiver
類物件的
ondanger()
就被呼叫,即接收到來自
sender
物件的訊息,從而進行處理。 如
: sender sender;
receiverreceiver(sender);
如果執行:
sender.panic();則
receiver.ondanger();
被自動呼叫,在此函式的內部就可以處理來自
sender
的訊息。
實現了訊號類與接收類之間的松偶合性。
libjingle
庫中的一些類,傳送訊號給接收函式(即
listeners
監聽者,可理解為某個類的接收函式),用來傳遞一些重要事件。比如:當你發出或收到乙個鏈結嘗試時,
call::signalsessionstate就會發出通知訊號。在應用程式中應該有接收函式與這些訊號關聯起來,並且做出適當的行為。
按照libjingle中的約定,在宣告訊號資料成員時,名字被冠以「signal」字元,比如:signalstatechange,signalsessionstate,signalsessioncreate。
與這些訊號關聯的函式名被冠以「on」,比如:onportdestropyed(),onoutgoingmessage(),onsendpacket();
若有錯誤,請您指正,thanks!
OpenStack barbican 重要概念
secrets是需要儲存的金鑰,可能的形式如 私鑰 證書 密碼等。acl 除了基於角色的許可權控制外,acl可以提供基於使用者訪問列表的許可權控制。即可以指定哪些使用者對該金鑰有訪問許可權。containers containers是乙個容器,用於儲存多個secret引用。當不得不跟蹤 訪問上百個s...
Python網路知識與Django重要概念
正規表示式物件的search和match方法有什麼區別?search 匹配當前字串中符合正規表示式中第乙個符合的字串,沒有返回none match 匹配當前字串的開頭是否是該正規表示式,沒有返回none 當多個執行緒競爭乙個物件且該物件並非執行緒安全的時候應該怎麼辦?說一下死鎖產生的條件以及如何避免...
編寫DirectShow Filters 概述
seeker 一 介紹directshow filter開發 本章提供開發乙個自定義directshow filter的簡單框架描述,也提供了鏈結到更詳細討論這些任務的主題。在閱讀本章之前,閱讀在about directshow主題,它描述了全面的directshow構架。1.directshow基...