Skip to content

Commit 51de596

Browse files
committed
Merge pull request #55 from Code-Sharp/vtortola-work
Sending only one message at a time
2 parents b1abcf2 + 68fa158 commit 51de596

File tree

4 files changed

+37
-8
lines changed

4 files changed

+37
-8
lines changed

src/net45/Extensions/WampSharp.Vtortola/VtortolaWampBinaryConnection.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.IO;
2+
using System.Threading.Tasks;
23
using vtortola.WebSockets;
34
using WampSharp.Core.Message;
45
using WampSharp.V2.Binding;
@@ -26,13 +27,13 @@ protected override WampMessage<TMessage> ParseMessage(WebSocketMessageReadStream
2627
}
2728
}
2829

29-
public override void Send(WampMessage<TMessage> message)
30+
protected async override Task SendAsync(WampMessage<TMessage> message)
3031
{
3132
using (WebSocketMessageWriteStream stream =
3233
mWebsocket.CreateMessageWriter(WebSocketMessageType.Binary))
3334
{
3435
byte[] raw = mBinding.Format(message);
35-
stream.Write(raw, 0, raw.Length);
36+
await stream.WriteAsync(raw, 0, raw.Length).ConfigureAwait(false);
3637
}
3738
}
3839
}

src/net45/Extensions/WampSharp.Vtortola/VtortolaWampConnection.cs

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Threading;
33
using System.Threading.Tasks;
4+
using System.Threading.Tasks.Dataflow;
45
using vtortola.WebSockets;
56
using WampSharp.Core.Listener;
67
using WampSharp.Core.Message;
@@ -10,10 +11,14 @@ namespace WampSharp.Vtortola
1011
internal abstract class VtortolaWampConnection<TMessage> : IWampConnection<TMessage>
1112
{
1213
protected readonly WebSocket mWebsocket;
14+
private readonly ActionBlock<WampMessage<TMessage>> mSendBlock;
1315

14-
public VtortolaWampConnection(WebSocket websocket)
16+
protected VtortolaWampConnection(WebSocket websocket)
1517
{
1618
mWebsocket = websocket;
19+
20+
mSendBlock = new ActionBlock<WampMessage<TMessage>>(x => InnerSend(x),
21+
new ExecutionDataflowBlockOptions() {MaxDegreeOfParallelism = 1});
1722
}
1823

1924
public async Task HandleWebSocketAsync()
@@ -48,7 +53,7 @@ await mWebsocket.ReadMessageAsync(CancellationToken.None)
4853

4954
if (ConnectionClosed != null)
5055
{
51-
ConnectionClosed(this, EventArgs.Empty);
56+
ConnectionClosed(this, EventArgs.Empty);
5257
}
5358
}
5459
catch (Exception ex)
@@ -64,14 +69,35 @@ await mWebsocket.ReadMessageAsync(CancellationToken.None)
6469

6570
public void Dispose()
6671
{
72+
mSendBlock.Complete();
73+
mSendBlock.Completion.Wait();
6774
mWebsocket.Dispose();
6875
}
6976

70-
public abstract void Send(WampMessage<TMessage> message);
77+
public void Send(WampMessage<TMessage> message)
78+
{
79+
mSendBlock.Post(message);
80+
}
81+
82+
private async Task InnerSend(WampMessage<TMessage> message)
83+
{
84+
if (mWebsocket.IsConnected)
85+
{
86+
try
87+
{
88+
await SendAsync(message)
89+
.ConfigureAwait(false);
90+
}
91+
catch
92+
{
93+
}
94+
}
95+
}
7196

7297
public event EventHandler ConnectionOpen;
7398
public event EventHandler<WampMessageArrivedEventArgs<TMessage>> MessageArrived;
7499
public event EventHandler ConnectionClosed;
75100
public event EventHandler<WampConnectionErrorEventArgs> ConnectionError;
101+
protected abstract Task SendAsync(WampMessage<TMessage> message);
76102
}
77103
}

src/net45/Extensions/WampSharp.Vtortola/VtortolaWampTextConnection.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.IO;
2+
using System.Threading.Tasks;
23
using vtortola.WebSockets;
34
using WampSharp.Core.Message;
45
using WampSharp.V2.Binding;
@@ -25,7 +26,7 @@ protected override WampMessage<TMessage> ParseMessage(WebSocketMessageReadStream
2526
}
2627
}
2728

28-
public override void Send(WampMessage<TMessage> message)
29+
protected override async Task SendAsync(WampMessage<TMessage> message)
2930
{
3031
string raw = mBinding.Format(message);
3132

@@ -34,7 +35,8 @@ public override void Send(WampMessage<TMessage> message)
3435
{
3536
using (StreamWriter streamWriter = new StreamWriter(stream))
3637
{
37-
streamWriter.Write(raw);
38+
await streamWriter.WriteAsync(raw)
39+
.ConfigureAwait(false);
3840
}
3941
}
4042
}

src/net45/WampSharp/WAMP2/V2/Session/WampSessionServer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public void OnNewClient(IWampClient<TMessage> client)
4242

4343
public void OnClientDisconnect(IWampClient<TMessage> client)
4444
{
45-
if (!client.GoodbyeSent)
45+
if ((client.Realm != null) && !client.GoodbyeSent)
4646
{
4747
client.Realm.SessionLost(client.Session);
4848
}

0 commit comments

Comments
 (0)