diff --git a/websocket-sharp/Server/WebSocketServiceHost.cs b/websocket-sharp/Server/WebSocketServiceHost.cs index cfc70214..f8e66801 100644 --- a/websocket-sharp/Server/WebSocketServiceHost.cs +++ b/websocket-sharp/Server/WebSocketServiceHost.cs @@ -48,13 +48,32 @@ namespace WebSocketSharp.Server /// 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. + /// Initializes a new instance of the class + /// with the specified and . /// - protected WebSocketServiceHost () + /// + /// 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 @@ -63,7 +82,7 @@ namespace WebSocketSharp.Server internal ServerState State { get { - return Sessions.State; + return _sessions.State; } } @@ -79,7 +98,21 @@ namespace WebSocketSharp.Server /// true if the service cleans up the inactive sessions periodically; /// otherwise, false. /// - public abstract bool KeepClean { get; set; } + public bool KeepClean { + get { + return _sessions.KeepClean; + } + + set { + string msg; + if (!canSet (out msg)) { + _log.Warn (msg); + return; + } + + _sessions.KeepClean = value; + } + } /// /// Gets the path to the service. @@ -87,7 +120,11 @@ namespace WebSocketSharp.Server /// /// A that represents the absolute path to the service. /// - public abstract string Path { get; } + public string Path { + get { + return _path; + } + } /// /// Gets the access to the sessions in the service. @@ -96,7 +133,11 @@ namespace WebSocketSharp.Server /// A that manages the sessions in /// the service. /// - public abstract WebSocketSessionManager Sessions { get; } + public WebSocketSessionManager Sessions { + get { + return _sessions; + } + } /// /// Gets the of the behavior of the service. @@ -113,7 +154,46 @@ namespace WebSocketSharp.Server /// /// A that represents the wait time for the response. /// - public abstract TimeSpan WaitTime { get; set; } + public TimeSpan WaitTime { + get { + return _sessions.WaitTime; + } + + set { + string msg; + if (!value.CheckWaitTime (out msg)) + throw new ArgumentException (msg, "value"); + + if (!canSet (out msg)) { + _log.Warn (msg); + return; + } + + _sessions.WaitTime = value; + } + } + + #endregion + + #region Private Methods + + private bool canSet (out string message) + { + message = null; + + var state = _sessions.State; + if (state == ServerState.Start) { + message = "The service has already started."; + return false; + } + + if (state == ServerState.ShuttingDown) { + message = "The service is shutting down."; + return false; + } + + return true; + } #endregion @@ -121,17 +201,17 @@ namespace WebSocketSharp.Server internal void Start () { - Sessions.Start (); + _sessions.Start (); } internal void StartSession (WebSocketContext context) { - CreateSession ().Start (context, Sessions); + CreateSession ().Start (context, _sessions); } internal void Stop (ushort code, string reason) { - Sessions.Stop (code, reason); + _sessions.Stop (code, reason); } #endregion diff --git a/websocket-sharp/Server/WebSocketServiceHost`1.cs b/websocket-sharp/Server/WebSocketServiceHost`1.cs index c4bd633d..9405caf0 100644 --- a/websocket-sharp/Server/WebSocketServiceHost`1.cs +++ b/websocket-sharp/Server/WebSocketServiceHost`1.cs @@ -35,10 +35,7 @@ namespace WebSocketSharp.Server { #region Private Fields - private Func _creator; - private Logger _log; - private string _path; - private WebSocketSessionManager _sessions; + private Func _creator; #endregion @@ -57,93 +54,25 @@ namespace WebSocketSharp.Server Action initializer, Logger log ) + : base (path, log) { - _path = path; _creator = createCreator (creator, initializer); - _log = log; - - _sessions = new WebSocketSessionManager (log); } #endregion #region Public Properties - public override bool KeepClean { - get { - return _sessions.KeepClean; - } - - set { - string msg; - if (!canSet (out msg)) { - _log.Warn (msg); - return; - } - - _sessions.KeepClean = value; - } - } - - public override string Path { - get { - return _path; - } - } - - public override WebSocketSessionManager Sessions { - get { - return _sessions; - } - } - public override Type Type { get { return typeof (TBehavior); } } - public override TimeSpan WaitTime { - get { - return _sessions.WaitTime; - } - - set { - string msg; - if (!value.CheckWaitTime (out msg)) - throw new ArgumentException (msg, "value"); - - if (!canSet (out msg)) { - _log.Warn (msg); - return; - } - - _sessions.WaitTime = value; - } - } - #endregion #region Private Methods - private bool canSet (out string message) - { - message = null; - - var state = _sessions.State; - if (state == ServerState.Start) { - message = "The service has already started."; - return false; - } - - if (state == ServerState.ShuttingDown) { - message = "The service is shutting down."; - return false; - } - - return true; - } - private Func createCreator ( Func creator, Action initializer )