Fix for pull request #113

This commit is contained in:
sta 2015-07-26 17:25:08 +09:00
parent 2461b43145
commit 58a4f02bda
3 changed files with 32 additions and 6 deletions

View File

@ -35,7 +35,7 @@ namespace Example
nf.Notify (
new NotificationMessage {
Summary = "WebSocket Message",
Body = e.Data,
Body = e.Type != Opcode.Ping ? e.Data : "Received a Ping.",
Icon = "notification-message-im"
});
@ -61,6 +61,9 @@ namespace Example
// To change the wait time for the response to the Ping or Close.
ws.WaitTime = TimeSpan.FromSeconds (10);
// To emit a WebSocket.OnMessage event when receives a Ping.
ws.EmitOnPing = true;
#endif
// To enable the Per-message Compression extension.
//ws.Compression = CompressionMethod.Deflate;

View File

@ -37,11 +37,12 @@ namespace WebSocketSharp
/// <remarks>
/// <para>
/// A <see cref="WebSocket.OnMessage"/> event occurs when the <see cref="WebSocket"/> receives
/// a text or binary message.
/// a text or binary message, or a Ping if the <see cref="WebSocket.EmitOnPing"/> property is
/// set to <c>true</c>.
/// </para>
/// <para>
/// If you would like to get the message data, you should access
/// the <see cref="MessageEventArgs.Data"/> or <see cref="MessageEventArgs.RawData"/> property.
/// If you would like to get the message data, you should access the <see cref="Data"/> or
/// <see cref="RawData"/> property.
/// </para>
/// </remarks>
public class MessageEventArgs : EventArgs
@ -113,7 +114,7 @@ namespace WebSocketSharp
/// Gets the type of the message.
/// </summary>
/// <value>
/// <see cref="Opcode.Text"/> or <see cref="Opcode.Binary"/>.
/// <see cref="Opcode.Text"/>, <see cref="Opcode.Binary"/>, or <see cref="Opcode.Ping"/>.
/// </value>
public Opcode Type {
get {

View File

@ -76,6 +76,7 @@ namespace WebSocketSharp
private WebSocketContext _context;
private CookieCollection _cookies;
private NetworkCredential _credentials;
private bool _emitOnPing;
private bool _enableRedirection;
private string _extensions;
private AutoResetEvent _exitReceiving;
@ -308,6 +309,24 @@ namespace WebSocketSharp
}
}
/// <summary>
/// Gets or sets a value indicating whether the <see cref="WebSocket"/> emits
/// a <see cref="OnMessage"/> event when receives a Ping.
/// </summary>
/// <value>
/// <c>true</c> if the <see cref="WebSocket"/> emits a <see cref="OnMessage"/> event
/// when receives a Ping; otherwise, <c>false</c>. The default value is <c>false</c>.
/// </value>
public bool EmitOnPing {
get {
return _emitOnPing;
}
set {
_emitOnPing = value;
}
}
/// <summary>
/// Gets or sets a value indicating whether the <see cref="WebSocket"/> redirects to
/// the new URL located in the handshake response.
@ -1001,6 +1020,9 @@ namespace WebSocketSharp
if (send (new WebSocketFrame (Opcode.Pong, frame.PayloadData, _client).ToByteArray ()))
_logger.Trace ("Returned a Pong.");
if (_emitOnPing)
enqueueToMessageEventQueue (new MessageEventArgs (frame));
return true;
}
@ -1399,7 +1421,7 @@ namespace WebSocketSharp
if (processReceivedFrame (frame) && _readyState != WebSocketState.Closed) {
receive ();
if (frame.IsControl || !frame.IsFinal)
if ((frame.IsControl && !(frame.IsPing && _emitOnPing)) || !frame.IsFinal)
return;
lock (_forEvent) {