Modified WebSocket.cs

This commit is contained in:
sta 2013-05-10 22:35:23 +09:00
parent 876a017ff0
commit b3f6aa2ebf
10 changed files with 51 additions and 66 deletions

Binary file not shown.

View File

@ -719,10 +719,10 @@ namespace WebSocketSharp {
private string createResponseKey() private string createResponseKey()
{ {
var buffer = new StringBuilder(_base64key, 64);
buffer.Append(_guid);
SHA1 sha1 = new SHA1CryptoServiceProvider(); SHA1 sha1 = new SHA1CryptoServiceProvider();
var sb = new StringBuilder(_base64key); var src = sha1.ComputeHash(Encoding.UTF8.GetBytes(buffer.ToString()));
sb.Append(_guid);
var src = sha1.ComputeHash(Encoding.UTF8.GetBytes(sb.ToString()));
return Convert.ToBase64String(src); return Convert.ToBase64String(src);
} }
@ -1169,46 +1169,47 @@ namespace WebSocketSharp {
private bool send(WsFrame frame) private bool send(WsFrame frame)
{ {
if (!isOpened(false)) if (_readyState == WsState.CONNECTING || _readyState == WsState.CLOSED)
{ {
onError("The WebSocket connection isn't established or has been closed."); onError("The WebSocket connection isn't established or has been closed.");
return false; return false;
} }
try return _wsStream != null
{ ? _wsStream.Write(frame)
if (_wsStream == null) : false;
return false;
_wsStream.Write(frame);
return true;
}
catch (Exception ex)
{
onError(ex.Message);
return false;
}
} }
private void send(Opcode opcode, Stream stream) private void send(Opcode opcode, Stream stream)
{ {
if (_compression == CompressionMethod.NONE) var data = stream;
var compressed = false;
try
{ {
send(opcode, stream, false); if (_compression != CompressionMethod.NONE)
return; {
data = data.Compress(_compression);
compressed = true;
} }
using (var compressed = stream.Compress(_compression)) send(opcode, data, compressed);
}
catch (Exception ex)
{ {
send(opcode, compressed, true); onError(ex.Message);
}
finally
{
if (compressed)
data.Dispose();
stream.Dispose();
} }
} }
private void send(Opcode opcode, Stream stream, bool compressed) private void send(Opcode opcode, Stream stream, bool compressed)
{ {
lock (_forSend) lock (_forSend)
{
try
{ {
if (_readyState != WsState.OPEN) if (_readyState != WsState.OPEN)
{ {
@ -1222,11 +1223,6 @@ namespace WebSocketSharp {
else else
sendFragmented(opcode, stream, compressed); sendFragmented(opcode, stream, compressed);
} }
catch (Exception ex)
{
onError(ex.Message);
}
}
} }
private bool send(Fin fin, Opcode opcode, byte[] data, bool compressed) private bool send(Fin fin, Opcode opcode, byte[] data, bool compressed)
@ -1237,12 +1233,12 @@ namespace WebSocketSharp {
private void sendAsync(Opcode opcode, Stream stream, Action completed) private void sendAsync(Opcode opcode, Stream stream, Action completed)
{ {
Action<Opcode, Stream> action = send; Action<Opcode, Stream> sender = send;
AsyncCallback callback = (ar) => AsyncCallback callback = ar =>
{ {
try try
{ {
action.EndInvoke(ar); sender.EndInvoke(ar);
if (completed != null) if (completed != null)
completed(); completed();
} }
@ -1250,13 +1246,9 @@ namespace WebSocketSharp {
{ {
onError(ex.Message); onError(ex.Message);
} }
finally
{
stream.Close();
}
}; };
action.BeginInvoke(opcode, stream, callback, null); sender.BeginInvoke(opcode, stream, callback, null);
} }
private long sendFragmented(Opcode opcode, Stream stream, bool compressed) private long sendFragmented(Opcode opcode, Stream stream, bool compressed)
@ -1519,10 +1511,8 @@ namespace WebSocketSharp {
return; return;
} }
using (var ms = new MemoryStream(data)) var stream = new MemoryStream(data);
{ send(Opcode.BINARY, stream);
send(Opcode.BINARY, ms);
}
} }
/// <summary> /// <summary>
@ -1539,10 +1529,8 @@ namespace WebSocketSharp {
return; return;
} }
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(data))) var stream = new MemoryStream(Encoding.UTF8.GetBytes(data));
{ send(Opcode.TEXT, stream);
send(Opcode.TEXT, ms);
}
} }
/// <summary> /// <summary>
@ -1559,10 +1547,7 @@ namespace WebSocketSharp {
return; return;
} }
using (var fs = file.OpenRead()) send(Opcode.BINARY, file.OpenRead());
{
send(Opcode.BINARY, fs);
}
} }
/// <summary> /// <summary>
@ -1583,8 +1568,8 @@ namespace WebSocketSharp {
return; return;
} }
var ms = new MemoryStream(data); var stream = new MemoryStream(data);
sendAsync(Opcode.BINARY, ms, completed); sendAsync(Opcode.BINARY, stream, completed);
} }
/// <summary> /// <summary>
@ -1605,8 +1590,8 @@ namespace WebSocketSharp {
return; return;
} }
var ms = new MemoryStream(Encoding.UTF8.GetBytes(data)); var stream = new MemoryStream(Encoding.UTF8.GetBytes(data));
sendAsync(Opcode.TEXT, ms, completed); sendAsync(Opcode.TEXT, stream, completed);
} }
/// <summary> /// <summary>