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 MemoryStream _requestBuffer;
private int _reuses;
private bool _secure;
private Socket _socket;
private Stream _stream;
private object _sync;
private int _timeout;
private Timer _timer;
private WebSocketStream _websocketStream;
#endregion
@ -86,9 +88,10 @@ namespace WebSocketSharp.Net
{
_socket = socket;
_listener = listener;
_secure = listener.IsSecure;
var netStream = new NetworkStream (socket, false);
if (listener.IsSecure) {
if (_secure) {
var sslStream = new SslStream (netStream, false);
sslStream.AuthenticateAsServer (listener.Certificate);
_stream = sslStream;
@ -116,7 +119,7 @@ namespace WebSocketSharp.Net
public bool IsSecure {
get {
return _listener.IsSecure;
return _secure;
}
}
@ -200,6 +203,9 @@ namespace WebSocketSharp.Net
if (_stream == null)
return;
_inputStream = null;
_websocketStream = null;
_stream.Dispose ();
_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 ()
{
SendError (_context.ErrorMessage, _context.ErrorStatus);

View File

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

View File

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