private void HandlePushRequest(ForsmanPushRequest message) { ForsmanLoadAvailabilityResponce responce; if (BidLock == -1) { BidLock = message.SenderId; List <ForsmanBid> bids = new List <ForsmanBid>(); var load = LoadManager.GetPredictedHostLoadInfo(); foreach (var conload in message.ContainerLoads) { var nload = LoadManager.GetHostLoadInfoAfterContainer(conload); if (LoadManager.CanITakeLoad(conload)) //&& nload.CalculateTotalUtilizationState(MinUtilization,MaxUtilization) //!=UtilizationStates.OverUtilization) { ForsmanBid bid = new ForsmanBid(MachineId, true, nload, message.AuctionId, conload.ContainerId, BidReasons.ValidBid); bids.Add(bid); } } responce = new ForsmanLoadAvailabilityResponce(message.SenderId, this.MachineId, load, true, bids); } else { responce = new ForsmanLoadAvailabilityResponce(message.SenderId, this.MachineId, null, false, null); //Resources are locked in the first place } CommunicationModule.SendMessage(responce); }
protected override bool SendPushRequest() { var list = ContainerTable.GetAllContainersLoadInfo(); //.Where(x=> //_loadManager.GetHostLoadInfoAWithoutContainer(x) //.CalculateTotalUtilizationState(MinUtilization,MaxUtilization)!= UtilizationStates.UnderUtilization ) //.ToList(); int total = (int)SimulationSize - 1; var load = LoadManager.GetPredictedHostLoadInfo(); _currentAuction = new ForsmanPushAuction(load, list, total); BidLock = 0; ForsmanPushRequest m = new ForsmanPushRequest(-1, this.MachineId, load, this.MachineId, list); CommunicationModule.SendMessage(m); Console.WriteLine($"Host No{MachineId} send Push Request"); return(false); }