Browse Source

Merge pull request #1127 from AtomicGameEngine/JME-ATOMIC-1125

Adding IPC::Shutdown for cleaning up and closing child processes
JoshEngebretson 9 years ago
parent
commit
343452588b

+ 0 - 1
Script/AtomicEditor/editor/Editor.ts

@@ -274,7 +274,6 @@ class Editor extends Atomic.ScriptObject {
     // event handling
     // event handling
     handleExitRequested(data) {
     handleExitRequested(data) {
         if (this.exitRequested) return;
         if (this.exitRequested) return;
-        this.sendEvent("IPCPlayerExitRequest");
         this.exitRequested = true;
         this.exitRequested = true;
         this.closeAllResourceEditors();
         this.closeAllResourceEditors();
     }
     }

+ 15 - 0
Source/Atomic/IPC/IPC.cpp

@@ -25,7 +25,9 @@
 #endif
 #endif
 
 
 #include "../Core/CoreEvents.h"
 #include "../Core/CoreEvents.h"
+#include "../Core/Context.h"
 #include "../Engine/Engine.h"
 #include "../Engine/Engine.h"
+#include "../Input/InputEvents.h"
 #include "../IO/Log.h"
 #include "../IO/Log.h"
 
 
 #include "IPCBroker.h"
 #include "IPCBroker.h"
@@ -277,5 +279,18 @@ void IPC::QueueEvent(unsigned id, StringHash eventType, VariantMap& eventData)
     eventMutex_.Release();
     eventMutex_.Release();
 }
 }
 
 
+void IPC::Shutdown()
+{
+
+    // request broker exit
+    for (unsigned i = 0; i < brokers_.Size(); i++)
+    {
+        SharedPtr<IPCBroker>& broker = brokers_[i];
+        VariantMap evData;
+        broker->PostMessage(E_EXITREQUESTED, evData);
+    }
+
+    context_->RemoveSubsystem<IPC>();
+}
 
 
 }
 }

+ 3 - 0
Source/Atomic/IPC/IPC.h

@@ -52,6 +52,9 @@ public:
     /// Destruct.
     /// Destruct.
     virtual ~IPC();
     virtual ~IPC();
 
 
+    // Shutdown IPC subsystem, requests any brokers to exit
+    void Shutdown();
+
     // queues an event from a worker or broker receiving thread
     // queues an event from a worker or broker receiving thread
     void QueueEvent(unsigned id, StringHash eventType, VariantMap& eventData);
     void QueueEvent(unsigned id, StringHash eventType, VariantMap& eventData);
 
 

+ 6 - 1
Source/AtomicEditor/Application/AEEditorApp.cpp

@@ -185,7 +185,12 @@ namespace AtomicEditor
 
 
     void AEEditorApp::Stop()
     void AEEditorApp::Stop()
     {
     {
-        context_->RemoveSubsystem<IPC>();
+        IPC* ipc = GetSubsystem<IPC>();
+
+        if (ipc)
+        {
+            ipc->Shutdown();
+        }
 
 
         AppBase::Stop();
         AppBase::Stop();
     }
     }