//! Support for `Stream`, deprecated! use std::{io, net}; use actix::{Actor, Arbiter, AsyncContext, Context, Handler, Message}; use futures::{Future, Stream}; use tokio_io::{AsyncRead, AsyncWrite}; use super::channel::{HttpChannel, WrapperStream}; use super::handler::{HttpHandler, IntoHttpHandler}; use super::http::HttpServer; use super::settings::{ServerSettings, ServiceConfig}; 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 = ServiceConfig::new( apps, self.keep_alive, self.client_timeout, self.client_shutdown, ServerSettings::new(addr, "127.0.0.1:8080", secure), ); // start server HttpIncoming::create(move |ctx| { ctx.add_message_stream(stream.map_err(|_| ()).map(WrapperStream::new)); HttpIncoming { settings } }); } } struct HttpIncoming { settings: ServiceConfig, } 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).map_err(|_| ())); } }