Beispiel #1
0
        public RequestGroup CreatePartialRequestGroup(IEnumerable <Request> declinedRequests, IEnumerable <Ranking> rankings, DateTimeOffset?newRequestExpiry, DateTimeOffset newRequestCreationTime, bool isTerminalRequest = false)
        {
            var brokersWithRequestGroups = RequestGroups.Select(r => r.Ranking.BrokerId);

            var ranking = rankings.Where(r => !brokersWithRequestGroups.Contains(r.BrokerId)).OrderBy(r => r.Rank).FirstOrDefault();
            var orders  = declinedRequests.GetRequestOrders();

            if (ranking == null)
            {
                // Rejected by all brokers, close all orders
                SetStatus(OrderStatus.NoBrokerAcceptedOrder, false);
                orders.ToList().ForEach(o => o.Status = OrderStatus.NoBrokerAcceptedOrder);
                return(null);
            }
            var requestGroup = new RequestGroup(
                ranking,
                newRequestExpiry,
                newRequestCreationTime,
                orders.Select(o => o.CreateRequest(ranking, newRequestExpiry, newRequestCreationTime, isTerminalRequest)).ToList(),
                isTerminalRequest
                );

            RequestGroups.Add(requestGroup);

            return(requestGroup);
        }
Beispiel #2
0
        private RequestGroup CreateQuarantinedRequestGroup(Ranking ranking, DateTimeOffset creationTime, Quarantine quarantine)
        {
            var requestGroup = new RequestGroup(ranking, creationTime, Orders.Select(o => o.CreateQuarantinedRequest(ranking, creationTime, quarantine)).ToList(), quarantine);

            RequestGroups.Add(requestGroup);
            return(requestGroup);
        }
Beispiel #3
0
 public Request(Ranking ranking, DateTimeOffset?expiry, DateTimeOffset creationTime, bool isTerminalRequest = false, bool isChangeInterpreter = false, RequestGroup requestGroup = null)
 {
     if (!isChangeInterpreter && expiry.HasValue && expiry < creationTime)
     {
         throw new InvalidOperationException("The Request cannot have an expiry before the creation time.");
     }
     Ranking           = ranking;
     Status            = RequestStatus.Created;
     ExpiresAt         = expiry;
     CreatedAt         = creationTime;
     IsTerminalRequest = isTerminalRequest;
     RequestGroup      = requestGroup;
 }
Beispiel #4
0
        public RequestGroup CreateRequestGroup(IEnumerable <Ranking> rankings, DateTimeOffset?newRequestExpiry, DateTimeOffset newRequestCreationTime, bool isTerminalRequest = false)
        {
            var ranking = GetNextRanking(rankings, newRequestCreationTime);

            if (ranking == null)
            {
                // Rejected by all brokers, close all orders
                SetStatus(OrderStatus.NoBrokerAcceptedOrder);
                return(null);
            }

            var requestGroup = new RequestGroup(
                ranking,
                newRequestExpiry,
                newRequestCreationTime,
                Orders.Select(o => o.CreateRequest(ranking, newRequestExpiry, newRequestCreationTime, isTerminalRequest)).ToList(),
                isTerminalRequest
                );

            RequestGroups.Add(requestGroup);

            return(requestGroup);
        }