1
0
mirror of https://github.com/actix/actix-extras.git synced 2024-11-28 01:32:57 +01:00

make WsWriter trait optional

This commit is contained in:
Nikolay Kim 2018-05-09 05:48:06 -07:00
parent 7c4941f868
commit be12d5e6fc
5 changed files with 104 additions and 37 deletions

View File

@ -1,5 +1,10 @@
# Changes # Changes
## 0.6.2 (2018-05-09)
* WsWriter trait is optional.
## 0.6.1 (2018-05-08) ## 0.6.1 (2018-05-08)
* Fix http/2 payload streaming #215 * Fix http/2 payload streaming #215

View File

@ -175,6 +175,8 @@ pub use httprequest::HttpRequest;
pub use httpresponse::HttpResponse; pub use httpresponse::HttpResponse;
pub use json::Json; pub use json::Json;
pub use scope::Scope; pub use scope::Scope;
#[doc(hidden)]
pub use ws::WsWriter; pub use ws::WsWriter;
#[cfg(feature = "openssl")] #[cfg(feature = "openssl")]

View File

@ -518,9 +518,7 @@ impl ClientWriter {
fn as_mut(&mut self) -> &mut Inner { fn as_mut(&mut self) -> &mut Inner {
unsafe { &mut *self.inner.get() } unsafe { &mut *self.inner.get() }
} }
}
impl WsWriter for ClientWriter {
/// Send text frame /// Send text frame
#[inline] #[inline]
fn text<T: Into<Binary>>(&mut self, text: T) { fn text<T: Into<Binary>>(&mut self, text: T) {
@ -561,3 +559,35 @@ impl WsWriter for ClientWriter {
self.write(Frame::close(reason, true)); self.write(Frame::close(reason, true));
} }
} }
impl WsWriter for ClientWriter {
/// Send text frame
#[inline]
fn send_text<T: Into<Binary>>(&mut self, text: T) {
self.text(text)
}
/// Send binary frame
#[inline]
fn send_binary<B: Into<Binary>>(&mut self, data: B) {
self.binary(data)
}
/// Send ping frame
#[inline]
fn send_ping(&mut self, message: &str) {
self.ping(message)
}
/// Send pong frame
#[inline]
fn send_pong(&mut self, message: &str) {
self.pong(message)
}
/// Send close frame
#[inline]
fn send_close(&mut self, reason: Option<CloseReason>) {
self.close(reason);
}
}

View File

@ -149,36 +149,6 @@ where
Drain::new(rx) Drain::new(rx)
} }
/// Check if connection still open
#[inline]
pub fn connected(&self) -> bool {
!self.disconnected
}
#[inline]
fn add_frame(&mut self, frame: ContextFrame) {
if self.stream.is_none() {
self.stream = Some(SmallVec::new());
}
if let Some(s) = self.stream.as_mut() {
s.push(frame)
}
self.inner.modify();
}
/// Handle of the running future
///
/// SpawnHandle is the handle returned by `AsyncContext::spawn()` method.
pub fn handle(&self) -> SpawnHandle {
self.inner.curr_handle()
}
}
impl<A, S> WsWriter for WebsocketContext<A, S>
where
A: Actor<Context = Self>,
S: 'static,
{
/// Send text frame /// Send text frame
#[inline] #[inline]
fn text<T: Into<Binary>>(&mut self, text: T) { fn text<T: Into<Binary>>(&mut self, text: T) {
@ -218,6 +188,66 @@ where
fn close(&mut self, reason: Option<CloseReason>) { fn close(&mut self, reason: Option<CloseReason>) {
self.write(Frame::close(reason, false)); self.write(Frame::close(reason, false));
} }
/// Check if connection still open
#[inline]
pub fn connected(&self) -> bool {
!self.disconnected
}
#[inline]
fn add_frame(&mut self, frame: ContextFrame) {
if self.stream.is_none() {
self.stream = Some(SmallVec::new());
}
if let Some(s) = self.stream.as_mut() {
s.push(frame)
}
self.inner.modify();
}
/// Handle of the running future
///
/// SpawnHandle is the handle returned by `AsyncContext::spawn()` method.
pub fn handle(&self) -> SpawnHandle {
self.inner.curr_handle()
}
}
impl<A, S> WsWriter for WebsocketContext<A, S>
where
A: Actor<Context = Self>,
S: 'static,
{
/// Send text frame
#[inline]
fn send_text<T: Into<Binary>>(&mut self, text: T) {
self.text(text)
}
/// Send binary frame
#[inline]
fn send_binary<B: Into<Binary>>(&mut self, data: B) {
self.binary(data)
}
/// Send ping frame
#[inline]
fn send_ping(&mut self, message: &str) {
self.ping(message)
}
/// Send pong frame
#[inline]
fn send_pong(&mut self, message: &str) {
self.pong(message)
}
/// Send close frame
#[inline]
fn send_close(&mut self, reason: Option<CloseReason>) {
self.close(reason)
}
} }
impl<A, S> ActorHttpContext for WebsocketContext<A, S> impl<A, S> ActorHttpContext for WebsocketContext<A, S>

View File

@ -343,15 +343,15 @@ where
/// Common writing methods for a websocket. /// Common writing methods for a websocket.
pub trait WsWriter { pub trait WsWriter {
/// Send a text /// Send a text
fn text<T: Into<Binary>>(&mut self, text: T); fn send_text<T: Into<Binary>>(&mut self, text: T);
/// Send a binary /// Send a binary
fn binary<B: Into<Binary>>(&mut self, data: B); fn send_binary<B: Into<Binary>>(&mut self, data: B);
/// Send a ping message /// Send a ping message
fn ping(&mut self, message: &str); fn send_ping(&mut self, message: &str);
/// Send a pong message /// Send a pong message
fn pong(&mut self, message: &str); fn send_pong(&mut self, message: &str);
/// Close the connection /// Close the connection
fn close(&mut self, reason: Option<CloseReason>); fn send_close(&mut self, reason: Option<CloseReason>);
} }
#[cfg(test)] #[cfg(test)]