<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                Netd中第二個重要成員是CommandListener(以后簡稱CL),其主要作用是接收來自Framework層NetworkManageService的命令。從角色來看,CL僅是一個Listener。它在收到命令后,只是將它們轉交給對應的命令處理對象去處理。CL內部定義了許多命令,而這些命令都有較深的背景知識。本節擬以分析CL的工作流程為主,而相關的命令處理則放到后文再集中分析。 CL中的圖2-4所示為CL中的Command對象及對應的Controller對象。 :-: ![](http://img.blog.csdn.net/20140303220835203?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSW5ub3N0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 圖2-4 CL中的命令及控制類 由圖2-4可知: CL定義了11個和網絡相關的Command類。這些類均從NetdCommand派生(注意,為保持繪圖簡潔,這11個Command的派生關系由1個派生箭頭表達)。CL還定義了10個控制類,這些控制類將和命令類共同完成相應的命令處理工作。 結合前面圖2-2中對NM家族成員的介紹,CL創建時,需要注冊自己支持的命令類。這部分代碼在其構造函數中實現,代碼如下所示: **CommandListener::CommandListener構造函數** ~~~ CommandListener::CommandListener() : FrameworkListener("netd", true) { registerCmd(new InterfaceCmd());//注冊11個命令類對象 registerCmd(new IpFwdCmd()); registerCmd(new TetherCmd()); registerCmd(new NatCmd()); registerCmd(new ListTtysCmd()); registerCmd(new PppdCmd()); registerCmd(new SoftapCmd()); registerCmd(new BandwidthControlCmd()); registerCmd(new IdletimerControlCmd()); registerCmd(new ResolverCmd()); registerCmd(new FirewallCmd()); //創建對應的控制類對象 if (!sSecondaryTableCtrl) sSecondaryTableCtrl = new SecondaryTableController(); if (!sTetherCtrl) sTetherCtrl = new TetherController(); if (!sNatCtrl) sNatCtrl = new NatController(sSecondaryTableCtrl); if (!sPppCtrl) sPppCtrl = new PppController(); if (!sSoftapCtrl) sSoftapCtrl = new SoftapController(); if (!sBandwidthCtrl) sBandwidthCtrl = new BandwidthController(); if (!sIdletimerCtrl) sIdletimerCtrl = new IdletimerController(); if (!sResolverCtrl) sResolverCtrl = new ResolverController(); if (!sFirewallCtrl) sFirewallCtrl = new FirewallController(); if (!sInterfaceCtrl) sInterfaceCtrl = new InterfaceController(); //其他重要工作,后文再分析 } ~~~ 由于CL的間接基類也是SocketListener,所以其工作流程和NetlinkHandler類似。 為了方便讀者理解,圖2-5給出了CL的工作流程圖: :-: ![](http://img.blog.csdn.net/20140303220904562?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSW5ub3N0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 圖2-5 CL的工作流程示意圖 圖2-5中,假設Client端發送的命令名是"nat",當CL收到這個命令后,首先會從其構造函數中注冊的那些命令對象中找到對應該名字(即"nat")的命令對象,其結果就是圖中的NatCmd對象。而該命令最終的處理工作將由此NatCmd對象的runCommand函數完成。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看