SocketListener
|
FrameworkListener
|
CommandListener
Vold, Netd 各自implement 自己的 CommandListener.filename 還都叫一樣的 CommandListener.cpp,h
但是在不同的 project (bin) ,所以同名沒關係。
像 interface 的東西..
FrameworkCommand
|
VoldCommand
|
DumpCmd, VolumeCmd, ShareCmd, AsecCmd, ObbCmd, StorageCmd, XwarpCmd
一樣,從 netd 來看
FrameworkCommand
|
NetdCommand
|
UsbCmd, SoftapCmd, InterfaceCmd, IpFwdCmd, TetherCmd, NatCmd, ListTtysCmd, PppdCmd, PanCmd
很有趣的是...這裡,各自 implement VoldCommand, NetCommand,結果內容是完全一樣的....為甚摩不省略這一層,直接 繼承 FrameworkCommand 就好?
還有用到 Netlink
SocketListener
|
NetlinkListener
|
NetlinkHandler
也是一樣,vold, netd 各自 implement 自己的 NetlinkHandler
這要的flow 寫在 SocketListener.
thread create, thread start,thread run.
runListener
while(1) {
FD_SET
select( )
if( FD_IISSET( ) {
c = accept( )
}
do {
for( i = clients->begin ~ end) {
if(FD_ISSET(client(fd)))
onDataAvailable(i)
就是標準的 FD_SET, select 動作,當有monitor 到 fd 變更,在一一check client 的 fd,把對應的 client 的 onDataAvailable( ) 執行一次
沒有留言:
張貼留言