示例#1
0
        public void TestConnectionCanOnlyAttachSingleUDP()
        {
            AvatarConnection conn = new AvatarConnection(new AgentCircuitData(), EstablishedBy.Login);
            conn.AttachUdpCircuit(new MockClientAPI());

            Assert.Throws<AttachUdpCircuitException>(() => conn.AttachUdpCircuit(new MockClientAPI()));
        }
        /// <summary>
        /// Handler for connection termination
        /// </summary>
        /// <param name="conn"></param>
        private void conn_OnConnectionTerminated(AvatarConnection conn)
        {
            lock (_connectionsByUserId)
            {
                _connectionsByUserId.Remove(conn.CircuitData.AgentID);

                if (conn.UdpCircuit != null)
                {
                    _connectionsByEndpoint.Remove(conn.UdpCircuit.RemoteEndPoint);
                }
            }
        }
        /// <summary>
        /// Creates a new connection for the given circuit. If a connection already exists for the user,
        /// an exception is thrown
        /// </summary>
        /// <param name="circuitData">Circuit data describing the inbound connection</param>
        /// <returns>A new connection object</returns>
        /// <exception cref="ConnectionAlreadyEstablishedException">If the user is already connected</exception>
        public AvatarConnection NewConnection(AgentCircuitData circuitData, EstablishedBy reason)
        {
            AvatarConnection conn;

            lock (_connectionsByUserId)
            {
                if (_connectionsByUserId.TryGetValue(circuitData.AgentID, out conn))
                {
                    throw new ConnectionAlreadyEstablishedException(String.Format("Connection for user {0} is already established", circuitData.AgentID), conn);
                }
                else
                {
                    conn = new AvatarConnection(circuitData, reason);
                    conn.OnConnectionTerminated += conn_OnConnectionTerminated;
                    _connectionsByUserId[circuitData.AgentID] = conn;
                }
            }

            ICapsControl capsControl = _capsModule.CreateCaps(circuitData.AgentID, circuitData.CapsPath);

            conn.SetCapsControl(capsControl);

            return(conn);
        }
 public ConnectionAlreadyEstablishedException(string message, Exception innerException, AvatarConnection conn)
     : base(message, innerException)
 {
     _connection = conn;
 }
示例#5
0
 public ConnectionAlreadyEstablishedException(string message, Exception innerException, AvatarConnection conn)
     : base(message, innerException)
 {
     _connection = conn;
 }