- From: <Cathy.Chan@nokia.com>
- Date: Thu, 22 Sep 2011 22:07:51 +0000
- To: <public-device-apis@w3.org>
- Message-ID: <A46437648ECB3D4F852B077AFF9099F501591E6C@008-AM1MPN1-051.mgdnok.nokia.com>
+1 on avoiding polling.
Not to mention that using the number of services alone to detect changes in
available services is simply unreliable. What if I started with two rendering
control services, one of them left the network while a brand new one joined
the network during a polling interval? The number of services would be the
same, but the actual services would be different.
- Cathy.
N.V.Balaji wrote:
--------------------------------------------------
From: "Rich Tibbett" <richt@opera.com>
Sent: Wednesday, September 21, 2011 4:32 PM
To: "N.V.Balaji" <nv.balaji@samsung.com>
Cc: <public-device-apis@w3.org>
Subject: Re: Discovery API proposals: call for comments
> Hi,
>
> N.V.Balaji wrote:
>> Hi,
>> At a first glance it looks to me that Opera's proposal looks better as
>> it has a defined security model and integrates well with web messaging
>> specs. I should confess that I am not familiar with Webinos security
>> architecture. Moreover Opera's spec seems to leave the nitty-gritty of
>> client-server communication entirely to the service user and the
>> provider without requiring the UA to implement anything specifically.
>>
>> I have a couple of comments on Opera's specs. If these are discussed
>> already, pl. let me know as I might have missed previous discussions on
>> this topic.
>>
>> 1. I guess a notification API in NavigatorNetworkService would be very
>> valuable. The Notification API should announce newly discovered devices
>> - This API would enable interesting use cases. E.g. Assume a mobile user
>> entering into a room that has a TV. If The user entering a room can
>> figure out presence of a TV, the web page the user is currently viewing
>> can offer the user to play the same page on the TV. Actually this use
>> case is much more meaningful if the user is watching a video.
>> - To make sure that such a notification does not give away info
>> resulting in breach of privacy, the notification could be a plain one
>> informing the web page "there is something available" (without actually
>> providing type or NetworkService object), and the Web pages in turn can
>> invoke getNetworkServices to know the available service
>
> We actually envisioned this use case and the 'servicesAvailable' attribute
> is for this purpose.
>
> To keep things as simple as possible we didn't include an event that fires
> when other services of the same type add or leave the network. Having said
> that, the following code, based on the current proposal with
> servicesAvailable, would achieve the objective you describe above
> (checking if new services have become available in the local network and
> then offering the user to option to connect to them):
>
> <script>
> var servicesConnected = [];
>
> function getServices() {
> navigator.getNetworkServices(
> 'urn:schemas-upnp-org:service:RenderingControl:1',
> success
> );
> }
>
> function success(servicesList) {
> servicesConnected = servicesList;
> pollForServiceAvailabilityChange(
> servicesList[0].servicesAvailable
> );
> }
>
> function pollForServiceAvailabilityChange(noOfServicesAvailable) {
> setTimeout(function(){
> if(noOfServicesAvailable <
> servicesConnected[0].servicesAvailable) {
> // re-request service auth since more services have
> // since connected to the network
> getServices();
> } else {
> pollForServiceAvailability(
> servicesConnected[0].servicesAvailable
> );
> }
> }, 5000);
> }
>
> getServices();
> </script>
>
[NVB]: The reason I suggested notification mechanism was to avoid polling
:-) as Using polling mechanism is very inefficient.
>>
>> 2. As I understand the type to be used in getNetworkServices depends on
>> the external standards being used by the service provider. As a web
>> programmer, how do I detect a TV without knowing specific protocol being
>> used by the service provider. Am I supposed to invoke getNetworkServices
>> twice with different types?
>
> Currently, that is the expected behavior.
>
> We _could_ allow web pages to request more than one service type in the
> getNetworkServices 'type' argument. So you could request multiple service
> types from the network. In the NetworkService result we would echo the
> service type that the user selected in a 'type' attribute.
>
> Something like the follows:
>
> navigator.getNetworkServices(['_boxee-jsonrpc._tcp',
> '_xbmc-jsonrpc._tcp'], success);
>
> function success( services ) {
> for(var i in services) {
> var serviceType = services[i].type;
> if(serviceType == '_boxee-jsonrpc._tcp') {
> // communicate with Boxee's JSON-RPC API via services[i].url
> } else {
> // communicate with XBMC's JSON-RPC API via services[i].url
> }
> }
> }
>
[NVB]: This works given that we have only 2 discovery protocols.
Received on Thursday, 22 September 2011 22:08:26 UTC