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 } }
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(); } }