//! Support for `Stream`, deprecated! use std::{io, net}; use actix::{Actor, Arbiter, AsyncContext, Context, Handler, Message}; use futures::Stream; use tokio_io::{AsyncRead, AsyncWrite}; use super::channel::{HttpChannel, WrapperStream}; use super::handler::{HttpHandler, IntoHttpHandler}; use super::http::HttpServer; use super::settings::{ServerSettings, WorkerSettings}; impl Message for WrapperStream { type Result = (); } impl HttpServer where H: IntoHttpHandler, F: Fn() -> H + Send + Clone, { #[doc(hidden)] #[deprecated(since = "0.7.8")] /// Start listening for incoming connections from a stream. /// /// This method uses only one thread for handling incoming connections. pub fn start_incoming(self, stream: S, secure: bool) where S: Stream + 'static, T: AsyncRead + AsyncWrite + 'static, { // set server settings let addr: net::SocketAddr = "127.0.0.1:8080".parse().unwrap(); let apps = (self.factory)().into_handler(); let settings = WorkerSettings::new( apps, self.keep_alive, self.client_timeout as u64, ServerSettings::new(Some(addr), &self.host, secure), ); // start server HttpIncoming::create(move |ctx| { ctx.add_message_stream( stream.map_err(|_| ()).map(move |t| WrapperStream::new(t)), ); HttpIncoming { settings } }); } } struct HttpIncoming { settings: WorkerSettings, } impl Actor for HttpIncoming { type Context = Context; } impl Handler> for HttpIncoming where T: AsyncRead + AsyncWrite, H: HttpHandler, { type Result = (); fn handle(&mut self, msg: WrapperStream, _: &mut Context) -> Self::Result { Arbiter::spawn(HttpChannel::new(self.settings.clone(), msg, None)); } }