Пример #1
0
        private async Task HandleAsync(byte[] bytes, Stream stream, DecisionEngine engine)
        {
            Gatekeeper.LdapPacketParserLibrary.Parser  parser  = new Gatekeeper.LdapPacketParserLibrary.Parser();
            LdapPacketParserLibrary.Models.LdapMessage message = parser.TryParsePacket(bytes);

            List <LdapMessage> replies = await engine.GenerateReply(message);

            foreach (LdapMessage outMsg in replies)
            {
                if (outMsg.ProtocolOp.GetType() == typeof(Gatekeeper.LdapServerLibrary.Models.Operations.Response.UnbindDummyResponse))
                {
                    _clientIsConnected = false;
                    break;
                }
                byte[] msg = (new Parser.PacketParser()).TryEncodePacket(outMsg);
                stream.Write(msg, 0, msg.Length);

                if (outMsg.ProtocolOp.GetType() == typeof(Gatekeeper.LdapServerLibrary.Models.Operations.Response.ExtendedOperationResponse))
                {
                    var response = ((Gatekeeper.LdapServerLibrary.Models.Operations.Response.ExtendedOperationResponse)outMsg.ProtocolOp);
                    if (response.ResponseName == ExtendedRequestHandler.StartTLS)
                    {
                        _useStartTls = true;
                    }
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Determines whether a merge join is possible for the specified edge.
        /// </summary>
        /// <param name="edge">The join edge.</param>
        /// <returns>
        ///   <c>true</c> if a merge join is possible for the specified edge; otherwise, <c>false</c>.
        /// </returns>
        private bool CanDoMergeJoin(Edge edge)
        {
            //
            // first, determine the output sort order for the left and right inputs of the join
            // edge, if any exists to begin with.

            long[] orderLeft;
            long[] orderRight;

            if (edge.Left.HasOperator)
            {
                orderLeft = edge.Left.Operator.GetOutputSortOrder();
            }
            else
            {
                orderLeft = edge.Left.SAP.GetScanOrdering();
            }

            if (edge.Right.HasOperator)
            {
                orderRight = edge.Right.Operator.GetOutputSortOrder();
            }
            else
            {
                orderRight = edge.Right.SAP.GetScanOrdering();
            }

            //
            // if this ordering allows us to do a merge join, return true. otherwise, return false.

            return(DecisionEngine.CanDoMergeJoin(orderLeft, orderRight));
        }
Пример #3
0
        /// <summary>
        /// Instantiates the decision engine used during query plan generation for decision point
        /// resolving.
        /// </summary>
        /// <param name="context">The database context.</param>
        /// <returns>
        /// An instantiated decision engine.
        /// </returns>
        private static DecisionEngine GetDecisionEngine(Database context)
        {
            //
            // any rules that are used are hardcoded here

            var de = new DecisionEngine(context);

            //
            // load seed rules

            de.SeedRules.Add(new rs::PositionalPrioritizer());      // Rule 1
            //de.SeedRules.Add(new rs::StatisticalPrioritizer());     // Rule 2
            de.SeedRules.Add(new rs::RandomPicker());

            //
            // load join rules

            de.JoinRules.Add(new rj::PatternPrioritizer());         // Rule 2
            de.JoinRules.Add(new rj::MergeJoinPrioritizer());       // Rule 1
            de.JoinRules.Add(new rj::LiteralPrioritizer());         // Rule 4
            de.JoinRules.Add(new rj::PositionalPrioritizer());      // Rule 3
            //de.JoinRules.Add(new rj::StatisticalPrioritizer());     // Rule 5
            de.JoinRules.Add(new rj::RandomPicker());

            return(de);
        }
Пример #4
0
        internal void StartReceiving()
        {
            Task networkTask = new Task(async() =>
            {
                NetworkStream unencryptedStream = Client.GetStream();
                SslStream sslStream             = new SslStream(unencryptedStream);

                IPEndPoint?endpoint = (IPEndPoint?)Client.Client.RemoteEndPoint;
                if (endpoint == null)
                {
                    throw new Exception("IP address is null");
                }

                ClientContext clientContext = new ClientContext(endpoint.Address);
                DecisionEngine engine       = new DecisionEngine(clientContext);

                bool _initializedTls = false;

                while (_clientIsConnected)
                {
                    Stream rawOrSslStream = (_useStartTls) ? sslStream : unencryptedStream;

                    try
                    {
                        if (_useStartTls && !_initializedTls)
                        {
                            await sslStream.AuthenticateAsServerAsync(new SslServerAuthenticationOptions
                            {
                                ServerCertificate = SingletonContainer.GetCertificate(),
                            });
                            _initializedTls = true;
                        }

                        Byte[] data = await ReadFullyAsync(rawOrSslStream);

                        await HandleAsync(data, rawOrSslStream, engine);
                    }
                    catch (Exception e)
                    {
                        ILogger?logger = SingletonContainer.GetLogger();
                        if (logger != null)
                        {
                            logger.LogException(e);
                        }

                        break;
                    }
                }

                Client.Close();
            });

            networkTask.Start();
        }
        public void DecideLoanForCorp()
        {
            IDecisionEngine decisionEngine = new DecisionEngine();

            decisionEngine.CreditScoreSubsystem = new CreditScoreSubsystem();
            decisionEngine.PartyWebService      = new PartyWebService();


            bool approved = decisionEngine.IsApproved(TaxidCcorpExcellent, 40000M);

            Assert.IsTrue(approved, "Expected a 40k loan to be approved for this C-Corp");
        }
Пример #6
0
        static void Main(string[] args)
        {
            IDecisionEngine decisionEngine = new DecisionEngine();

            decisionEngine.CreditScoreSubsystem = new CreditScoreSubsystem();
            decisionEngine.PartyWebService      = new PartyWebService();


            bool approved = decisionEngine.IsApproved(111223333, 40000M);


            Console.WriteLine("Party [111223333]" + ((approved)?" was":" was not") + " approved.");
            var name = Console.ReadLine();
        }
Пример #7
0
 public BotPlayer(string name, int startingStack, DecisionEngine decisionEngine) : base(name, startingStack)
 {
     this.decisionEngine = decisionEngine;
 }