From 23a334b9f54a1ef5df3b503c165e7b76b746a2b1 Mon Sep 17 00:00:00 2001
From: John Hurliman
Date: Tue, 13 Oct 2009 14:50:03 -0700
Subject: * Rewrote ClientManager to remove Lindenisms from OpenSim core,
improve performance by removing locks, and replace LLUDPClientCollection *
Removed the confusing (and LL-specific) shutdowncircuit parameter from
IClientAPI.Close() * Updated the LLUDP code to only use ClientManager instead
of trying to synchronize ClientManager and m_clients * Remove clients
asynchronously since it is a very slow operation (including a 2000ms sleep)
---
.../ClientStack/LindenUDP/LLUDPClientCollection.cs | 137 ---------------------
1 file changed, 137 deletions(-)
delete mode 100644 OpenSim/Region/ClientStack/LindenUDP/LLUDPClientCollection.cs
(limited to 'OpenSim/Region/ClientStack/LindenUDP/LLUDPClientCollection.cs')
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPClientCollection.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPClientCollection.cs
deleted file mode 100644
index 4f375e4..0000000
--- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPClientCollection.cs
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (c) Contributors, http://opensimulator.org/
- * See CONTRIBUTORS.TXT for a full list of copyright holders.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the OpenSimulator Project nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Net;
-using OpenSim.Framework;
-using OpenMetaverse;
-using BclExtras.Collections;
-
-using ReaderWriterLockImpl = OpenMetaverse.ReaderWriterLockSlim;
-
-namespace OpenSim.Region.ClientStack.LindenUDP
-{
- ///
- /// A thread safe mapping from endpoints to client references
- ///
- public sealed class UDPClientCollection
- {
- #region IComparers
-
- private sealed class IPEndPointComparer : IComparer
- {
- public int Compare(IPEndPoint x, IPEndPoint y)
- {
- int result = x.Address.Address.CompareTo(y.Address.Address);
- if (result == 0) result = x.Port.CompareTo(y.Port);
- return result;
- }
- }
-
- #endregion IComparers
-
- /// An immutable dictionary mapping from
- /// to references
- private ImmutableMap m_dict;
- /// Immutability grants thread safety for concurrent reads and
- /// read-writes, but not concurrent writes
- private object m_writeLock = new object();
-
- /// Number of clients in the collection
- public int Count { get { return m_dict.Count; } }
-
- ///
- /// Default constructor
- ///
- public UDPClientCollection()
- {
- m_dict = new ImmutableMap(new IPEndPointComparer());
- }
-
- ///
- /// Add a client reference to the collection
- ///
- /// Remote endpoint of the client
- /// Reference to the client object
- public void Add(IPEndPoint key, LLUDPClient value)
- {
- lock (m_writeLock)
- m_dict = m_dict.Add(key, value);
- }
-
- ///
- /// Remove a client from the collection
- ///
- /// Remote endpoint of the client
- public void Remove(IPEndPoint key)
- {
- lock (m_writeLock)
- m_dict = m_dict.Delete(key);
- }
-
- ///
- /// Resets the client collection
- ///
- public void Clear()
- {
- lock (m_writeLock)
- m_dict = new ImmutableMap(new IPEndPointComparer());
- }
-
- ///
- /// Checks if an endpoint is in the collection
- ///
- /// Endpoint to check for
- /// True if the endpoint was found in the collection, otherwise false
- public bool ContainsKey(IPEndPoint key)
- {
- return m_dict.ContainsKey(key);
- }
-
- ///
- /// Attempts to fetch a value out of the collection
- ///
- /// Endpoint of the client to retrieve
- /// Retrieved client, or null on lookup failure
- /// True if the lookup succeeded, otherwise false
- public bool TryGetValue(IPEndPoint key, out LLUDPClient value)
- {
- return m_dict.TryGetValue(key, out value);
- }
-
- ///
- /// Performs a given task in parallel for each of the elements in the
- /// collection
- ///
- /// Action to perform on each element
- public void ForEach(Action action)
- {
- Parallel.ForEach(m_dict.Values, action);
- }
- }
-}
--
cgit v1.1