コード例 #1
0
        public void AddPrefix(ListenerPrefix prefix, HttpListener listener)
        {
            if (prefix.Host == "*")
            {
                List <ListenerPrefix> list;
                List <ListenerPrefix> list2;
                do
                {
                    list            = this._unhandled;
                    list2           = ((list == null) ? new List <ListenerPrefix>() : new List <ListenerPrefix>(list));
                    prefix.Listener = listener;
                    EndPointListener.addSpecial(list2, prefix);
                }while (Interlocked.CompareExchange <List <ListenerPrefix> >(ref this._unhandled, list2, list) != list);
                return;
            }
            if (prefix.Host == "+")
            {
                List <ListenerPrefix> list;
                List <ListenerPrefix> list2;
                do
                {
                    list            = this._all;
                    list2           = ((list == null) ? new List <ListenerPrefix>() : new List <ListenerPrefix>(list));
                    prefix.Listener = listener;
                    EndPointListener.addSpecial(list2, prefix);
                }while (Interlocked.CompareExchange <List <ListenerPrefix> >(ref this._all, list2, list) != list);
                return;
            }
            Dictionary <ListenerPrefix, HttpListener> prefixes;

            for (;;)
            {
                prefixes = this._prefixes;
                if (prefixes.ContainsKey(prefix))
                {
                    break;
                }
                Dictionary <ListenerPrefix, HttpListener> dictionary = new Dictionary <ListenerPrefix, HttpListener>(prefixes);
                dictionary[prefix] = listener;
                if (Interlocked.CompareExchange <Dictionary <ListenerPrefix, HttpListener> >(ref this._prefixes, dictionary, prefixes) == prefixes)
                {
                    return;
                }
            }
            HttpListener httpListener = prefixes[prefix];

            if (httpListener != listener)
            {
                throw new HttpListenerException(400, "There's another listener for " + prefix);
            }
            return;
        }
コード例 #2
0
        public void AddPrefix(HttpListenerPrefix prefix, WebSocketSharp.Net.HttpListener listener)
        {
            List <HttpListenerPrefix> httpListenerPrefixes;
            List <HttpListenerPrefix> httpListenerPrefixes1;
            Dictionary <HttpListenerPrefix, WebSocketSharp.Net.HttpListener> httpListenerPrefixes2;
            Dictionary <HttpListenerPrefix, WebSocketSharp.Net.HttpListener> httpListenerPrefixes3;

            if (prefix.Host == "*")
            {
                do
                {
                    httpListenerPrefixes  = this._unhandled;
                    httpListenerPrefixes1 = (httpListenerPrefixes != null ? new List <HttpListenerPrefix>(httpListenerPrefixes) : new List <HttpListenerPrefix>());
                    prefix.Listener       = listener;
                    EndPointListener.addSpecial(httpListenerPrefixes1, prefix);
                }while (Interlocked.CompareExchange <List <HttpListenerPrefix> >(ref this._unhandled, httpListenerPrefixes1, httpListenerPrefixes) != httpListenerPrefixes);
            }
            else if (prefix.Host != "+")
            {
                do
                {
                    httpListenerPrefixes2 = this._prefixes;
                    if (!httpListenerPrefixes2.ContainsKey(prefix))
                    {
                        httpListenerPrefixes3         = new Dictionary <HttpListenerPrefix, WebSocketSharp.Net.HttpListener>(httpListenerPrefixes2);
                        httpListenerPrefixes3[prefix] = listener;
                    }
                    else
                    {
                        if (httpListenerPrefixes2[prefix] != listener)
                        {
                            throw new WebSocketSharp.Net.HttpListenerException(87, string.Format("There's another listener for {0}.", prefix));
                        }
                        break;
                    }
                }while (Interlocked.CompareExchange <Dictionary <HttpListenerPrefix, WebSocketSharp.Net.HttpListener> >(ref this._prefixes, httpListenerPrefixes3, httpListenerPrefixes2) != httpListenerPrefixes2);
            }
            else
            {
                do
                {
                    httpListenerPrefixes  = this._all;
                    httpListenerPrefixes1 = (httpListenerPrefixes != null ? new List <HttpListenerPrefix>(httpListenerPrefixes) : new List <HttpListenerPrefix>());
                    prefix.Listener       = listener;
                    EndPointListener.addSpecial(httpListenerPrefixes1, prefix);
                }while (Interlocked.CompareExchange <List <HttpListenerPrefix> >(ref this._all, httpListenerPrefixes1, httpListenerPrefixes) != httpListenerPrefixes);
            }
        }