From adf26726c0f825919eacf9408e09a25057cbd4e3 Mon Sep 17 00:00:00 2001 From: kyubuns Date: Fri, 26 Oct 2012 13:53:26 +0900 Subject: [PATCH 1/2] Added sendBinary method for WebSocket class. --- source/vibe/http/websockets.d | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/source/vibe/http/websockets.d b/source/vibe/http/websockets.d index f2c88b8788..6196cb91f1 100644 --- a/source/vibe/http/websockets.d +++ b/source/vibe/http/websockets.d @@ -119,12 +119,14 @@ struct Frame { class OutgoingWebSocketMessage : OutputStream { private { Stream m_conn; + FrameOpcode m_frameOpcode; Appender!(ubyte[]) m_buffer; } - this( Stream conn ) { + this( Stream conn, FrameOpcode frameOpcode ) { assert(conn !is null); m_conn = conn; + m_frameOpcode = frameOpcode; } void write(in ubyte[] bytes, bool do_flush = true) { @@ -133,7 +135,7 @@ class OutgoingWebSocketMessage : OutputStream { } void flush() { Frame frame; - frame.opcode = FrameOpcode.Text; + frame.opcode = m_frameOpcode; frame.fin = true; frame.payload = m_buffer.data; frame.writeFrame(m_conn); @@ -142,9 +144,9 @@ class OutgoingWebSocketMessage : OutputStream { void finalize() { Frame frame; frame.fin = true; - frame.opcode = FrameOpcode.Text; + frame.opcode = m_frameOpcode; frame.payload = m_buffer.data; - frame.writeFrame(m_conn); + frame.writeFrame(m_conn); m_buffer.clear(); } void write(InputStream stream, ulong nbytes = 0, bool do_flush = true) { @@ -231,8 +233,12 @@ class WebSocket { { send( (message) { message.write(data); }); } - void send(void delegate(OutgoingWebSocketMessage) sender) { - auto message = new OutgoingWebSocketMessage(m_conn); + void sendBinary(ubyte[] data) + { + send( (message) { message.write(data); }, FrameOpcode.Binary ); + } + void send(void delegate(OutgoingWebSocketMessage) sender, FrameOpcode frameOpcode = FrameOpcode.Text) { + auto message = new OutgoingWebSocketMessage(m_conn, frameOpcode); sender(message); } @@ -291,4 +297,4 @@ HttpServerRequestDelegate handleWebSockets(void delegate(WebSocket) onHandshake) onHandshake(socket); } return &callback; -} \ No newline at end of file +} From 76e72da84a9425910380f1c05d2559b0312b92b7 Mon Sep 17 00:00:00 2001 From: kyubuns Date: Fri, 26 Oct 2012 23:55:21 +0900 Subject: [PATCH 2/2] send binary data with WebSocket.send --- source/vibe/http/websockets.d | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/vibe/http/websockets.d b/source/vibe/http/websockets.d index 6196cb91f1..db24721c27 100644 --- a/source/vibe/http/websockets.d +++ b/source/vibe/http/websockets.d @@ -229,11 +229,11 @@ class WebSocket { @property bool connected() { return m_conn.connected; } @property bool dataAvailableForRead() { return m_conn.dataAvailableForRead; } - void send(ubyte[] data) + void send(string data) { - send( (message) { message.write(data); }); + send( (message) { message.write(cast(ubyte[])data); }); } - void sendBinary(ubyte[] data) + void send(ubyte[] data) { send( (message) { message.write(data); }, FrameOpcode.Binary ); }