Service for receiving TCP (HTTP) streams, one per bound IP address.
This service typically listens on a socket for TCP connections.
This listening loop is started with the run()
method, this service is
Runnable
. Then
Router#received(UpnpStream) is called with a custom
UpnpStream. This will start processing of the request and run()
the
UpnpStream (which is also Runnable
) in a separate thread,
freeing up the receiving thread immediately.
The
UpnpStream then creates a
org.fourthline.cling.model.message.StreamRequestMessageand calls the
UpnpStream#process(org.fourthline.cling.model.message.StreamRequestMessage)method. The
UpnpStream then returns the response to the network client.
In pseudo-code:
MyStreamServer implements StreamServer {
run() {
while (not stopped) {
Connection con = listenToSocketAndBlock();
router.received( new MyUpnpStream(con) );
}
}
}
MyUpnpStream(con) extends UpnpStream {
run() {
try {
StreamRequestMessage request = // ... Read request
StreamResponseMessage response = process(request);
// ... Send response
responseSent(response))
} catch (Exception ex) {
responseException(ex);
}
}
}
An implementation has to be thread-safe.