Browse Source

Multiple player sessions now supported

Josh Engebretson 10 years ago
parent
commit
c64d089c63

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

@@ -93,6 +93,10 @@ void IPC::HandleUpdate(StringHash eventType, VariantMap& eventData)
         SharedPtr<IPCBroker>& broker = brokers_[i];
         SharedPtr<IPCBroker>& broker = brokers_[i];
         if (!broker->Update())
         if (!broker->Update())
         {
         {
+            VariantMap brokerData;
+            brokerData[WorkerExit::P_BROKER] = broker;
+            brokerData[WorkerExit::P_EXITCODE] = 0;
+            broker->SendEvent(E_IPCWORKEREXIT, brokerData);
             remove.Push(broker);
             remove.Push(broker);
         }
         }
     }
     }

+ 1 - 0
Source/Atomic/IPC/IPCBroker.cpp

@@ -49,6 +49,7 @@ bool IPCBroker::Update()
     if (!shouldRun_)
     if (!shouldRun_)
     {
     {
         Stop();
         Stop();
+        close(pp_.fd1());
         return false;
         return false;
     }
     }
 
 

+ 12 - 3
Source/AtomicEditor/Source/Player/AEPlayer.cpp

@@ -42,7 +42,7 @@ AEPlayer::AEPlayer(Context* context) :
 
 
 AEPlayer::~AEPlayer()
 AEPlayer::~AEPlayer()
 {
 {
-    LOGINFO("Player down");
+
 }
 }
 
 
 void AEPlayer::Invalidate()
 void AEPlayer::Invalidate()
@@ -59,14 +59,18 @@ void AEPlayer::HandleJSError(StringHash eventType, VariantMap& eventData)
 
 
 void AEPlayer::HandleIPCWorkerStarted(StringHash eventType, VariantMap& eventData)
 void AEPlayer::HandleIPCWorkerStarted(StringHash eventType, VariantMap& eventData)
 {
 {
-    LOGINFOF("Yay");
-
     VariantMap weventData;
     VariantMap weventData;
     weventData[HelloFromBroker::P_HELLO] = "Hello";
     weventData[HelloFromBroker::P_HELLO] = "Hello";
     weventData[HelloFromBroker::P_LIFETHEUNIVERSEANDEVERYTHING] = 42;
     weventData[HelloFromBroker::P_LIFETHEUNIVERSEANDEVERYTHING] = 42;
     broker_->PostMessage(E_IPCHELLOFROMBROKER, weventData);
     broker_->PostMessage(E_IPCHELLOFROMBROKER, weventData);
 }
 }
 
 
+void AEPlayer::HandleIPCWorkerExit(StringHash eventType, VariantMap& eventData)
+{
+    SendEvent(E_EDITORPLAYSTOP);
+}
+
+
 bool AEPlayer::Play(AEPlayerMode mode, const IntRect &rect)
 bool AEPlayer::Play(AEPlayerMode mode, const IntRect &rect)
 {
 {
     ToolCore::ToolEnvironment* env = GetSubsystem<ToolCore::ToolEnvironment>();
     ToolCore::ToolEnvironment* env = GetSubsystem<ToolCore::ToolEnvironment>();
@@ -89,6 +93,11 @@ bool AEPlayer::Play(AEPlayerMode mode, const IntRect &rect)
     IPC* ipc = GetSubsystem<IPC>();
     IPC* ipc = GetSubsystem<IPC>();
     broker_ = ipc->SpawnWorker(editorBinary, vargs);
     broker_ = ipc->SpawnWorker(editorBinary, vargs);
 
 
+    if (broker_)
+    {
+        SubscribeToEvent(broker_, E_IPCWORKEREXIT, HANDLER(AEPlayer, HandleIPCWorkerExit));
+    }
+
     return broker_.NotNull();
     return broker_.NotNull();
 }
 }
 
 

+ 1 - 0
Source/AtomicEditor/Source/Player/AEPlayer.h

@@ -67,6 +67,7 @@ private:
     void HandleEditorShutdown(StringHash eventType, VariantMap& eventData);
     void HandleEditorShutdown(StringHash eventType, VariantMap& eventData);
 
 
     void HandleIPCWorkerStarted(StringHash eventType, VariantMap& eventData);
     void HandleIPCWorkerStarted(StringHash eventType, VariantMap& eventData);
+    void HandleIPCWorkerExit(StringHash eventType, VariantMap& eventData);
 
 
     SharedPtr<IPCBroker> broker_;
     SharedPtr<IPCBroker> broker_;