Beispiel #1
0
        private void initManager()
        {
            m_GameObject = new GameObject(this);
			// YD: preload route data from database
            m_GameObject.preloadData();
            if (m_ManagerStatus == typGamestatus.UNDEFINED_STATUS)
            {
                InitObjects();
                m_ManagerStatus = typGamestatus.EDIT_STATUS;

            }
          



            ThreadStart worker = new ThreadStart(StatusController);
            StatusControllerThread = new Thread(worker);
            StatusControllerThread.Name = "StatusController";
            StatusControllerThreadShouldStop = false;
            StatusControllerThread.Start();

            //ThreadStart worker1 = new ThreadStart(m_GameObject.Ex_Manager);
            //Ex_ManagerThread = new Thread(worker1);
            //Ex_ManagerThread.Name = "Ex_Manager";
           

        }
Beispiel #2
0
        private void initManager()
        {
            m_GameObject = new GameObject(this);
            // YD: preload route data from database
            m_GameObject.preloadData();
            if (m_ManagerStatus == typGamestatus.UNDEFINED_STATUS)
            {
                InitObjects();
                m_ManagerStatus = typGamestatus.EDIT_STATUS;
            }



            ThreadStart worker = new ThreadStart(StatusController);

            StatusControllerThread           = new Thread(worker);
            StatusControllerThread.Name      = "StatusController";
            StatusControllerThreadShouldStop = false;
            StatusControllerThread.Start();

            //ThreadStart worker1 = new ThreadStart(m_GameObject.Ex_Manager);
            //Ex_ManagerThread = new Thread(worker1);
            //Ex_ManagerThread.Name = "Ex_Manager";
        }
Beispiel #3
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;
                }
            }
        }
Beispiel #4
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;
                }




            }
        }