#region License /* * WebSocketServiceHost.cs * * The MIT License * * Copyright (c) 2012-2013 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 Thanks /* * Thanks: * Juan Manuel Lallana */ #endregion using System; using System.Collections.Generic; using WebSocketSharp.Net; using WebSocketSharp.Net.WebSockets; namespace WebSocketSharp.Server { /// /// Provides the methods and properties for the WebSocket service host. /// public abstract class WebSocketServiceHost { #region Protected Constructors /// /// Initializes a new instance of the class. /// protected WebSocketServiceHost () { } #endregion #region Public Properties /// /// Gets or sets a value indicating whether the WebSocket service host cleans up /// the inactive sessions periodically. /// /// /// true if the WebSocket service host cleans up the inactive sessions periodically; /// otherwise, false. /// public abstract bool KeepClean { get; set; } /// /// Gets the path to the WebSocket service managed by the WebSocket service host. /// /// /// A that contains an absolute path to the WebSocket service. /// public abstract string ServicePath { get; } /// /// Gets the number of the sessions to the WebSocket service. /// /// /// An that contains the session count. /// public abstract int SessionCount { get; } /// /// Gets the manager of the sessions to the WebSocket service. /// /// /// A that manages the sessions. /// public abstract WebSocketSessionManager Sessions { get; } #endregion #region Internal Methods /// /// Starts a new session to the WebSocket service using the specified . /// /// /// A that contains a WebSocket connection request objects. /// /// /// is . /// internal void StartSession (WebSocketContext context) { if (context == null) throw new ArgumentNullException ("context"); var session = CreateSession (); session.Start (context, Sessions); } #endregion #region Protected Methods /// /// Creates a new session to the WebSocket service. /// /// /// A instance that represents a new session. /// protected abstract WebSocketService CreateSession (); #endregion } /// /// Provides the methods and properties for the WebSocket service host. /// /// /// The type of the WebSocket service provided by the server. /// The T must inherit the class. /// internal class WebSocketServiceHost : WebSocketServiceHost where T : WebSocketService { #region Private Fields private Func _constructor; private string _path; private WebSocketSessionManager _sessions; #endregion #region Internal Constructors internal WebSocketServiceHost (string path, Func constructor, Logger logger) { _path = HttpUtility.UrlDecode (path).TrimEndSlash (); _constructor = constructor; _sessions = new WebSocketSessionManager (logger); } #endregion #region Public Properties /// /// Gets or sets a value indicating whether the WebSocket service host cleans up /// the inactive sessions periodically. /// /// /// true if the WebSocket service host cleans up the inactive sessions /// every 60 seconds; otherwise, false. The default value is true. /// public override bool KeepClean { get { return _sessions.KeepClean; } set { _sessions.KeepClean = value; } } /// /// Gets the path to the WebSocket service managed by the WebSocket service host. /// /// /// A that contains an absolute path to the WebSocket service. /// public override string ServicePath { get { return _path; } } /// /// Gets the number of the sessions to the WebSocket service. /// /// /// An that contains the session count. /// public override int SessionCount { get { return _sessions.Count; } } /// /// Gets the manager of the sessions to the WebSocket service. /// /// /// A that manages the sessions. /// public override WebSocketSessionManager Sessions { get { return _sessions; } } #endregion #region Protected Methods /// /// Creates a new session to the WebSocket service. /// /// /// A instance that represents a new session. /// protected override WebSocketService CreateSession () { return _constructor (); } #endregion } }