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
)