Skip to content

Commit 6b3c515

Browse files
committed
Merge branch 'goodbyetask' into wampv2
2 parents cd5b817 + 3712408 commit 6b3c515

File tree

8 files changed

+65
-18
lines changed

8 files changed

+65
-18
lines changed

src/net45/Default/WampSharp.NewtonsoftJson/Newtonsoft/JTokenMessageParser.cs

+12
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@ public WampMessage<JToken> Parse(Stream stream)
6262
using (JsonReader reader = new JsonTextReader(new StreamReader(stream)) {CloseInput = false})
6363
{
6464
JToken parsed = JToken.ReadFrom(reader);
65+
66+
if (mLogger.IsDebugEnabled())
67+
{
68+
mLogger.DebugFormat("Trying to parse message {JsonMessage}", parsed.ToString(Formatting.None));
69+
}
70+
6571
return mMessageFormatter.Parse(parsed);
6672
}
6773
}
@@ -80,6 +86,12 @@ public void Format(WampMessage<object> message, Stream stream)
8086
object[] array = mMessageFormatter.Format(message);
8187
mSerializer.Serialize(textWriter, array);
8288
textWriter.Flush();
89+
90+
if (mLogger.IsDebugEnabled())
91+
{
92+
// Call this just for the logs
93+
Format(message);
94+
}
8395
}
8496
}
8597
}

src/net45/WampSharp/WAMP2/V2/Api/Client/IWampChannel.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public interface IWampChannel
3131
/// </summary>
3232
/// <param name="reason">The close reason.</param>
3333
/// <param name="details">The close details.</param>
34-
void Close(string reason, GoodbyeDetails details);
34+
/// <returns>A task that completes upon a GOODBYE message from the router.</returns>
35+
Task<GoodbyeMessage> Close(string reason, GoodbyeDetails details);
3536
}
3637
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using System;
2+
using System.Runtime.Serialization;
3+
4+
namespace WampSharp.V2.Core.Contracts
5+
{
6+
[DataContract]
7+
[Serializable]
8+
public class GoodbyeMessage
9+
{
10+
public string Reason { get; internal set; }
11+
public GoodbyeDetails Details { get; internal set; }
12+
}
13+
}

src/net45/WampSharp/WAMP2/V2/Client/Session/IWampSessionClientExtended.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ internal interface IWampSessionClientExtended :
1414

1515
Task OpenTask { get; }
1616

17-
void Close(string reason, GoodbyeDetails details);
17+
Task<GoodbyeMessage> Close(string reason, GoodbyeDetails details);
1818

1919
void OnConnectionOpen();
2020
void OnConnectionClosed();

src/net45/WampSharp/WAMP2/V2/Client/Session/WampSessionClient.cs

+30-12
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ public class WampSessionClient<TMessage> : IWampSessionClientExtended,
1616
private static readonly AuthenticateExtraData EmptyAuthenticateDetails = new AuthenticateExtraData();
1717
private readonly IWampServerProxy mServerProxy;
1818
private TaskCompletionSource<bool> mOpenTask = new TaskCompletionSource<bool>();
19+
private TaskCompletionSource<GoodbyeMessage> mCloseTask;
20+
private GoodbyeMessage mGoodbyeMessage;
1921
private readonly IWampFormatter<TMessage> mFormatter;
20-
private readonly object mLock = new object();
2122
private bool mGoodbyeSent;
2223
private readonly IWampClientAuthenticator mAuthenticator;
2324
private HelloDetails mSentDetails;
@@ -115,6 +116,10 @@ public void Goodbye(GoodbyeDetails details, string reason)
115116
{
116117
mServerProxy.Goodbye(new GoodbyeDetails(), WampErrors.GoodbyeAndOut);
117118
}
119+
else
120+
{
121+
mGoodbyeMessage = new GoodbyeMessage(){Details = details, Reason = reason};
122+
}
118123
}
119124

120125
TrySetCloseEventArgs(SessionCloseType.Goodbye, details, reason);
@@ -126,11 +131,21 @@ private void RaiseConnectionBroken()
126131

127132
WampSessionCloseEventArgs closeEventArgs = mCloseEventArgs;
128133

129-
SetOpenTaskErrorIfNeeded(new WampConnectionBrokenException(mCloseEventArgs));
130-
131134
Interlocked.CompareExchange(ref mIsConnected, 0, 1);
135+
136+
GoodbyeMessage goodbyeMessage = mGoodbyeMessage;
137+
138+
if (goodbyeMessage != null)
139+
{
140+
mCloseTask?.SetResult(goodbyeMessage);
141+
}
142+
143+
SetTasksErrorsIfNeeded(new WampConnectionBrokenException(mCloseEventArgs));
144+
132145
mOpenTask = new TaskCompletionSource<bool>();
146+
mCloseTask = null;
133147
mCloseEventArgs = null;
148+
mGoodbyeMessage = null;
134149

135150
OnConnectionBroken(closeEventArgs);
136151
}
@@ -154,13 +169,20 @@ private void TrySetCloseEventArgs(SessionCloseType sessionCloseType,
154169

155170
public Task OpenTask => mOpenTask.Task;
156171

157-
public void Close(string reason, GoodbyeDetails details)
172+
public Task<GoodbyeMessage> Close(string reason, GoodbyeDetails details)
158173
{
159174
reason = reason ?? WampErrors.CloseNormal;
160175
details = details ?? EmptyGoodbyeDetails;
161176

177+
TaskCompletionSource<GoodbyeMessage> closeTask =
178+
new TaskCompletionSource<GoodbyeMessage>();
179+
180+
mCloseTask = closeTask;
181+
162182
mGoodbyeSent = true;
163183
mServerProxy.Goodbye(details, reason);
184+
185+
return closeTask.Task;
164186
}
165187

166188
public void OnConnectionOpen()
@@ -191,19 +213,15 @@ public void OnConnectionClosed()
191213

192214
public void OnConnectionError(Exception exception)
193215
{
194-
SetOpenTaskErrorIfNeeded(exception);
216+
SetTasksErrorsIfNeeded(exception);
195217

196218
OnConnectionError(new WampConnectionErrorEventArgs(exception));
197219
}
198220

199-
private void SetOpenTaskErrorIfNeeded(Exception exception)
221+
private void SetTasksErrorsIfNeeded(Exception exception)
200222
{
201-
TaskCompletionSource<bool> openTask = mOpenTask;
202-
203-
if (openTask != null)
204-
{
205-
openTask.TrySetException(exception);
206-
}
223+
mOpenTask?.TrySetException(exception);
224+
mCloseTask?.TrySetException(exception);
207225
}
208226

209227
public event EventHandler<WampSessionCreatedEventArgs> ConnectionEstablished;

src/net45/WampSharp/WAMP2/V2/Client/WampChannel.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,9 @@ public void Close()
7171
}
7272
}
7373

74-
public void Close(string reason, GoodbyeDetails details)
74+
public Task<GoodbyeMessage> Close(string reason, GoodbyeDetails details)
7575
{
76-
mClient.Close(reason, details);
76+
return mClient.Close(reason, details);
7777
}
7878
}
7979
}

src/net45/WampSharp/WAMP2/V2/Client/WampClient.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,9 @@ public void Goodbye(GoodbyeDetails details, string reason)
7979

8080
public long Session => SessionClient.Session;
8181

82-
public void Close(string reason, GoodbyeDetails details)
82+
public Task<GoodbyeMessage> Close(string reason, GoodbyeDetails details)
8383
{
84-
SessionClient.Close(reason, details);
84+
return SessionClient.Close(reason, details);
8585
}
8686

8787
public void OnConnectionOpen()

src/pcl/WampSharp/WampSharp.csproj

+3
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,9 @@
368368
<Compile Include="..\..\net45\WampSharp\WAMP2\V2\Api\CalleeProxy\WampIncompatibleCalleeProxyMethodException.cs">
369369
<Link>WAMP2\V2\Api\CalleeProxy\WampIncompatibleCalleeProxyMethodException.cs</Link>
370370
</Compile>
371+
<Compile Include="..\..\net45\WampSharp\WAMP2\V2\Api\GoodbyeMessage.cs">
372+
<Link>WAMP2\V2\Api\GoodbyeMessage.cs</Link>
373+
</Compile>
371374
<Compile Include="..\..\net45\WampSharp\WAMP2\V2\Api\Rx\WampTupleTopicSubject.cs">
372375
<Link>WAMP2\V2\Api\Rx\WampTupleTopicSubject.cs</Link>
373376
</Compile>

0 commit comments

Comments
 (0)