[BROUILLON]
API UDP Socket telle que proposée par l'ex-W3C Sysapps WG
Note : Au moment de cette spécification, l'API STREAM n'était pas encore finalisée. Cette implémentation nécessitera probablement quelques adaptations dans ses algorithmes
Référence : API de socket TCP UDP
Aux choses à connaître :
readable
et writable
.L'objectif est d'écrire des adaptateurs fournisseurs tels que :
Tout le monde est le bienvenu pour contribuer à ce projet ;-)
//
// This example shows a simple implementation of UPnP-SSDP M-SEARCH
// discovery using a multicast UDPSocket
//
var address = '239.255.255.250' ,
port = '1900' ,
serviceType = 'upnp:rootdevice' ,
rn = 'rn' ,
search = '' ;
// Request permission to send multicast messages to the address and
// port reserved for SSDP
navigator . udpPermission . requestPermission ( { remoteAddress : "239.255.255.250" ,
remotePort : 1900 } ) . then (
( ) => {
// Permission was granted
// Create a new UDP client socket
var mySocket = new UDPSocket ( ) ;
// Build an SSDP M-SEARCH multicast message
search += 'M-SEARCH * HTTP/1.1' + rn ;
search += 'ST: ' + serviceType + rn ;
search += 'MAN: "ssdp:discover"' + rn ;
search += 'HOST: ' + address + ':' + port + rn ;
search += 'MX: 10' ;
// Receive and log SSDP M-SEARCH response messages
function receiveMSearchResponses ( ) {
mySocket . readable . getReader ( ) . read ( ) . then ( ( { value , done } ) => {
if ( done ) return ;
console . log ( 'Remote address: ' + value . remoteAddress +
'Remote port: ' + value . remotePort +
'Message: ' + ab2str ( value . data ) ) ;
// ArrayBuffer to string conversion could also be done by piping
// through a transform stream. To be updated when the Streams API
// specification has been stabilized on this point.
} ) ;
}
// Join SSDP multicast group
mySocket . joinMulticast ( address ) ;
// Send SSDP M-SEARCH multicast message
mySocket . writeable . write (
{ data : str2ab ( search ) ,
remoteAddress : address ,
remotePort : port
} ) . then (
( ) => {
// Data sent sucessfully, wait for response
console . log ( 'M-SEARCH Sent' ) ;
receiveMSearchResponses ( ) ;
} ,
e => console . error ( "Sending error: " , e ) ;
) ;
// Log result of UDP socket setup.
mySocket . opened . then (
( ) => {
console . log ( "UDP socket created sucessfully" ) ;
} ,
e => console . error ( "UDP socket setup failed due to error: " , e ) ;
) ;
// Handle UDP socket closed, either as a result of the application
// calling mySocket.close() or an error causing the socket to be
// closed.
mySocket . closed . then (
( ) => {
console . log ( "Socket has been cleanly closed" ) ;
} ,
e => console . error ( "Socket closed due to error: " , e ) ;
) ;
} ,
e => console . error ( "Sending SSDP multicast messages was denied due to error: " , e ) ;
) ;
Copyright (c) 2016 Alexandre Morgaut
L'autorisation est accordée par la présente, gratuitement, à toute personne obtenant une copie de ce logiciel et des fichiers de documentation associés (le « Logiciel »), d'utiliser le Logiciel sans restriction, y compris, sans limitation, les droits d'utilisation, de copie, de modification, de fusion. , publier, distribuer, accorder des sous-licences et/ou vendre des copies du Logiciel, et permettre aux personnes à qui le Logiciel est fourni de le faire, sous réserve des conditions suivantes :
L'avis de droit d'auteur ci-dessus et cet avis d'autorisation doivent être inclus dans toutes les copies ou parties substantielles du logiciel.
LE LOGICIEL EST FOURNI « TEL QUEL », SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS MAIS SANS LIMITATION LES GARANTIES DE QUALITÉ MARCHANDE, D'ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. EN AUCUN CAS LES AUTEURS OU LES TITULAIRES DES DROITS D'AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DOMMAGES OU AUTRE RESPONSABILITÉ, QUE CE SOIT DANS UNE ACTION CONTRACTUELLE, DÉLIT OU AUTRE, DÉCOULANT DE, DE OU EN RELATION AVEC LE LOGICIEL OU L'UTILISATION OU D'AUTRES TRANSACTIONS DANS LE LOGICIEL.