Skip to content

Commit b3f6aa2

Browse files
committed
Modified WebSocket.cs
1 parent 876a017 commit b3f6aa2

File tree

10 files changed

+48
-63
lines changed

10 files changed

+48
-63
lines changed
0 Bytes
Binary file not shown.
-512 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.
-512 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.
-512 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.
-512 Bytes
Binary file not shown.

websocket-sharp/WebSocket.cs

Lines changed: 48 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -607,7 +607,7 @@ private bool connect()
607607
// As client
608608
private static string createBase64Key()
609609
{
610-
var src = new byte[16];
610+
var src = new byte[16];
611611
var rand = new Random();
612612
rand.NextBytes(src);
613613

@@ -719,10 +719,10 @@ private ResponseHandshake createResponseHandshake(HttpStatusCode code)
719719

720720
private string createResponseKey()
721721
{
722+
var buffer = new StringBuilder(_base64key, 64);
723+
buffer.Append(_guid);
722724
SHA1 sha1 = new SHA1CryptoServiceProvider();
723-
var sb = new StringBuilder(_base64key);
724-
sb.Append(_guid);
725-
var src = sha1.ComputeHash(Encoding.UTF8.GetBytes(sb.ToString()));
725+
var src = sha1.ComputeHash(Encoding.UTF8.GetBytes(buffer.ToString()));
726726

727727
return Convert.ToBase64String(src);
728728
}
@@ -1169,63 +1169,59 @@ private void send(ResponseHandshake response)
11691169

11701170
private bool send(WsFrame frame)
11711171
{
1172-
if (!isOpened(false))
1172+
if (_readyState == WsState.CONNECTING || _readyState == WsState.CLOSED)
11731173
{
11741174
onError("The WebSocket connection isn't established or has been closed.");
11751175
return false;
11761176
}
11771177

1178+
return _wsStream != null
1179+
? _wsStream.Write(frame)
1180+
: false;
1181+
}
1182+
1183+
private void send(Opcode opcode, Stream stream)
1184+
{
1185+
var data = stream;
1186+
var compressed = false;
11781187
try
11791188
{
1180-
if (_wsStream == null)
1181-
return false;
1189+
if (_compression != CompressionMethod.NONE)
1190+
{
1191+
data = data.Compress(_compression);
1192+
compressed = true;
1193+
}
11821194

1183-
_wsStream.Write(frame);
1184-
return true;
1195+
send(opcode, data, compressed);
11851196
}
11861197
catch (Exception ex)
11871198
{
11881199
onError(ex.Message);
1189-
return false;
11901200
}
1191-
}
1192-
1193-
private void send(Opcode opcode, Stream stream)
1194-
{
1195-
if (_compression == CompressionMethod.NONE)
1201+
finally
11961202
{
1197-
send(opcode, stream, false);
1198-
return;
1199-
}
1203+
if (compressed)
1204+
data.Dispose();
12001205

1201-
using (var compressed = stream.Compress(_compression))
1202-
{
1203-
send(opcode, compressed, true);
1206+
stream.Dispose();
12041207
}
12051208
}
12061209

12071210
private void send(Opcode opcode, Stream stream, bool compressed)
12081211
{
12091212
lock (_forSend)
12101213
{
1211-
try
1214+
if (_readyState != WsState.OPEN)
12121215
{
1213-
if (_readyState != WsState.OPEN)
1214-
{
1215-
onError("The WebSocket connection isn't established or has been closed.");
1216-
return;
1217-
}
1218-
1219-
var length = stream.Length;
1220-
if (length <= _fragmentLen)
1221-
send(Fin.FINAL, opcode, stream.ReadBytes((int)length), compressed);
1222-
else
1223-
sendFragmented(opcode, stream, compressed);
1224-
}
1225-
catch (Exception ex)
1226-
{
1227-
onError(ex.Message);
1216+
onError("The WebSocket connection isn't established or has been closed.");
1217+
return;
12281218
}
1219+
1220+
var length = stream.Length;
1221+
if (length <= _fragmentLen)
1222+
send(Fin.FINAL, opcode, stream.ReadBytes((int)length), compressed);
1223+
else
1224+
sendFragmented(opcode, stream, compressed);
12291225
}
12301226
}
12311227

@@ -1237,26 +1233,22 @@ private bool send(Fin fin, Opcode opcode, byte[] data, bool compressed)
12371233

12381234
private void sendAsync(Opcode opcode, Stream stream, Action completed)
12391235
{
1240-
Action<Opcode, Stream> action = send;
1241-
AsyncCallback callback = (ar) =>
1236+
Action<Opcode, Stream> sender = send;
1237+
AsyncCallback callback = ar =>
12421238
{
12431239
try
12441240
{
1245-
action.EndInvoke(ar);
1241+
sender.EndInvoke(ar);
12461242
if (completed != null)
12471243
completed();
12481244
}
12491245
catch (Exception ex)
12501246
{
12511247
onError(ex.Message);
12521248
}
1253-
finally
1254-
{
1255-
stream.Close();
1256-
}
12571249
};
12581250

1259-
action.BeginInvoke(opcode, stream, callback, null);
1251+
sender.BeginInvoke(opcode, stream, callback, null);
12601252
}
12611253

12621254
private long sendFragmented(Opcode opcode, Stream stream, bool compressed)
@@ -1267,8 +1259,8 @@ private long sendFragmented(Opcode opcode, Stream stream, bool compressed)
12671259
var count = rem == 0 ? quo - 2 : quo - 1;
12681260

12691261
long readLen = 0;
1270-
var tmpLen = 0;
1271-
var buffer = new byte[_fragmentLen];
1262+
var tmpLen = 0;
1263+
var buffer = new byte[_fragmentLen];
12721264

12731265
// First
12741266
tmpLen = stream.Read(buffer, 0, _fragmentLen);
@@ -1519,10 +1511,8 @@ public void Send(byte[] data)
15191511
return;
15201512
}
15211513

1522-
using (var ms = new MemoryStream(data))
1523-
{
1524-
send(Opcode.BINARY, ms);
1525-
}
1514+
var stream = new MemoryStream(data);
1515+
send(Opcode.BINARY, stream);
15261516
}
15271517

15281518
/// <summary>
@@ -1539,10 +1529,8 @@ public void Send(string data)
15391529
return;
15401530
}
15411531

1542-
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(data)))
1543-
{
1544-
send(Opcode.TEXT, ms);
1545-
}
1532+
var stream = new MemoryStream(Encoding.UTF8.GetBytes(data));
1533+
send(Opcode.TEXT, stream);
15461534
}
15471535

15481536
/// <summary>
@@ -1559,10 +1547,7 @@ public void Send(FileInfo file)
15591547
return;
15601548
}
15611549

1562-
using (var fs = file.OpenRead())
1563-
{
1564-
send(Opcode.BINARY, fs);
1565-
}
1550+
send(Opcode.BINARY, file.OpenRead());
15661551
}
15671552

15681553
/// <summary>
@@ -1583,8 +1568,8 @@ public void SendAsync(byte[] data, Action completed)
15831568
return;
15841569
}
15851570

1586-
var ms = new MemoryStream(data);
1587-
sendAsync(Opcode.BINARY, ms, completed);
1571+
var stream = new MemoryStream(data);
1572+
sendAsync(Opcode.BINARY, stream, completed);
15881573
}
15891574

15901575
/// <summary>
@@ -1605,8 +1590,8 @@ public void SendAsync(string data, Action completed)
16051590
return;
16061591
}
16071592

1608-
var ms = new MemoryStream(Encoding.UTF8.GetBytes(data));
1609-
sendAsync(Opcode.TEXT, ms, completed);
1593+
var stream = new MemoryStream(Encoding.UTF8.GetBytes(data));
1594+
sendAsync(Opcode.TEXT, stream, completed);
16101595
}
16111596

16121597
/// <summary>
-512 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)