Exemple #1
0
        /// <summary>
        /// Gets the eligible connector with limit considering how many non-closed requests the connector may already have.
        /// </summary>
        /// <param name="connectionOpportunityId">The connection opportunity identifier.</param>
        /// <param name="rockContext">The rock context.</param>
        /// <param name="globalLimit">The global limit.</param>
        /// <returns></returns>
        private List <ConnectionConnector> GetEligibleConnectorWithLimit(int connectionOpportunityId, RockContext rockContext, int globalLimit)
        {
            var eligibleConnectors = new List <ConnectionConnector>();
            var qryConnectionOpportunityConnectorGroups = new ConnectionOpportunityConnectorGroupService(rockContext).Queryable()
                                                          .Where(a => a.ConnectionOpportunityId == connectionOpportunityId &&
                                                                 a.ConnectorGroup.IsActive &&
                                                                 !a.ConnectorGroup.IsArchived);

            // Get all connection requests that are active for the given opportunity that have a connector
            var activeConnectionRequestsWithConnector = new ConnectionRequestService(rockContext)
                                                        .Queryable()
                                                        .Where(a => a.ConnectionOpportunityId == connectionOpportunityId &&
                                                               a.ConnectorPersonAlias != null &&
                                                               a.ConnectionState == ConnectionState.Active);

            foreach (var opportunityConnectionGroup in qryConnectionOpportunityConnectorGroups)
            {
                var members = opportunityConnectionGroup.ConnectorGroup.Members.Where(m => m.GroupMemberStatus == GroupMemberStatus.Active).ToList();
                members.LoadAttributes();
                foreach (var member in members)
                {
                    ConnectionConnector connectionConnector = new ConnectionConnector()
                    {
                        PersonAliasId = member.Person.PrimaryAliasId,
                        PersonId      = member.PersonId,
                        CampusId      = opportunityConnectionGroup.CampusId,
                    };
                    eligibleConnectors.Add(connectionConnector);

                    var campaignDailyLimit = member.GetAttributeValue("CampaignDailyLimit").AsIntegerOrNull();
                    connectionConnector.Limit   = campaignDailyLimit.HasValue ? campaignDailyLimit.Value : globalLimit;
                    connectionConnector.Current = activeConnectionRequestsWithConnector.Where(a => a.ConnectorPersonAlias.PersonId == member.PersonId).Count();

                    var campaignScheduleDays = member.GetAttributeValue("CampaignScheduleDays");
                    connectionConnector.DaysOfWeek = new List <DayOfWeek>();
                    if (!string.IsNullOrWhiteSpace(campaignScheduleDays))
                    {
                        connectionConnector.DaysOfWeek = campaignScheduleDays.Split(',').Select(a => ( DayOfWeek )a.AsInteger()).ToList();
                    }
                }
            }

            return(eligibleConnectors);
        }
        private void Window_Loaded(Object sender, RoutedEventArgs e)
        {
            //Catch all exceptions
            Application.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
            Application.Current.Exit += Current_Exit;

            String serverIp = ConfigurationManager.AppSettings["ServerIp"];
            String serverPort = ConfigurationManager.AppSettings["ServerPort"];

            _logger.Info($"Client will try to connect to {serverIp}:{serverPort}");

            _connector = new ConnectionConnector(new IPEndPoint(IPAddress.Parse(serverIp), UInt16.Parse(serverPort)), _username);
            MessageData messageData = new MessageData
            {
                UserInfo =
                {
                    Username = _username,
                    MessageType = MessageType.Connect
                }
            };
            _connector.Send(messageData.ToByte());

            bool succeeded = false;
            while (succeeded == false)
            {
                try
                {
                    encryptionRsa = new EncryptionRSA(true);
                    encryption = new Encryption(encryptionRsa.D, encryptionRsa.E,encryptionRsa.N);
                    messageData.UserInfo.MessageType = MessageType.ParameterN;
                    messageData.UserInfo.Message = encryption.N.ToString(10);
                    _connector.Send(messageData.ToByte());

                    //kartais N neissiuncia kazkodel
                    messageData.UserInfo.MessageType = MessageType.ParameterE;
                    messageData.UserInfo.Message = encryption.E.ToString(10);
                    _connector.Send(messageData.ToByte());

                    succeeded = true;

                }
                catch (Exception)
                {
                }
            }

            _connector.OnMessageReceived += OnMessageReceivedEventHandler;
        }