Modified WebSocket.cs
This commit is contained in:
parent
876a017ff0
commit
b3f6aa2ebf
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.
@ -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.
Loading…
Reference in New Issue
Block a user