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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+38 -53
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>
Binary file not shown.