Exemple #1
0
        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;
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);   

                 

             }
        }
Exemple #4
0
        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);
            }
        }
Exemple #5
0
        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);


        }
Exemple #6
0
        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;
        }
Exemple #7
0
        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);


        }
Exemple #8
0
        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);

        }
Exemple #9
0
        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;         
        }
Exemple #10
0
        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;
                }
            }
        }
Exemple #11
0
        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;




        }
Exemple #12
0
        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;
                }




            }
        }