|
@@ -1,42 +1,73 @@
|
|
|
|
|
|
|
|
|
|
+#include <Atomic/IO/IOEvents.h>
|
|
|
#include <Atomic/IO/Log.h>
|
|
#include <Atomic/IO/Log.h>
|
|
|
|
|
+#include <Atomic/Input/InputEvents.h>
|
|
|
#include <Atomic/Core/ProcessUtils.h>
|
|
#include <Atomic/Core/ProcessUtils.h>
|
|
|
-#include <Atomic/IPC/IPC.h>
|
|
|
|
|
#include <Atomic/IPC/IPCEvents.h>
|
|
#include <Atomic/IPC/IPCEvents.h>
|
|
|
#include <Atomic/IPC/IPCWorker.h>
|
|
#include <Atomic/IPC/IPCWorker.h>
|
|
|
|
|
|
|
|
|
|
+#include <AtomicJS/Javascript/JSVM.h>
|
|
|
|
|
+#include <AtomicJS/Javascript/JSEvents.h>
|
|
|
|
|
+#include <AtomicJS/Javascript/JSIPCEvents.h>
|
|
|
|
|
+
|
|
|
#include "AEPlayerMode.h"
|
|
#include "AEPlayerMode.h"
|
|
|
|
|
|
|
|
namespace AtomicEditor
|
|
namespace AtomicEditor
|
|
|
{
|
|
{
|
|
|
|
|
|
|
|
PlayerMode::PlayerMode(Context* context) :
|
|
PlayerMode::PlayerMode(Context* context) :
|
|
|
- Object(context)
|
|
|
|
|
|
|
+ Object(context),
|
|
|
|
|
+ brokerActive_(false)
|
|
|
{
|
|
{
|
|
|
fd_[0] = INVALID_IPCHANDLE_VALUE;
|
|
fd_[0] = INVALID_IPCHANDLE_VALUE;
|
|
|
fd_[1] = INVALID_IPCHANDLE_VALUE;
|
|
fd_[1] = INVALID_IPCHANDLE_VALUE;
|
|
|
|
|
+
|
|
|
|
|
+ ipc_ = GetSubsystem<IPC>();
|
|
|
|
|
+
|
|
|
|
|
+ SubscribeToEvent(E_LOGMESSAGE, HANDLER(PlayerMode, HandleLogMessage));
|
|
|
|
|
+ SubscribeToEvent(E_JSERROR, HANDLER(PlayerMode, HandleJSError));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-void PlayerMode::HandleHelloFromBroker(StringHash eventType, VariantMap& eventData)
|
|
|
|
|
|
|
+PlayerMode::~PlayerMode()
|
|
|
{
|
|
{
|
|
|
- assert(eventData[HelloFromBroker::P_HELLO].GetString() == "Hello");
|
|
|
|
|
- assert(eventData[HelloFromBroker::P_LIFETHEUNIVERSEANDEVERYTHING].GetInt() == 42);
|
|
|
|
|
|
|
|
|
|
- LOGERROR("Passed Test!");
|
|
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void PlayerMode::HandleIPCInitialize(StringHash eventType, VariantMap& eventData)
|
|
|
|
|
+{
|
|
|
|
|
+ brokerActive_ = true;
|
|
|
|
|
+
|
|
|
|
|
+ JSVM* vm = JSVM::GetJSVM(0);
|
|
|
|
|
+
|
|
|
|
|
+ if (!vm->ExecuteMain())
|
|
|
|
|
+ {
|
|
|
|
|
+ //SendEvent(E_EXITREQUESTED);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void PlayerMode::ProcessArguments() {
|
|
void PlayerMode::ProcessArguments() {
|
|
|
|
|
|
|
|
const Vector<String>& arguments = GetArguments();
|
|
const Vector<String>& arguments = GetArguments();
|
|
|
|
|
|
|
|
|
|
+ int id = -1;
|
|
|
|
|
+
|
|
|
for (unsigned i = 0; i < arguments.Size(); ++i)
|
|
for (unsigned i = 0; i < arguments.Size(); ++i)
|
|
|
{
|
|
{
|
|
|
if (arguments[i].Length() > 1)
|
|
if (arguments[i].Length() > 1)
|
|
|
{
|
|
{
|
|
|
String argument = arguments[i].ToLower();
|
|
String argument = arguments[i].ToLower();
|
|
|
- String value = i + 1 < arguments.Size() ? arguments[i + 1] : String::EMPTY;
|
|
|
|
|
|
|
+ // String value = i + 1 < arguments.Size() ? arguments[i + 1] : String::EMPTY;
|
|
|
|
|
|
|
|
- if (argument.StartsWith("--ipc-server=") || argument.StartsWith("--ipc-client="))
|
|
|
|
|
|
|
+ if (argument.StartsWith("--ipc-id="))
|
|
|
|
|
+ {
|
|
|
|
|
+ Vector<String> idc = argument.Split(argument.CString(), '=');
|
|
|
|
|
+ if (idc.Size() == 2)
|
|
|
|
|
+
|
|
|
|
|
+ id = ToInt(idc[1].CString());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ else if (argument.StartsWith("--ipc-server=") || argument.StartsWith("--ipc-client="))
|
|
|
{
|
|
{
|
|
|
LOGINFOF("Starting IPCWorker %s", argument.CString());
|
|
LOGINFOF("Starting IPCWorker %s", argument.CString());
|
|
|
|
|
|
|
@@ -88,19 +119,61 @@ void PlayerMode::ProcessArguments() {
|
|
|
//ipc->InitWorker(fd_[0], fd_[1]);
|
|
//ipc->InitWorker(fd_[0], fd_[1]);
|
|
|
}
|
|
}
|
|
|
#else
|
|
#else
|
|
|
- if (fd_[0] != INVALID_IPCHANDLE_VALUE && fd_[1] != INVALID_IPCHANDLE_VALUE)
|
|
|
|
|
- {
|
|
|
|
|
- IPC* ipc = GetSubsystem<IPC>();
|
|
|
|
|
- SubscribeToEvent(E_IPCHELLOFROMBROKER, HANDLER(PlayerMode, HandleHelloFromBroker));
|
|
|
|
|
- ipc->InitWorker(fd_[0], fd_[1]);
|
|
|
|
|
|
|
+ if (id > 0 && fd_[0] != INVALID_IPCHANDLE_VALUE && fd_[1] != INVALID_IPCHANDLE_VALUE)
|
|
|
|
|
+ {
|
|
|
|
|
+ SubscribeToEvent(E_IPCINITIALIZE, HANDLER(PlayerMode, HandleIPCInitialize));
|
|
|
|
|
+ ipc_->InitWorker((unsigned) id, fd_[0], fd_[1]);
|
|
|
}
|
|
}
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-PlayerMode::~PlayerMode()
|
|
|
|
|
|
|
+void PlayerMode::HandleJSError(StringHash eventType, VariantMap& eventData)
|
|
|
{
|
|
{
|
|
|
|
|
+ if (brokerActive_)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (ipc_.Null())
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ String errName = eventData[JSError::P_ERRORNAME].GetString();
|
|
|
|
|
+ String errStack = eventData[JSError::P_ERRORSTACK].GetString();
|
|
|
|
|
+ String errMessage = eventData[JSError::P_ERRORMESSAGE].GetString();
|
|
|
|
|
+ String errFilename = eventData[JSError::P_ERRORFILENAME].GetString();
|
|
|
|
|
+ int errLineNumber = eventData[JSError::P_ERRORLINENUMBER].GetInt();
|
|
|
|
|
+
|
|
|
|
|
+ VariantMap ipcErrorData;
|
|
|
|
|
+ ipcErrorData[IPCJSError::P_ERRORNAME] = errName;
|
|
|
|
|
+ ipcErrorData[IPCJSError::P_ERRORSTACK] = errStack;
|
|
|
|
|
+ ipcErrorData[IPCJSError::P_ERRORMESSAGE] = errMessage;
|
|
|
|
|
+ ipcErrorData[IPCJSError::P_ERRORFILENAME] = errFilename;
|
|
|
|
|
+ ipcErrorData[IPCJSError::P_ERRORLINENUMBER] = errLineNumber;
|
|
|
|
|
+
|
|
|
|
|
+ ipc_->SendEventToBroker(E_IPCJSERROR, ipcErrorData);
|
|
|
|
|
+
|
|
|
|
|
+ LOGERROR("SENDING E_IPCJSERROR");
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+void PlayerMode::HandleLogMessage(StringHash eventType, VariantMap& eventData)
|
|
|
|
|
+{
|
|
|
|
|
+ using namespace LogMessage;
|
|
|
|
|
+
|
|
|
|
|
+ if (brokerActive_)
|
|
|
|
|
+ {
|
|
|
|
|
+
|
|
|
|
|
+ if (ipc_.Null())
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ VariantMap logEvent;
|
|
|
|
|
+ logEvent[IPCWorkerLog::P_LEVEL] = eventData[P_LEVEL].GetInt();
|
|
|
|
|
+ logEvent[IPCWorkerLog::P_MESSAGE] = eventData[P_MESSAGE].GetString();
|
|
|
|
|
+ ipc_->SendEventToBroker(E_IPCWORKERLOG, logEvent);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
}
|
|
}
|