[Modify] Replace it

This commit is contained in:
sta 2016-06-27 14:58:59 +09:00
parent 8a9125ba3b
commit bdafcf2d39
2 changed files with 13 additions and 56 deletions

View File

@ -210,7 +210,7 @@ namespace WebSocketSharp.Net
if (prefs != null && prefs.Count > 0) if (prefs != null && prefs.Count > 0)
return; return;
EndPointManager.RemoveEndPoint (_endpoint.Address, _endpoint.Port); EndPointManager.RemoveEndPoint (_endpoint);
} }
private static RSACryptoServiceProvider createRSAFromFile (string filename) private static RSACryptoServiceProvider createRSAFromFile (string filename)

View File

@ -55,9 +55,6 @@ namespace WebSocketSharp.Net
{ {
#region Private Fields #region Private Fields
private static readonly Dictionary<IPAddress, Dictionary<int, EndPointListener>>
_addressToEndpoints;
private static readonly Dictionary<IPEndPoint, EndPointListener> _endpoints; private static readonly Dictionary<IPEndPoint, EndPointListener> _endpoints;
#endregion #endregion
@ -66,7 +63,6 @@ namespace WebSocketSharp.Net
static EndPointManager () static EndPointManager ()
{ {
_addressToEndpoints = new Dictionary<IPAddress, Dictionary<int, EndPointListener>> ();
_endpoints = new Dictionary<IPEndPoint, EndPointListener> (); _endpoints = new Dictionary<IPEndPoint, EndPointListener> ();
} }
@ -82,17 +78,6 @@ namespace WebSocketSharp.Net
#region Private Methods #region Private Methods
private static void addEndPointListener (IPAddress address, int port, EndPointListener listener)
{
Dictionary<int, EndPointListener> endpoints;
if (!_addressToEndpoints.TryGetValue (address, out endpoints)) {
endpoints = new Dictionary<int, EndPointListener> ();
_addressToEndpoints.Add (address, endpoints);
}
endpoints.Add (port, listener);
}
private static void addPrefix (string uriPrefix, HttpListener listener) private static void addPrefix (string uriPrefix, HttpListener listener)
{ {
var pref = new HttpListenerPrefix (uriPrefix); var pref = new HttpListenerPrefix (uriPrefix);
@ -115,23 +100,24 @@ namespace WebSocketSharp.Net
if (path.IndexOf ("//", StringComparison.Ordinal) != -1) if (path.IndexOf ("//", StringComparison.Ordinal) != -1)
throw new HttpListenerException (87, "Includes an invalid path."); throw new HttpListenerException (87, "Includes an invalid path.");
var endpoint = new IPEndPoint (addr, port);
EndPointListener lsnr; EndPointListener lsnr;
if (tryGetEndPointListener (addr, port, out lsnr)) { if (_endpoints.TryGetValue (endpoint, out lsnr)) {
if (lsnr.IsSecure ^ pref.IsSecure) if (lsnr.IsSecure ^ pref.IsSecure)
throw new HttpListenerException (87, "Includes an invalid scheme."); throw new HttpListenerException (87, "Includes an invalid scheme.");
} }
else { else {
lsnr = lsnr =
new EndPointListener ( new EndPointListener (
addr, endpoint,
port,
pref.IsSecure, pref.IsSecure,
listener.CertificateFolderPath, listener.CertificateFolderPath,
listener.SslConfiguration, listener.SslConfiguration,
listener.ReuseAddress listener.ReuseAddress
); );
addEndPointListener (addr, port, lsnr); _endpoints.Add (endpoint, lsnr);
} }
lsnr.AddPrefix (pref, listener); lsnr.AddPrefix (pref, listener);
@ -164,8 +150,10 @@ namespace WebSocketSharp.Net
if (path.IndexOf ("//", StringComparison.Ordinal) != -1) if (path.IndexOf ("//", StringComparison.Ordinal) != -1)
return; return;
var endpoint = new IPEndPoint (addr, port);
EndPointListener lsnr; EndPointListener lsnr;
if (!tryGetEndPointListener (addr, port, out lsnr)) if (!_endpoints.TryGetValue (endpoint, out lsnr))
return; return;
if (lsnr.IsSecure ^ pref.IsSecure) if (lsnr.IsSecure ^ pref.IsSecure)
@ -174,17 +162,6 @@ namespace WebSocketSharp.Net
lsnr.RemovePrefix (pref, listener); lsnr.RemovePrefix (pref, listener);
} }
private static bool tryGetEndPointListener (
IPAddress address, int port, out EndPointListener listener
)
{
listener = null;
Dictionary<int, EndPointListener> endpoints;
return _addressToEndpoints.TryGetValue (address, out endpoints)
&& endpoints.TryGetValue (port, out listener);
}
#endregion #endregion
#region Internal Methods #region Internal Methods
@ -203,26 +180,6 @@ namespace WebSocketSharp.Net
} }
} }
internal static bool RemoveEndPoint (IPAddress address, int port)
{
lock (((ICollection) _addressToEndpoints).SyncRoot) {
Dictionary<int, EndPointListener> endpoints;
if (!_addressToEndpoints.TryGetValue (address, out endpoints))
return false;
EndPointListener lsnr;
if (!endpoints.TryGetValue (port, out lsnr))
return false;
endpoints.Remove (port);
if (endpoints.Count == 0)
_addressToEndpoints.Remove (address);
lsnr.Close ();
return true;
}
}
#endregion #endregion
#region Public Methods #region Public Methods
@ -230,7 +187,7 @@ namespace WebSocketSharp.Net
public static void AddListener (HttpListener listener) public static void AddListener (HttpListener listener)
{ {
var added = new List<string> (); var added = new List<string> ();
lock (((ICollection) _addressToEndpoints).SyncRoot) { lock (((ICollection) _endpoints).SyncRoot) {
try { try {
foreach (var pref in listener.Prefixes) { foreach (var pref in listener.Prefixes) {
addPrefix (pref, listener); addPrefix (pref, listener);
@ -248,13 +205,13 @@ namespace WebSocketSharp.Net
public static void AddPrefix (string uriPrefix, HttpListener listener) public static void AddPrefix (string uriPrefix, HttpListener listener)
{ {
lock (((ICollection) _addressToEndpoints).SyncRoot) lock (((ICollection) _endpoints).SyncRoot)
addPrefix (uriPrefix, listener); addPrefix (uriPrefix, listener);
} }
public static void RemoveListener (HttpListener listener) public static void RemoveListener (HttpListener listener)
{ {
lock (((ICollection) _addressToEndpoints).SyncRoot) { lock (((ICollection) _endpoints).SyncRoot) {
foreach (var pref in listener.Prefixes) foreach (var pref in listener.Prefixes)
removePrefix (pref, listener); removePrefix (pref, listener);
} }
@ -262,7 +219,7 @@ namespace WebSocketSharp.Net
public static void RemovePrefix (string uriPrefix, HttpListener listener) public static void RemovePrefix (string uriPrefix, HttpListener listener)
{ {
lock (((ICollection) _addressToEndpoints).SyncRoot) lock (((ICollection) _endpoints).SyncRoot)
removePrefix (uriPrefix, listener); removePrefix (uriPrefix, listener);
} }