Example #1
0
        public static void SendToServer(ModelPlayToServer toServ)
        {
            toServ.LastTick = (long)Find.TickManager.TicksGame;

            //отправка всех новых и измененных объектов игрока
            toServ.WObjects = Find.WorldObjects.AllWorldObjects
                              .Where(o => o.Faction != null && o.Faction.IsPlayer && !(o is CaravanOnline) && !(o is BaseOnline))
                              .Select(o => GetWorldObjectEntry(o))
                              .ToList();

            //свои объекты которые удалил пользователь с последнего обновления
            if (ToDelete != null)
            {
                var toDeleteNewNow = MyWorldObjectEntry
                                     .Where(p => !Find.WorldObjects.AllWorldObjects.Any(wo => wo.ID == p.Key))
                                     .Select(p => p.Value)
                                     .ToList();
                ToDelete.AddRange(toDeleteNewNow);
            }

            toServ.WObjectsToDelete = ToDelete;
        }
        public static void SendToServer(ModelPlayToServer toServ, bool firstRun, ModelGameServerInfo modelGameServerInfo)
        {
            //Loger.Log("Empire=" + Find.FactionManager.FirstFactionOfDef(FactionDefOf.Empire)?.GetUniqueLoadID());

            toServ.LastTick = (long)Find.TickManager.TicksGame;
            var gameProgress = new PlayerGameProgress();

            var allWorldObjectsArr = new WorldObject[Find.WorldObjects.AllWorldObjects.Count];

            Find.WorldObjects.AllWorldObjects.CopyTo(allWorldObjectsArr);

            var            allWorldObjects = allWorldObjectsArr.Where(wo => wo != null).ToList();
            List <Faction> factionList     = Find.FactionManager.AllFactionsListForReading;

            if (SessionClientController.Data.GeneralSettings.EquableWorldObjects)
            {
                #region Send to Server: firstRun EquableWorldObjects
                try
                {
                    // Game on init
                    if (firstRun && modelGameServerInfo != null)
                    {
                        if (modelGameServerInfo.WObjectOnlineList.Count > 0)
                        {
                            toServ.WObjectOnlineList = allWorldObjectsArr.Where(wo => wo is Settlement)
                                                       .Where(wo => wo.HasName && !wo.Faction.IsPlayer).Select(obj => GetWorldObjects(obj)).ToList();
                        }

                        if (modelGameServerInfo.FactionOnlineList.Count > 0)
                        {
                            List <Faction> factions = Find.FactionManager.AllFactionsListForReading;
                            toServ.FactionOnlineList = factions.Select(obj => GetFactions(obj)).ToList();
                        }
                        return;
                    }
                }
                catch (Exception e)
                {
                    Loger.Log("Exception >> " + e);
                    Log.Error("SendToServer FirstRun error");
                    return;
                }
                #endregion
            }

            if (!firstRun)
            {
                //Loger.Log("Client TestBagSD 035");
                Dictionary <Map, List <Pawn> > cacheColonists = new Dictionary <Map, List <Pawn> >();
                //отправка всех новых и измененных объектов игрока
                toServ.WObjects = allWorldObjects
                                  .Where(o => o.Faction?.IsPlayer == true && //o.Faction != null && o.Faction.IsPlayer
                                         (o is Settlement || o is Caravan)) //Чтобы отсеч разные карты событий
                                  .Select(o => GetWorldObjectEntry(o, gameProgress, cacheColonists))
                                  .ToList();
                LastSendMyWorldObjects = toServ.WObjects;

                //Loger.Log("Client TestBagSD 036");
                //свои объекты которые удалил пользователь с последнего обновления
                if (ToDelete != null)
                {
                    var toDeleteNewNow = WorldObjectEntrys
                                         .Where(p => !allWorldObjects.Any(wo => wo.ID == p.Key))
                                         .Select(p => p.Value)
                                         .ToList();
                    ToDelete.AddRange(toDeleteNewNow);
                }

                toServ.WObjectsToDelete = ToDelete;
            }
            toServ.GameProgress = gameProgress;

            if (SessionClientController.Data.GeneralSettings.EquableWorldObjects)
            {
                #region Send to Server: Non-Player World Objects
                //  Non-Player World Objects
                try
                {
                    var OnlineWObjArr = allWorldObjectsArr.Where(wo => wo is Settlement)
                                        .Where(wo => wo.HasName && !wo.Faction.IsPlayer);
                    if (!firstRun)
                    {
                        if (LastWorldObjectOnline != null && LastWorldObjectOnline.Count > 0)
                        {
                            toServ.WObjectOnlineToDelete = LastWorldObjectOnline.Where(WOnline => !OnlineWObjArr.Any(wo => ValidateOnlineWorldObject(WOnline, wo))).ToList();

                            toServ.WObjectOnlineToAdd = OnlineWObjArr.Where(wo => !LastWorldObjectOnline.Any(WOnline => ValidateOnlineWorldObject(WOnline, wo)))
                                                        .Select(obj => GetWorldObjects(obj)).ToList();
                        }
                    }

                    toServ.WObjectOnlineList = OnlineWObjArr.Select(obj => GetWorldObjects(obj)).ToList();
                    LastWorldObjectOnline    = toServ.WObjectOnlineList;
                }
                catch (Exception e)
                {
                    Loger.Log("Exception >> " + e);
                    Log.Error("ERROR SendToServer WorldObject Online");
                }
                #endregion

                #region Send to Server: Non-Player Factions
                // Non-Player Factions
                try
                {
                    if (!firstRun)
                    {
                        if (LastFactionOnline != null && LastFactionOnline.Count > 0)
                        {
                            toServ.FactionOnlineToDelete = LastFactionOnline.Where(FOnline => !factionList.Any(f => ValidateFaction(FOnline, f))).ToList();

                            toServ.FactionOnlineToAdd = factionList.Where(f => !LastFactionOnline.Any(FOnline => ValidateFaction(FOnline, f)))
                                                        .Select(obj => GetFactions(obj)).ToList();
                        }
                    }

                    toServ.FactionOnlineList = factionList.Select(obj => GetFactions(obj)).ToList();
                    LastFactionOnline        = toServ.FactionOnlineList;
                }
                catch (Exception e)
                {
                    Loger.Log("Exception >> " + e);
                    Log.Error("ERROR SendToServer Faction Online");
                }
                #endregion
            }
        }
Example #3
0
        public void TestInWf_LaunchTargetCampaign_pause()
        {
            Workflow     wf             = null;
            UserSurvey   survey         = null;
            Person       person         = null;
            Relationship surveyTaker    = null;
            Definition   targetObject   = null;
            IEntity      targetInstance = null;

            try
            {
                wf     = CreateTargetWf("TestInWf" + DateTime.UtcNow);
                survey = CreateSurvey("TestInWf Survey " + DateTime.UtcNow);
                person = Entity.Create <Person>();

                surveyTaker = new Relationship
                {
                    Name             = "Survey Tooker " + DateTime.UtcNow,
                    Cardinality_Enum = CardinalityEnum_Enumeration.ManyToOne,
                    ToType           = Person.Person_Type
                };

                targetObject      = Entity.Create <Definition>();
                targetObject.Name = "TestInWf Target " + DateTime.UtcNow;
                targetObject.Inherits.Add(UserResource.UserResource_Type);
                targetObject.Relationships.Add(surveyTaker);
                surveyTaker.FromType = targetObject.As <EntityType>();
                targetObject.Save();

                targetInstance = Entity.Create(targetObject.Id);
                targetInstance.SetRelationships(surveyTaker.Id, new EntityRelationship <Person>(person).ToEntityRelationshipCollection(), Direction.Forward);
                targetInstance.Save();

                var targets = new EntityCollection <UserResource>();
                targets.Add(targetInstance.As <UserResource>());

                var wfInput = new Dictionary <string, object>
                {
                    { "survey", survey },
                    { "targets", targets },
                    { "surveyTaker", surveyTaker },
                    { "targetObject", targetObject },
                    { "taskName", "MyTaskName" },
                    { "dueDays", 1m },
                    { "pause", true }
                };

                ToDelete.AddRange(new List <long> {
                    targetInstance.Id, targetObject.Id, surveyTaker.Id, person.Id, survey.Id, wf.Id
                });

                var run = RunWorkflow(wf, wfInput);

                Assert.That(run.WorkflowRunStatus_Enum, Is.EqualTo(WorkflowRunState_Enumeration.WorkflowRunPaused));

                survey = Entity.Get <UserSurvey>(survey.Id).AsWritable <UserSurvey>();

                survey.SurveyCampaigns.Count.Should().Be(1);
                survey.SurveyCampaigns.First().SurveyResponses.Count.Should().Be(1);

                var result = survey.SurveyCampaigns.First().SurveyResponses.First();

                result.UserSurveyTaskForResults.Count.Should().Be(1);

                var task   = result.UserSurveyTaskForResults.First();
                var taskId = task.Id;

                var writableTask = task.AsWritable <UserSurveyTask>();

                using (new WorkflowRunContext {
                    RunTriggersInCurrentThread = true
                })
                {
                    writableTask.UserTaskIsComplete = true;
                    writableTask.TaskStatus_Enum    = TaskStatusEnum_Enumeration.TaskStatusCompleted;
                    writableTask.Save();
                }

                WaitForWorkflowToStop(run, 10000);

                run = Entity.Get <WorkflowRun>(run.Id);

                Assert.That(run.WorkflowRunStatus_Enum, Is.EqualTo(WorkflowRunState_Enumeration.WorkflowRunCompleted));

                Assert.That(Entity.Get(taskId), Is.Null, "Task has been deleted");
            }
            finally
            {
                targetInstance?.Delete();
                targetObject?.Delete();
                surveyTaker?.Delete();
                person?.Delete();
                survey?.Delete();
                wf?.Delete();
            }
        }