Skip to content

Commit e8a6ef1

Browse files
committed
Fixing #285
1 parent 8c90838 commit e8a6ef1

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

src/net45/Extensions/WampSharp.RawSocket/RawSocket/NetworkStreamExtensions.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.IO;
33
using System.Threading.Tasks;
4+
using Microsoft.IO;
45

56
namespace WampSharp.RawSocket
67
{
@@ -42,5 +43,18 @@ public static byte[] GetBuffer(this MemoryStream stream)
4243
}
4344

4445
#endif
46+
public static byte[] GetBufferWorkaround(this MemoryStream stream)
47+
{
48+
RecyclableMemoryStream memoryStream = stream as RecyclableMemoryStream;
49+
50+
if (memoryStream != null)
51+
{
52+
return memoryStream.GetBuffer();
53+
}
54+
55+
return stream.GetBuffer();
56+
}
57+
58+
4559
}
4660
}

src/net45/Extensions/WampSharp.RawSocket/RawSocket/TcpClientConnection.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ protected async override Task SendAsync(WampMessage<object> message)
6565

6666
byte[] buffer;
6767

68-
buffer = memoryStream.GetBuffer();
68+
buffer = memoryStream.GetBufferWorkaround();
6969

7070
// Write a message header
7171
mFrameHeaderParser.WriteHeader(FrameType.WampMessage, messageLength, buffer);
@@ -151,7 +151,7 @@ private async Task<MemoryStream> ReadStream(int messageLength, int position = 0)
151151

152152
MemoryStream stream = mByteArrayPool.GetStream(Tag, length, true);
153153

154-
byte[] buffer = stream.GetBuffer();
154+
byte[] buffer = stream.GetBufferWorkaround();
155155

156156
await Stream
157157
.ReadExactAsync(buffer, position, messageLength)
@@ -169,7 +169,7 @@ private async Task HandlePong(int messageLength)
169169
using (MemoryStream buffer = await ReadStream(messageLength).ConfigureAwait(false))
170170
{
171171
ArraySegment<byte> arraySegment =
172-
new ArraySegment<byte>(buffer.GetBuffer(), 0, messageLength);
172+
new ArraySegment<byte>(buffer.GetBufferWorkaround(), 0, messageLength);
173173

174174
mPinger.RaiseOnPong(arraySegment);
175175
}
@@ -179,7 +179,7 @@ private async Task HandlePing(int messageLength)
179179
{
180180
using (MemoryStream memoryStream = await ReadStream(messageLength, FrameHeaderSize).ConfigureAwait(false))
181181
{
182-
byte[] buffer = memoryStream.GetBuffer();
182+
byte[] buffer = memoryStream.GetBufferWorkaround();
183183

184184
mFrameHeaderParser.WriteHeader(FrameType.Pong, messageLength, buffer);
185185

@@ -197,7 +197,7 @@ private async Task SendPing(byte[] message)
197197

198198
using (MemoryStream memoryStream = mByteArrayPool.GetStream(Tag, frameSize, true))
199199
{
200-
byte[] buffer = memoryStream.GetBuffer();
200+
byte[] buffer = memoryStream.GetBufferWorkaround();
201201

202202
mFrameHeaderParser.WriteHeader(FrameType.Ping, message.Length, buffer);
203203
memoryStream.SetLength(FrameHeaderSize);

0 commit comments

Comments
 (0)