aboutsummaryrefslogtreecommitdiff
path: root/SocketHttpListener/CloseEventArgs.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2017-05-24 15:12:55 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2017-05-24 15:12:55 -0400
commitf07af448fa11330db93dd7ddcabac37ef9e014c7 (patch)
tree1b52a4f73d674a48258c2f14c94117b96ca4a678 /SocketHttpListener/CloseEventArgs.cs
parent27c3acb2bfde9025c33f584c759a4038020cb702 (diff)
update main projects
Diffstat (limited to 'SocketHttpListener/CloseEventArgs.cs')
-rw-r--r--SocketHttpListener/CloseEventArgs.cs90
1 files changed, 90 insertions, 0 deletions
diff --git a/SocketHttpListener/CloseEventArgs.cs b/SocketHttpListener/CloseEventArgs.cs
new file mode 100644
index 000000000..b1bb4b196
--- /dev/null
+++ b/SocketHttpListener/CloseEventArgs.cs
@@ -0,0 +1,90 @@
+using System;
+using System.Text;
+
+namespace SocketHttpListener
+{
+ /// <summary>
+ /// Contains the event data associated with a <see cref="WebSocket.OnClose"/> event.
+ /// </summary>
+ /// <remarks>
+ /// A <see cref="WebSocket.OnClose"/> event occurs when the WebSocket connection has been closed.
+ /// If you would like to get the reason for the close, you should access the <see cref="Code"/> or
+ /// <see cref="Reason"/> property.
+ /// </remarks>
+ public class CloseEventArgs : EventArgs
+ {
+ #region Private Fields
+
+ private bool _clean;
+ private ushort _code;
+ private string _reason;
+
+ #endregion
+
+ #region Internal Constructors
+
+ internal CloseEventArgs (PayloadData payload)
+ {
+ var data = payload.ApplicationData;
+ var len = data.Length;
+ _code = len > 1
+ ? data.SubArray (0, 2).ToUInt16 (ByteOrder.Big)
+ : (ushort) CloseStatusCode.NoStatusCode;
+
+ _reason = len > 2
+ ? GetUtf8String(data.SubArray (2, len - 2))
+ : String.Empty;
+ }
+
+ private string GetUtf8String(byte[] bytes)
+ {
+ return Encoding.UTF8.GetString(bytes, 0, bytes.Length);
+ }
+
+ #endregion
+
+ #region Public Properties
+
+ /// <summary>
+ /// Gets the status code for the close.
+ /// </summary>
+ /// <value>
+ /// A <see cref="ushort"/> that represents the status code for the close if any.
+ /// </value>
+ public ushort Code {
+ get {
+ return _code;
+ }
+ }
+
+ /// <summary>
+ /// Gets the reason for the close.
+ /// </summary>
+ /// <value>
+ /// A <see cref="string"/> that represents the reason for the close if any.
+ /// </value>
+ public string Reason {
+ get {
+ return _reason;
+ }
+ }
+
+ /// <summary>
+ /// Gets a value indicating whether the WebSocket connection has been closed cleanly.
+ /// </summary>
+ /// <value>
+ /// <c>true</c> if the WebSocket connection has been closed cleanly; otherwise, <c>false</c>.
+ /// </value>
+ public bool WasClean {
+ get {
+ return _clean;
+ }
+
+ internal set {
+ _clean = value;
+ }
+ }
+
+ #endregion
+ }
+}