zoukankan      html  css  js  c++  java
  • ControlPoint.java文件学习笔记

      看看构造函数,

     1     ////////////////////////////////////////////////
     2     //    Constructor
     3     ////////////////////////////////////////////////
     4 
     5     public ControlPoint(int ssdpPort, int httpPort,InetAddress[] binds){
     6         ssdpNotifySocketList = new SSDPNotifySocketList(binds);
     7         ssdpSearchResponseSocketList = new SSDPSearchResponseSocketList(binds);
     8         
     9         setSSDPPort(ssdpPort);
    10         setHTTPPort(httpPort);
    11         
    12         setDeviceDisposer(null);//设置过期device清除接口,这儿为空
    13         setExpiredDeviceMonitoringInterval(DEFAULT_EXPIRED_DEVICE_MONITORING_INTERVAL);//这儿有设置设备过期时间
    14 
    15         setRenewSubscriber(null);//设置更新订购? 不解ing
    16                 
    17         setNMPRMode(false);//NMPR模式是什么模式?
    18         setRenewSubscriber(null);//再设置一次?
    19     }

      DLNA服务器列表的搜索开始于此文件中的start()接口,此接口实际上是调用start(ST.ROOT_DEVICE, SSDP.DEFAULT_MSEARCH_MX)。

     1     ////////////////////////////////////////////////
     2     //    run    
     3     ////////////////////////////////////////////////
     4 
     5     public boolean start(String target, int mx)
     6     {
     7         stop(); 
     8         
     9         ////////////////////////////////////////
    10         // HTTP Server
    11         ////////////////////////////////////////
    12         //开启http server 并且试着绑定端口,如果失败,将继续
    13         int retryCnt = 0;
    14         int bindPort = getHTTPPort();
    15         HTTPServerList httpServerList = getHTTPServerList();
    16         while (httpServerList.open(bindPort) == false) {
    17             retryCnt++;
    18             if (UPnP.SERVER_RETRY_COUNT < retryCnt)
    19                 return false;
    20             setHTTPPort(bindPort + 1);
    21             bindPort = getHTTPPort();
    22         }
    23         httpServerList.addRequestListener(this);//设置响应监听
    24         httpServerList.start();//启动响应监听
    25         
    26         ////////////////////////////////////////
    27         // Notify Socket
    28         ////////////////////////////////////////
    29         //启动通知监听
    30         SSDPNotifySocketList ssdpNotifySocketList = getSSDPNotifySocketList();
    31         if (ssdpNotifySocketList.open() == false)
    32             return false;
    33         ssdpNotifySocketList.setControlPoint(this);            
    34         ssdpNotifySocketList.start();
    35         
    36         ////////////////////////////////////////
    37         // SeachResponse Socket
    38         ////////////////////////////////////////
    39         //启动搜索监听
    40         int ssdpPort = getSSDPPort();
    41         retryCnt = 0;
    42         SSDPSearchResponseSocketList ssdpSearchResponseSocketList = getSSDPSearchResponseSocketList();
    43         while (ssdpSearchResponseSocketList.open(ssdpPort) == false) {
    44             retryCnt++;
    45             if (UPnP.SERVER_RETRY_COUNT < retryCnt)
    46                 return false;
    47             setSSDPPort(ssdpPort + 1);
    48             ssdpPort = getSSDPPort();
    49         }
    50         ssdpSearchResponseSocketList.setControlPoint(this);
    51         ssdpSearchResponseSocketList.start();
    52 
    53         ////////////////////////////////////////
    54         // search root devices
    55         ////////////////////////////////////////
    56         //搜索
    57         search(target, mx);
    58         
    59         ////////////////////////////////////////
    60         // Disposer
    61         ////////////////////////////////////////
    62     //过期device处理
    63         Disposer disposer = new Disposer(this);
    64         setDeviceDisposer(disposer);
    65         disposer.start();
    66                 
    67         ////////////////////////////////////////
    68         // Subscriber
    69         ////////////////////////////////////////
    70         //????
    71         if (isNMPRMode() == true) {
    72             RenewSubscriber renewSub = new RenewSubscriber(this);
    73             setRenewSubscriber(renewSub);
    74             renewSub.start();
    75         }
    76         
    77         return true;
    78     }

    我们直接查看search接口:

    1     public void search(String target, int mx)
    2     {
    3         SSDPSearchRequest msReq = new SSDPSearchRequest(target, mx);//设置搜索响应过滤条件
    4         SSDPSearchResponseSocketList ssdpSearchResponseSocketList = getSSDPSearchResponseSocketList();
    5         ssdpSearchResponseSocketList.post(msReq);
    6     }

     查看SSDPSearchResponseSocketList.post

     1     ////////////////////////////////////////////////
     2     //    Methods
     3     ////////////////////////////////////////////////
     4 
     5     public boolean post(SSDPSearchRequest req)
     6     {
     7         boolean ret = true;
     8         int nSockets = size();
     9         for (int n=0; n<nSockets; n++) {
    10             SSDPSearchResponseSocket sock = getSSDPSearchResponseSocket(n);
    11             String bindAddr = sock.getLocalAddress();
    12             req.setLocalAddress(bindAddr);
    13             String ssdpAddr = SSDP.ADDRESS;
    14             if (HostInterface.isIPv6Address(bindAddr) == true)
    15                 ssdpAddr = SSDP.getIPv6Address();
    16             //sock.joinGroup(ssdpAddr, SSDP.PORT, bindAddr);
    17             if (sock.post(ssdpAddr, SSDP.PORT, req) == false)
    18                 ret = false;
    19             //sock.leaveGroup(ssdpAddr, SSDP.PORT, bindAddr);
    20         }
    21         return ret;
    22     }
  • 相关阅读:
    预设池(滑雪大冒险)
    随机
    python select模块详解
    轮询、长轮询、长连接、websocket
    Python中的栈溢出及解决办法
    JavaScript中的this的指代对象详解
    Django--缓存、信号、序列化
    SQLAlchemy中的自引用
    Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
    虚拟机下安装centos7方法,修改系统语言为简体中文的方法
  • 原文地址:https://www.cnblogs.com/jevan/p/2576552.html
Copyright © 2011-2022 走看看