Added GetWebSocketStream method to HttpConnection class

This commit is contained in:
sta 2014-05-15 11:57:20 +09:00
parent fdf413545e
commit e20c3df551
3 changed files with 24 additions and 12 deletions

View File

@ -72,11 +72,13 @@ namespace WebSocketSharp.Net
private ListenerPrefix _prefix; private ListenerPrefix _prefix;
private MemoryStream _requestBuffer; private MemoryStream _requestBuffer;
private int _reuses; private int _reuses;
private bool _secure;
private Socket _socket; private Socket _socket;
private Stream _stream; private Stream _stream;
private object _sync; private object _sync;
private int _timeout; private int _timeout;
private Timer _timer; private Timer _timer;
private WebSocketStream _websocketStream;
#endregion #endregion
@ -86,9 +88,10 @@ namespace WebSocketSharp.Net
{ {
_socket = socket; _socket = socket;
_listener = listener; _listener = listener;
_secure = listener.IsSecure;
var netStream = new NetworkStream (socket, false); var netStream = new NetworkStream (socket, false);
if (listener.IsSecure) { if (_secure) {
var sslStream = new SslStream (netStream, false); var sslStream = new SslStream (netStream, false);
sslStream.AuthenticateAsServer (listener.Certificate); sslStream.AuthenticateAsServer (listener.Certificate);
_stream = sslStream; _stream = sslStream;
@ -116,7 +119,7 @@ namespace WebSocketSharp.Net
public bool IsSecure { public bool IsSecure {
get { get {
return _listener.IsSecure; return _secure;
} }
} }
@ -200,6 +203,9 @@ namespace WebSocketSharp.Net
if (_stream == null) if (_stream == null)
return; return;
_inputStream = null;
_websocketStream = null;
_stream.Dispose (); _stream.Dispose ();
_stream = null; _stream = null;
} }
@ -510,6 +516,20 @@ namespace WebSocketSharp.Net
} }
} }
public WebSocketStream GetWebSocketStream ()
{
if (_websocketStream != null || _socket == null)
return _websocketStream;
lock (_sync) {
if (_socket == null)
return _websocketStream;
_websocketStream = new WebSocketStream (_stream, _secure);
return _websocketStream;
}
}
public void SendError () public void SendError ()
{ {
SendError (_context.ErrorMessage, _context.ErrorStatus); SendError (_context.ErrorMessage, _context.ErrorStatus);

View File

@ -44,7 +44,6 @@ namespace WebSocketSharp.Net.WebSockets
#region Private Fields #region Private Fields
private HttpListenerContext _context; private HttpListenerContext _context;
private WebSocketStream _stream;
private WebSocket _websocket; private WebSocket _websocket;
#endregion #endregion
@ -55,7 +54,6 @@ namespace WebSocketSharp.Net.WebSockets
HttpListenerContext context, string protocol, Logger logger) HttpListenerContext context, string protocol, Logger logger)
{ {
_context = context; _context = context;
_stream = WebSocketStream.CreateServerStream (context);
_websocket = new WebSocket (this, protocol, logger); _websocket = new WebSocket (this, protocol, logger);
} }
@ -65,7 +63,7 @@ namespace WebSocketSharp.Net.WebSockets
internal WebSocketStream Stream { internal WebSocketStream Stream {
get { get {
return _stream; return _context.Connection.GetWebSocketStream ();
} }
} }
@ -141,7 +139,7 @@ namespace WebSocketSharp.Net.WebSockets
/// </value> /// </value>
public override bool IsSecureConnection { public override bool IsSecureConnection {
get { get {
return _context.Request.IsSecureConnection; return _context.Connection.IsSecure;
} }
} }

View File

@ -239,12 +239,6 @@ namespace WebSocketSharp
return new WebSocketStream (netStream); return new WebSocketStream (netStream);
} }
public static WebSocketStream CreateServerStream (HttpListenerContext context)
{
var conn = context.Connection;
return new WebSocketStream (conn.Stream, conn.IsSecure);
}
public void Dispose () public void Dispose ()
{ {
_innerStream.Dispose (); _innerStream.Dispose ();