/// <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 AvatarConnection(AgentCircuitData circuitData, EstablishedBy reason) { _circuitData = circuitData; _state = AvatarConnectionState.UDPCircuitWait; _establishedReason = reason; }