/// <summary> /// Tries to initiate a connection (1:1 conversation) by creating a request on behalf of /// the given requestor. This method does nothing, if a request for the same user already exists. /// </summary> /// <param name="requestor">The requestor conversation reference.</param> /// <param name="rejectConnectionRequestIfNoAggregationChannel"> /// If true, will reject all requests, if there is no aggregation channel.</param> /// <returns>The result of the operation: /// - ConnectionRequestResultType.Created, /// - ConnectionRequestResultType.AlreadyExists, /// - ConnectionRequestResultType.NotSetup or /// - ConnectionRequestResultType.Error (see the error message for more details). /// </returns> public virtual ConnectionRequestResult CreateConnectionRequest( ConversationReference requestor, bool rejectConnectionRequestIfNoAggregationChannel = false) { if (requestor == null) { throw new ArgumentNullException("Requestor missing"); } ConnectionRequestResult createConnectionRequestResult = null; RoutingDataManager.AddConversationReference(requestor); ConnectionRequest connectionRequest = new ConnectionRequest(requestor); if (RoutingDataManager.IsAssociatedWithAggregation(requestor)) { createConnectionRequestResult = new ConnectionRequestResult() { Type = ConnectionRequestResultType.Error, ErrorMessage = $"The given ConversationReference ({RoutingDataManager.GetChannelAccount(requestor)?.Name}) is associated with aggregation and hence invalid to request a connection" }; } else { createConnectionRequestResult = RoutingDataManager.AddConnectionRequest( connectionRequest, rejectConnectionRequestIfNoAggregationChannel); } return(createConnectionRequestResult); }