Пример #1
0
 public override IDictionary <string, object> CancelProduction(ProductionInProgress productionInProgress)
 {
     return(ReturnReservedItems(productionInProgress));
 }
Пример #2
0
 public override IDictionary <string, object> EndProduction(ProductionInProgress productionInProgress, bool forced)
 {
     return(EndCalibrationProgramForge(productionInProgress));
 }
 public void AddToRunningProductions(ProductionInProgress productionInProgress)
 {
     _productionsInProgress[productionInProgress.ID] = productionInProgress;
 }
 private bool RemoveFromRunningProductions(ProductionInProgress productionInProgress)
 {
     return(_productionsInProgress.Remove(productionInProgress.ID));
 }
        private void EndProduction(ProductionInProgress productionInProgress, bool forced)
        {
            Logger.Info("ending production. " + productionInProgress);

            var facility = GetFacility(productionInProgress.facilityEID);

            if (facility == null)
            {
                Logger.Error("facility not found in endProduction. facility EID:" + productionInProgress.facilityEID);

                _pipRepository.Delete(productionInProgress);
                RemoveFromRunningProductions(productionInProgress);

                Logger.Error("failed endProduction for " + productionInProgress);
                return;
            }

            using (var scope = Db.CreateTransaction())
            {
                try
                {
                    var replyDict = facility.EndProduction(productionInProgress, forced);

                    //delete from sql
                    _pipRepository.Delete(productionInProgress);

                    productionInProgress.SendProductionEventToCorporationMembersOnCommitted(Commands.ProductionRemoteEnd);

                    var ep = CalculateEp(facility, productionInProgress);

                    productionInProgress.character.AddExtensionPointsBoostAndLog(EpForActivityType.Production, ep);


                    if (replyDict != null)
                    {
                        Transaction.Current.OnCommited(() =>
                        {
                            //if the player is online we report the facility load
                            replyDict.Add(k.production, productionInProgress.ToDictionary());

                            var facilityInfo = facility.GetFacilityInfo(productionInProgress.character);
                            replyDict.Add(k.facility, facilityInfo);

                            Message.Builder.SetCommand(Commands.ProductionFinished)
                            .WithData(replyDict)
                            .ToCharacter(productionInProgress.character)
                            .Send();
                        });
                    }

                    productionInProgress.WriteLog();

                    Transaction.Current.OnCompleted((c) =>
                    {
                        RemoveFromRunningProductions(productionInProgress);
                    });

                    scope.Complete();
                }
                catch (Exception ex)
                {
                    Logger.Exception(ex);
                }
            }
        }