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.
+51 -66
View File
@@ -607,7 +607,7 @@ namespace WebSocketSharp {
// As client
private static string createBase64Key()
{
var src = new byte[16];
var src = new byte[16];
var rand = new Random();
rand.NextBytes(src);
@@ -719,10 +719,10 @@ namespace WebSocketSharp {
private string createResponseKey()
{
var buffer = new StringBuilder(_base64key, 64);
buffer.Append(_guid);
SHA1 sha1 = new SHA1CryptoServiceProvider();
var sb = new StringBuilder(_base64key);
sb.Append(_guid);
var src = sha1.ComputeHash(Encoding.UTF8.GetBytes(sb.ToString()));
var src = sha1.ComputeHash(Encoding.UTF8.GetBytes(buffer.ToString()));
return Convert.ToBase64String(src);
}
@@ -1169,38 +1169,41 @@ namespace WebSocketSharp {
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.");
return false;
}
try
{
if (_wsStream == null)
return false;
_wsStream.Write(frame);
return true;
}
catch (Exception ex)
{
onError(ex.Message);
return false;
}
return _wsStream != null
? _wsStream.Write(frame)
: false;
}
private void send(Opcode opcode, Stream stream)
{
if (_compression == CompressionMethod.NONE)
var data = stream;
var compressed = false;
try
{
send(opcode, stream, false);
return;
}
if (_compression != CompressionMethod.NONE)
{
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();
}
}
@@ -1208,24 +1211,17 @@ namespace WebSocketSharp {
{
lock (_forSend)
{
try
if (_readyState != WsState.OPEN)
{
if (_readyState != WsState.OPEN)
{
onError("The WebSocket connection isn't established or has been closed.");
return;
}
onError("The WebSocket connection isn't established or has been closed.");
return;
}
var length = stream.Length;
if (length <= _fragmentLen)
send(Fin.FINAL, opcode, stream.ReadBytes((int)length), compressed);
else
sendFragmented(opcode, stream, compressed);
}
catch (Exception ex)
{
onError(ex.Message);
}
var length = stream.Length;
if (length <= _fragmentLen)
send(Fin.FINAL, opcode, stream.ReadBytes((int)length), compressed);
else
sendFragmented(opcode, stream, compressed);
}
}
@@ -1237,12 +1233,12 @@ namespace WebSocketSharp {
private void sendAsync(Opcode opcode, Stream stream, Action completed)
{
Action<Opcode, Stream> action = send;
AsyncCallback callback = (ar) =>
Action<Opcode, Stream> sender = send;
AsyncCallback callback = ar =>
{
try
{
action.EndInvoke(ar);
sender.EndInvoke(ar);
if (completed != null)
completed();
}
@@ -1250,13 +1246,9 @@ namespace WebSocketSharp {
{
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)
@@ -1267,8 +1259,8 @@ namespace WebSocketSharp {
var count = rem == 0 ? quo - 2 : quo - 1;
long readLen = 0;
var tmpLen = 0;
var buffer = new byte[_fragmentLen];
var tmpLen = 0;
var buffer = new byte[_fragmentLen];
// First
tmpLen = stream.Read(buffer, 0, _fragmentLen);
@@ -1519,10 +1511,8 @@ namespace WebSocketSharp {
return;
}
using (var ms = new MemoryStream(data))
{
send(Opcode.BINARY, ms);
}
var stream = new MemoryStream(data);
send(Opcode.BINARY, stream);
}
/// <summary>
@@ -1539,10 +1529,8 @@ namespace WebSocketSharp {
return;
}
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(data)))
{
send(Opcode.TEXT, ms);
}
var stream = new MemoryStream(Encoding.UTF8.GetBytes(data));
send(Opcode.TEXT, stream);
}
/// <summary>
@@ -1559,10 +1547,7 @@ namespace WebSocketSharp {
return;
}
using (var fs = file.OpenRead())
{
send(Opcode.BINARY, fs);
}
send(Opcode.BINARY, file.OpenRead());
}
/// <summary>
@@ -1583,8 +1568,8 @@ namespace WebSocketSharp {
return;
}
var ms = new MemoryStream(data);
sendAsync(Opcode.BINARY, ms, completed);
var stream = new MemoryStream(data);
sendAsync(Opcode.BINARY, stream, completed);
}
/// <summary>
@@ -1605,8 +1590,8 @@ namespace WebSocketSharp {
return;
}
var ms = new MemoryStream(Encoding.UTF8.GetBytes(data));
sendAsync(Opcode.TEXT, ms, completed);
var stream = new MemoryStream(Encoding.UTF8.GetBytes(data));
sendAsync(Opcode.TEXT, stream, completed);
}
/// <summary>
Binary file not shown.