internal void NotifyClientsEndCycle(NotifyClientsEndCycleArgs args) { NotifyClientsEndCycleArgs arg = new NotifyClientsEndCycleArgs(); arg.Transport2Client = new structTransport2Client(); arg.Transport2Client.RefreshInfrasite = args.Transport2Client.RefreshInfrasite; arg.Transport2Client.AtomObjectCollection = new structTransportCommonProperty[0]; arg.Transport2Client.Ex_clockDate = args.Transport2Client.Ex_clockDate; // arg.Transport2Client.ExClockRatioSpeed = ExClockRatioSpeed; arg.Transport2Client.ManagerStatus = args.Transport2Client.ManagerStatus; arg.Transport2Client.ScenarioID = args.Transport2Client.ScenarioID; arg.Transport2Client.AtomObjectType = args.Transport2Client.AtomObjectType; arg.Transport2Client.isEndPackage = false; arg.Transport2Client.typPackage = 0; arg.Transport2Client.AtomObjectCollection = args.Transport2Client.AtomObjectCollection; arg.Transport2Client.NavalObjectCollection = args.Transport2Client.NavalObjectCollection; arg.Transport2Client.isEndPackage = true; GlobalHost.ConnectionManager.GetHubContext <SimulationHub>().Clients.Group("0").NotifyEndCycle(args); return; }
public Task JoinGroup(string groupName) { var t = Groups.Add(Context.ConnectionId, groupName); SessionManager m = (SessionManager)GlobalHost.DependencyResolver.GetService(typeof(SessionManager)); NotifyClientsEndCycleArgs args = new NotifyClientsEndCycleArgs(); args = new NotifyClientsEndCycleArgs(); args.Transport2Client.Ex_clockDate = m.gameManager.m_GameObject.Ex_clockDate; // args.Transport2Client.ExClockRatioSpeed = m_GameManager.ExClockRatioSpeed; args.Transport2Client.AtomObjectType = 2; args.Transport2Client.AtomObjectCollection = m.gameManager.m_GameObject.PrepareGroundCommonProperty(); args.Transport2Client.ManagerStatus = m.gameManager.ManagerStatus; m.gameManager.NotifyClientsEndCycle(args); return(t); }
internal void Ex_Manager() { LastExClockTick = Environment.TickCount; while(m_GameManager.Ex_ManagerThreadShouldStop==false) { if (m_GameManager.ManagerStatus == typGamestatus.PAUSE_STATUS) { if (GroundExecuteStateTask != null && GroundExecuteStateTask.IsCompleted == false) { try { GroundExecuteStateTask.Wait(); GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced); } catch (AggregateException exx) { // Log.WriteErrorToLog(exx, m_GameManager.curScenario.DbName); } } Thread.Sleep(1000); continue; } else if ((m_GameManager.ManagerStatus == typGamestatus.EDIT_STATUS) || (m_GameManager.ManagerStatus == typGamestatus.PROCESS_RUN2EDIT)) { // Thread.CurrentThread.Abort(); break; } // m_GameManager.ExClockRatioSpeed = 6; if (m_GameManager.ExClockRatioSpeed != 0) { double currExClockTick = Environment.TickCount; double TickCount = currExClockTick - LastExClockTick; // int sleepTime = 1000 / m_GameManager.ExClockRatioSpeed - (int)TickCount; int sleepTime = ExClockResolution / m_GameManager.ExClockRatioSpeed - (int)TickCount; if (sleepTime > 0 && sleepTime < Int32.MaxValue) { Thread.Sleep(sleepTime); } } //int sleepTime = 1000 / m_GameManager.ExClockRatioSpeed - (int)TickCount; //if (sleepTime > 0 && sleepTime < Int32.MaxValue) //{ // Thread.Sleep(sleepTime); //} // ExClockResolution = 1000; Ex_clockDate = Ex_clockDate.AddMilliseconds(ExClockResolution); // Yinon Douchan: Code for statistics and simulation of explosion // update statistics every second if ((Ex_clockStartDate - Ex_clockDate).TotalMilliseconds % 10000 == 0) { collisionData.Add(new CollisionData(Ex_clockDate, totalCollisions, nonFrontalCollisions, frontalCollisions)); } // --------------------------------------------------------------- LastExClockTick = Environment.TickCount; TimeSpan TSGroundExecute = Ex_clockDate.Subtract(Ex_clockGroundExecute); if (TSGroundExecute.TotalMilliseconds >= m_GameManager.GroundCycleResolution) { Ex_clockGroundExecute = Ex_clockDate; if (GroundExecuteStateTask != null) { try { GroundExecuteStateTask.Wait(); GroundExecuteStateTask.Dispose(); GroundExecuteStateTask = null; } catch (AggregateException Exx) { GroundExecuteStateTask.Dispose(); GroundExecuteStateTask = null; // GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced); // Log.WriteErrorToLog(Exx, m_GameManager.curScenario.DbName); } } GroundExecuteStateTask = new Task(() => { manageEvents(); foreach (KeyValuePair<string, AtomBase> keyVal in GroundAtomObjectCollection) { clsGroundAtom refGroundAtom = keyVal.Value as clsGroundAtom; refGroundAtom.ExecuteState(); refGroundAtom.CheckCondition(); } NotifyClientsEndCycleArgs args = new NotifyClientsEndCycleArgs(); args = new NotifyClientsEndCycleArgs(); args.Transport2Client.Ex_clockDate = Ex_clockDate; // args.Transport2Client.ExClockRatioSpeed = m_GameManager.ExClockRatioSpeed; args.Transport2Client.AtomObjectType = 2; args.Transport2Client.AtomObjectCollection = PrepareGroundCommonProperty(); args.Transport2Client.ManagerStatus = m_GameManager.ManagerStatus; m_GameManager.NotifyClientsEndCycle(args); } ); GroundExecuteStateTask.Start(); } Thread.Sleep(5); // (10); } }
public void RefreshActivity(GeneralActivityDTO ActivityDTO) { AtomBase GroundAtombase = null; GroundAtomObjectCollection.TryGetValue(ActivityDTO.Atom.UnitGuid, out GroundAtombase); if (GroundAtombase == null) { clsGroundAtom GroundAtom = new clsGroundAtom(this); GroundAtom.MyName = ActivityDTO.Atom.UnitName; GroundAtom.GUID = ActivityDTO.Atom.UnitGuid; GroundAtom.curr_X = ActivityDTO.Atom.Location.x; GroundAtom.curr_Y = ActivityDTO.Atom.Location.y; GroundAtomObjectCollection.TryAdd(GroundAtom.GUID, GroundAtom); NotifyClientsEndCycleArgs args = new NotifyClientsEndCycleArgs(); args = new NotifyClientsEndCycleArgs(); args.Transport2Client.Ex_clockDate = Ex_clockDate; // args.Transport2Client.ExClockRatioSpeed = m_GameManager.ExClockRatioSpeed; args.Transport2Client.AtomObjectType = 2; args.Transport2Client.AtomObjectCollection = PrepareGroundCommonProperty(); args.Transport2Client.ManagerStatus = m_GameManager.ManagerStatus; m_GameManager.NotifyClientsEndCycle(args); } }
public void MoveGroundObject(DeployedFormation deployFormation) { TDS.DAL.AtomsDB.UpdateAtomPositionByGuid(deployFormation.formation.GUID, deployFormation.x, deployFormation.y); AtomBase GroundAtom = null; GroundAtomObjectCollection.TryGetValue(deployFormation.formation.GUID, out GroundAtom); GroundAtom.curr_X = deployFormation.x; GroundAtom.curr_Y = deployFormation.y; NotifyClientsEndCycleArgs args = new NotifyClientsEndCycleArgs(); args = new NotifyClientsEndCycleArgs(); args.Transport2Client.Ex_clockDate = Ex_clockDate; // args.Transport2Client.ExClockRatioSpeed = m_GameManager.ExClockRatioSpeed; args.Transport2Client.AtomObjectType = 2; args.Transport2Client.AtomObjectCollection = PrepareGroundCommonProperty(); args.Transport2Client.ManagerStatus = m_GameManager.ManagerStatus; m_GameManager.NotifyClientsEndCycle(args); }
public AtomData DeployFormationFromTree(DeployedFormation deployFormation) { if (GroundAtomObjectCollection.ContainsKey(deployFormation.formation.GUID)) return null; AtomData atom = new AtomData(); atom.Location = new DPoint(deployFormation.x, deployFormation.y); atom.UnitGuid = deployFormation.formation.GUID; atom.UnitName = deployFormation.formation.Identification; TDS.DAL.AtomsDB.AddAtom(atom); clsGroundAtom GroundAtom = new clsGroundAtom(this); GroundAtom.MyName = atom.UnitName; GroundAtom.GUID = atom.UnitGuid; GroundAtom.curr_X = atom.Location.x; GroundAtom.curr_Y = atom.Location.y; GroundAtomObjectCollection.TryAdd(GroundAtom.GUID, GroundAtom); m_GameManager.QuadTreeGroundAtom.PositionUpdate(GroundAtom); NotifyClientsEndCycleArgs args = new NotifyClientsEndCycleArgs(); args = new NotifyClientsEndCycleArgs(); args.Transport2Client.Ex_clockDate = Ex_clockDate; // args.Transport2Client.ExClockRatioSpeed = m_GameManager.ExClockRatioSpeed; args.Transport2Client.AtomObjectType = 2; args.Transport2Client.AtomObjectCollection = PrepareGroundCommonProperty(); args.Transport2Client.ManagerStatus = m_GameManager.ManagerStatus; m_GameManager.NotifyClientsEndCycle(args); return atom; }
public void DeleteAtomFromTreeByGuid(string AtomGuid) { TDS.DAL.AtomsDB.DeleteAtomFromTreeByGuid(AtomGuid); AtomBase GroundAtombase = null; GroundAtomObjectCollection.TryGetValue(AtomGuid, out GroundAtombase); if (GroundAtombase == null) return; clsGroundAtom GroundAtom = GroundAtombase as clsGroundAtom; m_GroundActivities.Remove(GroundAtom.GUID); TDS.DAL.AtomsDB.DeleteAtomByGuid(GroundAtom.GUID); GroundAtomObjectCollection.TryRemove(GroundAtom.GUID, out GroundAtombase); NotifyClientsEndCycleArgs args = new NotifyClientsEndCycleArgs(); args = new NotifyClientsEndCycleArgs(); args.Transport2Client.Ex_clockDate = Ex_clockDate; // args.Transport2Client.ExClockRatioSpeed = m_GameManager.ExClockRatioSpeed; args.Transport2Client.AtomObjectType = 2; args.Transport2Client.AtomObjectCollection = PrepareGroundCommonProperty(); args.Transport2Client.ManagerStatus = m_GameManager.ManagerStatus; m_GameManager.NotifyClientsEndCycle(args); }
public void DeleteAtomByAtomName(string AtomName) { AtomData atom = TDS.DAL.AtomsDB.GetAtomByName(AtomName); if (atom == null) return; AtomBase GroundAtombase = null; GroundAtomObjectCollection.TryGetValue(atom.UnitGuid, out GroundAtombase); if (GroundAtombase == null) return; clsGroundAtom GroundAtom = GroundAtombase as clsGroundAtom; TDS.DAL.ActivityDB.DeleteActivitesByAtomGuid(GroundAtom.GUID); //List<clsActivityBase> Activites = null; //m_GroundActivities.TryGetValue(GroundAtom.GUID, out Activites); //if(Activites!=null) //{ // foreach (clsActivityBase Activity in Activites) // { // TDS.DAL.RoutesDB.DeleteRouteByGuid(Activity.RouteActivity.RouteGuid); // } //} m_GroundActivities.Remove(GroundAtom.GUID); TDS.DAL.AtomsDB.DeleteAtomByGuid(GroundAtom.GUID); GroundAtomObjectCollection.TryRemove(GroundAtom.GUID, out GroundAtombase); NotifyClientsEndCycleArgs args = new NotifyClientsEndCycleArgs(); args = new NotifyClientsEndCycleArgs(); args.Transport2Client.Ex_clockDate = Ex_clockDate; // args.Transport2Client.ExClockRatioSpeed = m_GameManager.ExClockRatioSpeed; args.Transport2Client.AtomObjectType = 2; args.Transport2Client.AtomObjectCollection = PrepareGroundCommonProperty(); args.Transport2Client.ManagerStatus = m_GameManager.ManagerStatus; m_GameManager.NotifyClientsEndCycle(args); }
public Task JoinGroup(string groupName) { var t = Groups.Add(Context.ConnectionId, groupName); SessionManager m = (SessionManager)GlobalHost.DependencyResolver.GetService(typeof(SessionManager)); NotifyClientsEndCycleArgs args = new NotifyClientsEndCycleArgs(); args = new NotifyClientsEndCycleArgs(); args.Transport2Client.Ex_clockDate =m.gameManager.m_GameObject.Ex_clockDate; // args.Transport2Client.ExClockRatioSpeed = m_GameManager.ExClockRatioSpeed; args.Transport2Client.AtomObjectType = 2; args.Transport2Client.AtomObjectCollection = m.gameManager.m_GameObject.PrepareGroundCommonProperty(); args.Transport2Client.ManagerStatus = m.gameManager.ManagerStatus; m.gameManager.NotifyClientsEndCycle(args); return t; }
private void StatusController() { while (StatusControllerThreadShouldStop == false) { QUERY_SCENARIOSTATUS QUERYob = QUERY_SCENARIOSTATUS.UNDEFINED_STATUS; lock (QueryChangeScenarioStatusList) { if (QueryChangeScenarioStatusList.Count > 0) { structQuery2Manager Query2M = (structQuery2Manager)QueryChangeScenarioStatusList[0]; QUERYob = Query2M.QueryStatus; } else { Monitor.Wait(QueryChangeScenarioStatusList); if (StatusControllerThreadShouldStop) { return; } if (QueryChangeScenarioStatusList.Count > 0) { structQuery2Manager Query2M = (structQuery2Manager)QueryChangeScenarioStatusList[0]; QUERYob = Query2M.QueryStatus; } } if (QueryChangeScenarioStatusList.Count > 0) { QueryChangeScenarioStatusList.RemoveAt(0); } } switch (QUERYob) { case QUERY_SCENARIOSTATUS.QUERY_START_SCENARIO: if (m_ManagerStatus == typGamestatus.EDIT_STATUS) { InitObjects(); m_GameObject.Ex_clockGroundExecute = DateTime.MinValue; ThreadStart worker1 = new ThreadStart(m_GameObject.Ex_Manager); Ex_ManagerThread = new Thread(worker1); Ex_ManagerThread.Name = "Ex_Manager"; Ex_ManagerThreadShouldStop = false; Ex_ManagerThread.Start(); m_ManagerStatus = typGamestatus.RUN_STATUS; } else if (m_ManagerStatus == typGamestatus.PAUSE_STATUS) { if (!Ex_ManagerThread.IsAlive) { ThreadStart worker1 = new ThreadStart(m_GameObject.Ex_Manager); Ex_ManagerThread = new Thread(worker1); Ex_ManagerThread.Name = "Ex_Manager"; Ex_ManagerThreadShouldStop = false; Ex_ManagerThread.Start(); } m_ManagerStatus = typGamestatus.RUN_STATUS; } break; case QUERY_SCENARIOSTATUS.QUERY_PAUSE_SCENARIO: if (m_ManagerStatus == typGamestatus.RUN_STATUS) { m_ManagerStatus = typGamestatus.PAUSE_STATUS; //CommonEventArgs arg = new CommonEventArgs(); //arg.NTEventCode = enNTEvents.NT_ChangeGamestatus; //arg.ManagerStatus = m_ManagerStatus; //NotifyClientsCommonEvents(arg); } break; case QUERY_SCENARIOSTATUS.QUERY_RETURN_SCENARIO: { m_ManagerStatus = typGamestatus.PROCESS_RUN2EDIT; // m_GameObject.IsCancelAllThreads = true; // Terrain.PathManager.Clear(); if (Ex_ManagerThread != null) { if (Ex_ManagerThread.IsAlive) { Ex_ManagerThreadShouldStop = true; Thread.Sleep(20); // lock (m_GameObject.GroundExecuteStateDelegateLock) { if (m_GameObject.GroundExecuteStateTask != null && m_GameObject.GroundExecuteStateTask.IsCompleted == false) { try { m_GameObject.GroundExecuteStateTask.Wait(); } catch (AggregateException exx) { // Log.WriteErrorToLog(exx, curScenario.DbName); } } //if (m_GameObject.DoSynchronizationProcess != null && m_GameObject.DoSynchronizationProcess.IsCompleted == false) //{ // try // { // m_GameObject.DoSynchronizationProcess.Wait(); // } // catch (AggregateException exx) // { // Log.WriteErrorToLog(exx, curScenario.DbName); // } //} } Ex_ManagerThread.Join(); } } //Victor 6.06.2012 // m_GameObject.ClearAllObjects(); // CommonEventArgs arg = new CommonEventArgs(); //arg.NTEventCode = enNTEvents.NT_ChangeGamestatus; //arg.ManagerStatus = m_ManagerStatus; //NotifyClientsCommonEvents(arg); // Yinon Douchan: Added code for statistics, not sure it should stay // write collision report before resetting game m_GameObject.writeCollisionReportAndClearData(); // ----------------------------------------------------------------- InitObjects(); m_ManagerStatus = typGamestatus.EDIT_STATUS; NotifyClientsEndCycleArgs args = new NotifyClientsEndCycleArgs(); args = new NotifyClientsEndCycleArgs(); args.Transport2Client.Ex_clockDate = m_GameObject.Ex_clockDate; // args.Transport2Client.ExClockRatioSpeed = m_GameManager.ExClockRatioSpeed; args.Transport2Client.AtomObjectType = 2; args.Transport2Client.AtomObjectCollection = m_GameObject.PrepareGroundCommonProperty(); args.Transport2Client.ManagerStatus = ManagerStatus; NotifyClientsEndCycle(args); } break; } } }
internal void NotifyClientsEndCycle(NotifyClientsEndCycleArgs args) { NotifyClientsEndCycleArgs arg = new NotifyClientsEndCycleArgs(); arg.Transport2Client = new structTransport2Client(); arg.Transport2Client.RefreshInfrasite = args.Transport2Client.RefreshInfrasite; arg.Transport2Client.AtomObjectCollection = new structTransportCommonProperty[0]; arg.Transport2Client.Ex_clockDate = args.Transport2Client.Ex_clockDate; // arg.Transport2Client.ExClockRatioSpeed = ExClockRatioSpeed; arg.Transport2Client.ManagerStatus = args.Transport2Client.ManagerStatus; arg.Transport2Client.ScenarioID = args.Transport2Client.ScenarioID; arg.Transport2Client.AtomObjectType = args.Transport2Client.AtomObjectType; arg.Transport2Client.isEndPackage = false; arg.Transport2Client.typPackage = 0; arg.Transport2Client.AtomObjectCollection = args.Transport2Client.AtomObjectCollection; arg.Transport2Client.NavalObjectCollection = args.Transport2Client.NavalObjectCollection; arg.Transport2Client.isEndPackage = true; GlobalHost.ConnectionManager.GetHubContext<SimulationHub>().Clients.Group("0").NotifyEndCycle(args); return; }
private void StatusController() { while (StatusControllerThreadShouldStop == false) { QUERY_SCENARIOSTATUS QUERYob = QUERY_SCENARIOSTATUS.UNDEFINED_STATUS; lock (QueryChangeScenarioStatusList) { if (QueryChangeScenarioStatusList.Count > 0) { structQuery2Manager Query2M = (structQuery2Manager)QueryChangeScenarioStatusList[0]; QUERYob = Query2M.QueryStatus; } else { Monitor.Wait(QueryChangeScenarioStatusList); if (StatusControllerThreadShouldStop) { return; } if (QueryChangeScenarioStatusList.Count > 0) { structQuery2Manager Query2M = (structQuery2Manager)QueryChangeScenarioStatusList[0]; QUERYob = Query2M.QueryStatus; } } if (QueryChangeScenarioStatusList.Count > 0) { QueryChangeScenarioStatusList.RemoveAt(0); } } switch (QUERYob) { case QUERY_SCENARIOSTATUS.QUERY_START_SCENARIO: if (m_ManagerStatus == typGamestatus.EDIT_STATUS) { InitObjects(); m_GameObject.Ex_clockGroundExecute = DateTime.MinValue; ThreadStart worker1 = new ThreadStart(m_GameObject.Ex_Manager); Ex_ManagerThread = new Thread(worker1); Ex_ManagerThread.Name = "Ex_Manager"; Ex_ManagerThreadShouldStop = false; Ex_ManagerThread.Start(); m_ManagerStatus = typGamestatus.RUN_STATUS; } else if (m_ManagerStatus == typGamestatus.PAUSE_STATUS) { if (!Ex_ManagerThread.IsAlive) { ThreadStart worker1 = new ThreadStart(m_GameObject.Ex_Manager); Ex_ManagerThread = new Thread(worker1); Ex_ManagerThread.Name = "Ex_Manager"; Ex_ManagerThreadShouldStop = false; Ex_ManagerThread.Start(); } m_ManagerStatus = typGamestatus.RUN_STATUS; } break; case QUERY_SCENARIOSTATUS.QUERY_PAUSE_SCENARIO: if (m_ManagerStatus == typGamestatus.RUN_STATUS) { m_ManagerStatus = typGamestatus.PAUSE_STATUS; //CommonEventArgs arg = new CommonEventArgs(); //arg.NTEventCode = enNTEvents.NT_ChangeGamestatus; //arg.ManagerStatus = m_ManagerStatus; //NotifyClientsCommonEvents(arg); } break; case QUERY_SCENARIOSTATUS.QUERY_RETURN_SCENARIO: { m_ManagerStatus = typGamestatus.PROCESS_RUN2EDIT; // m_GameObject.IsCancelAllThreads = true; // Terrain.PathManager.Clear(); if (Ex_ManagerThread != null) { if (Ex_ManagerThread.IsAlive) { Ex_ManagerThreadShouldStop = true; Thread.Sleep(20); // lock (m_GameObject.GroundExecuteStateDelegateLock) { if (m_GameObject.GroundExecuteStateTask != null && m_GameObject.GroundExecuteStateTask.IsCompleted == false) { try { m_GameObject.GroundExecuteStateTask.Wait(); } catch (AggregateException exx) { // Log.WriteErrorToLog(exx, curScenario.DbName); } } //if (m_GameObject.DoSynchronizationProcess != null && m_GameObject.DoSynchronizationProcess.IsCompleted == false) //{ // try // { // m_GameObject.DoSynchronizationProcess.Wait(); // } // catch (AggregateException exx) // { // Log.WriteErrorToLog(exx, curScenario.DbName); // } //} } Ex_ManagerThread.Join(); } } //Victor 6.06.2012 // m_GameObject.ClearAllObjects(); // CommonEventArgs arg = new CommonEventArgs(); //arg.NTEventCode = enNTEvents.NT_ChangeGamestatus; //arg.ManagerStatus = m_ManagerStatus; //NotifyClientsCommonEvents(arg); // Yinon Douchan: Added code for statistics, not sure it should stay // write collision report before resetting game m_GameObject.writeCollisionReportAndClearData(); // ----------------------------------------------------------------- InitObjects(); m_ManagerStatus = typGamestatus.EDIT_STATUS; NotifyClientsEndCycleArgs args = new NotifyClientsEndCycleArgs(); args = new NotifyClientsEndCycleArgs(); args.Transport2Client.Ex_clockDate =m_GameObject.Ex_clockDate; // args.Transport2Client.ExClockRatioSpeed = m_GameManager.ExClockRatioSpeed; args.Transport2Client.AtomObjectType = 2; args.Transport2Client.AtomObjectCollection = m_GameObject.PrepareGroundCommonProperty(); args.Transport2Client.ManagerStatus = ManagerStatus; NotifyClientsEndCycle(args); } break; } } }