|
|
|
@ -1509,10 +1509,13 @@ namespace WebSocketSharp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// As server, used to broadcast
|
|
|
|
// As server, used to broadcast
|
|
|
|
internal void Send (
|
|
|
|
internal void Send (Opcode opcode, byte [] data, Dictionary<CompressionMethod, byte []> cache)
|
|
|
|
Opcode opcode, byte [] data, Dictionary<CompressionMethod, byte []> cache)
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
lock (_forSend) {
|
|
|
|
lock (_forSend) {
|
|
|
|
|
|
|
|
lock (_forConn) {
|
|
|
|
|
|
|
|
if (_readyState != WebSocketState.OPEN)
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
byte [] cached;
|
|
|
|
byte [] cached;
|
|
|
|
if (!cache.TryGetValue (_compression, out cached)) {
|
|
|
|
if (!cache.TryGetValue (_compression, out cached)) {
|
|
|
|
@ -1521,12 +1524,13 @@ namespace WebSocketSharp
|
|
|
|
opcode,
|
|
|
|
opcode,
|
|
|
|
Mask.UNMASK,
|
|
|
|
Mask.UNMASK,
|
|
|
|
data.Compress (_compression),
|
|
|
|
data.Compress (_compression),
|
|
|
|
_compression != CompressionMethod.NONE).ToByteArray ();
|
|
|
|
_compression != CompressionMethod.NONE)
|
|
|
|
|
|
|
|
.ToByteArray ();
|
|
|
|
|
|
|
|
|
|
|
|
cache.Add (_compression, cached);
|
|
|
|
cache.Add (_compression, cached);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
send (cached);
|
|
|
|
_stream.Write (cached);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Exception ex) {
|
|
|
|
catch (Exception ex) {
|
|
|
|
_logger.Fatal (ex.ToString ());
|
|
|
|
_logger.Fatal (ex.ToString ());
|
|
|
|
@ -1534,12 +1538,16 @@ namespace WebSocketSharp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// As server, used to broadcast
|
|
|
|
// As server, used to broadcast
|
|
|
|
internal void Send (
|
|
|
|
internal void Send (Opcode opcode, Stream stream, Dictionary <CompressionMethod, Stream> cache)
|
|
|
|
Opcode opcode, Stream stream, Dictionary <CompressionMethod, Stream> cache)
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
lock (_forSend) {
|
|
|
|
lock (_forSend) {
|
|
|
|
|
|
|
|
lock (_forConn) {
|
|
|
|
|
|
|
|
if (_readyState != WebSocketState.OPEN)
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
Stream cached;
|
|
|
|
Stream cached;
|
|
|
|
if (!cache.TryGetValue (_compression, out cached)) {
|
|
|
|
if (!cache.TryGetValue (_compression, out cached)) {
|
|
|
|
@ -1549,8 +1557,7 @@ namespace WebSocketSharp
|
|
|
|
else
|
|
|
|
else
|
|
|
|
cached.Position = 0;
|
|
|
|
cached.Position = 0;
|
|
|
|
|
|
|
|
|
|
|
|
sendFragmented (
|
|
|
|
sendFragmented (opcode, cached, Mask.UNMASK, _compression != CompressionMethod.NONE);
|
|
|
|
opcode, cached, Mask.UNMASK, _compression != CompressionMethod.NONE);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Exception ex) {
|
|
|
|
catch (Exception ex) {
|
|
|
|
_logger.Fatal (ex.ToString ());
|
|
|
|
_logger.Fatal (ex.ToString ());
|
|
|
|
@ -1558,6 +1565,7 @@ namespace WebSocketSharp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|