#region License /* * WebSocketServiceHost.cs * * The MIT License * * Copyright (c) 2012-2017 sta.blockhead * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #endregion #region Contributors /* * Contributors: * - Juan Manuel Lallana */ #endregion using System; using WebSocketSharp.Net.WebSockets; namespace WebSocketSharp.Server { /// /// Exposes the methods and properties used to access the information in /// a WebSocket service provided by the or /// . /// /// /// This class is an abstract class. /// public abstract class WebSocketServiceHost { #region Private Fields private Logger _log; private string _path; private WebSocketSessionManager _sessions; #endregion #region Protected Constructors /// /// Initializes a new instance of the class /// with the specified and . /// /// /// A that represents the absolute path to the service. /// /// /// A that represents the logging function for the service. /// protected WebSocketServiceHost (string path, Logger log) { _path = path; _log = log; _sessions = new WebSocketSessionManager (log); } #endregion #region Internal Properties internal ServerState State { get { return _sessions.State; } } #endregion #region Protected Properties /// /// Gets the logging function for the service. /// /// /// A that provides the logging function. /// protected Logger Log { get { return _log; } } #endregion #region Public Properties /// /// Gets or sets a value indicating whether the service cleans up /// the inactive sessions periodically. /// /// /// The set operation does nothing if the service has already started or /// it is shutting down. /// /// /// true if the service cleans up the inactive sessions every /// 60 seconds; otherwise, false. /// public bool KeepClean { get { return _sessions.KeepClean; } set { _sessions.KeepClean = value; } } /// /// Gets the path to the service. /// /// /// A that represents the absolute path to /// the service. /// public string Path { get { return _path; } } /// /// Gets the management function for the sessions in the service. /// /// /// A that manages the sessions in /// the service. /// public WebSocketSessionManager Sessions { get { return _sessions; } } /// /// Gets the of the behavior of the service. /// /// /// A that represents the type of the behavior of /// the service. /// public abstract Type BehaviorType { get; } /// /// Gets or sets the time to wait for the response to the WebSocket Ping or /// Close. /// /// /// The set operation does nothing if the service has already started or /// it is shutting down. /// /// /// A to wait for the response. /// /// /// The value specified for a set operation is zero or less. /// public TimeSpan WaitTime { get { return _sessions.WaitTime; } set { _sessions.WaitTime = value; } } #endregion #region Internal Methods internal void Start () { _sessions.Start (); } internal void StartSession (WebSocketContext context) { CreateSession ().Start (context, _sessions); } internal void Stop (ushort code, string reason) { _sessions.Stop (code, reason); } #endregion #region Protected Methods /// /// Creates a new session for the service. /// /// /// A instance that represents /// the new session. /// protected abstract WebSocketBehavior CreateSession (); #endregion } }