Vold之CommandLinstener 4 模块分析
来源:互联网 发布:淘宝抢购插件 编辑:程序博客网 时间:2024/05/18 11:26
Commandlinstener主要是建立监听端socket,与MountService客户端建立链接请求,当有数据进行逻辑交互时,调用相应的Command来进行处理。
CommandListener与NetlinkHandler有统统的父类,SocketListener,不过CommandListener是作为listener端,即服务端。
CommandListener的初始化以及startListener方法。
CommandListener::CommandListener() : FrameworkListener("vold", true) { registerCmd(new DumpCmd()); registerCmd(new VolumeCmd()); registerCmd(new AsecCmd()); registerCmd(new ObbCmd()); registerCmd(new StorageCmd()); registerCmd(new CryptfsCmd()); registerCmd(new FstrimCmd());}
其初始化方法中,创建并加入Command的子类对象。客户端发送指令给CommandListener,CommandListener则从相应的Cmd中找到相应的Cmd并执行。
当CommandListener收到数据时,会调用onDataAvaliable方法,具体实现由FrameworkListener子类来实现:
FrameworkListener:
bool FrameworkListener::onDataAvailable(SocketClient *c) { char buffer[CMD_BUF_SIZE]; int len; len = TEMP_FAILURE_RETRY(read(c->getSocket(), buffer, sizeof(buffer))); if (len < 0) { SLOGE("read() failed (%s)", strerror(errno)); return false; } else if (!len) return false; if(buffer[len-1] != '\0') SLOGW("String is not zero-terminated"); int offset = 0; int i; for (i = 0; i < len; i++) { if (buffer[i] == '\0') { /* IMPORTANT: dispatchCommand() expects a zero-terminated string */ dispatchCommand(c, buffer + offset); offset = i + 1; } } return true;}
dispatchCommand方法最终会根据收到的命令,调用相应的Command执行其runCommand。
0 0
- Vold之CommandLinstener 4 模块分析
- Vold之VolumeManager3 模块分析
- Android磁盘管理-之vold源码分析(4)
- Android磁盘管理-之vold源码分析(4)
- Vold分析
- vold分析
- Android之VOLD文件结构分析
- Android-vold源码分析之handleBlockEvent(5)
- Android-vold源码分析之startListener(6)
- Android-vold源码分析之runCommand(7)
- Android-vold源码分析之handleBlockEvent(5)
- Android-vold源码分析之startListener(6)
- Android-vold源码分析之runCommand(7)
- Android磁盘管理-之vold源码分析
- Android-vold源码分析之handleBlockEvent
- Android-vold源码分析之startListener
- Android-vold源码分析之runCommand
- Android之vold进程启动源码分析
- Todo
- Top 5 Reasons Why You Need a Career Change
- 条件表达式的嵌套
- 控制情绪8
- jQuery.noConflict() 函数详解
- Vold之CommandLinstener 4 模块分析
- 2015/4/21
- GLSL内置函数(便于查找)
- myeclipse 部署 tomcat web项目
- ADO学习(八)源码示例
- Web性能 自学
- JNI 数组传递
- 创建透明导航条、去掉导航条黑线
- Making Change