summaryrefslogtreecommitdiff
path: root/src/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/copynpaste.cpp2
-rw-r--r--src/utils/naclmessages.cpp99
-rw-r--r--src/utils/naclmessages.h41
-rw-r--r--src/utils/process.cpp77
-rw-r--r--src/utils/process.h12
5 files changed, 145 insertions, 86 deletions
diff --git a/src/utils/copynpaste.cpp b/src/utils/copynpaste.cpp
index 0f43c9127..fc8441dff 100644
--- a/src/utils/copynpaste.cpp
+++ b/src/utils/copynpaste.cpp
@@ -472,7 +472,7 @@ static bool runxsel(std::string& text, const char *p1, const char *p2)
#elif defined __native_client__
-#include "utils/process.h"
+#include "utils/naclmessages.h"
bool retrieveBuffer(std::string& text, size_t& pos)
{
diff --git a/src/utils/naclmessages.cpp b/src/utils/naclmessages.cpp
new file mode 100644
index 000000000..1723f7180
--- /dev/null
+++ b/src/utils/naclmessages.cpp
@@ -0,0 +1,99 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2015 The ManaPlus Developers
+ *
+ * This file is part of The ManaPlus Client.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef __native_client__
+
+#include "utils/naclmessages.h"
+
+#include <ppapi_simple/ps.h>
+#include <ppapi_simple/ps_event.h>
+#include <ppapi/cpp/instance.h>
+#include <ppapi/cpp/var.h>
+
+#include <mutex>
+#include <condition_variable>
+
+#include "debug.h"
+
+struct NaclMessageHandle final
+{
+ bool handled;
+ std::string type;
+ std::string message;
+ std::condition_variable condv;
+};
+
+void naclPostMessage(const std::string &type,
+ const std::string &message)
+{
+ pp::Var msgVar = pp::Var(std::string(type).append(":").append(message));
+ pp::Instance(PSGetInstanceId()).PostMessage(msgVar);
+}
+
+static void naclMessageHandlerFunc(struct PP_Var key,
+ struct PP_Var value,
+ void* user_data)
+{
+ NaclMessageHandle *handle = (NaclMessageHandle *)user_data;
+
+ if (key.type != PP_VARTYPE_STRING || value.type != PP_VARTYPE_STRING)
+ return;
+ if (pp::Var(key).AsString() != handle->type)
+ return;
+
+ handle->handled = true;
+ handle->message = pp::Var(value).AsString();
+
+ handle->condv.notify_one();
+}
+
+NaclMessageHandle *naclRegisterMessageHandler(const std::string &type)
+{
+ NaclMessageHandle *handle = new NaclMessageHandle;
+ handle->handled = false;
+ handle->type = type;
+
+ PSEventRegisterMessageHandler(type.c_str(),
+ naclMessageHandlerFunc,
+ (void *)handle);
+ return handle;
+}
+
+void naclUnregisterMessageHandler(NaclMessageHandle *handle)
+{
+ PSEventRegisterMessageHandler(handle->type.c_str(),
+ nullptr,
+ nullptr);
+ delete handle;
+}
+
+std::string naclWaitForMessage(NaclMessageHandle *handle)
+{
+ std::mutex mtx;
+ std::unique_lock <std::mutex> lck(mtx);
+
+ while (!handle->handled)
+ handle->condv.wait(lck);
+
+ handle->handled = false;
+ return handle->message;
+}
+
+#endif // __native_client__
diff --git a/src/utils/naclmessages.h b/src/utils/naclmessages.h
new file mode 100644
index 000000000..d5edf4759
--- /dev/null
+++ b/src/utils/naclmessages.h
@@ -0,0 +1,41 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2015 The ManaPlus Developers
+ *
+ * This file is part of The ManaPlus Client.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef UTILS_NACLMESSAGES_H
+#define UTILS_NACLMESSAGES_H
+
+#ifdef __native_client__
+
+#include <string>
+
+#include "localconsts.h"
+
+struct NaclMessageHandle;
+
+void naclPostMessage(const std::string &type, const std::string &message);
+
+NaclMessageHandle *naclRegisterMessageHandler(const std::string &type);
+
+void naclUnregisterMessageHandler(NaclMessageHandle *handle);
+
+std::string naclWaitForMessage(NaclMessageHandle *handle);
+
+#endif // __native_client__
+#endif // UTILS_NACLMESSAGES_H
diff --git a/src/utils/process.cpp b/src/utils/process.cpp
index 6da177eb9..a037baef8 100644
--- a/src/utils/process.cpp
+++ b/src/utils/process.cpp
@@ -39,6 +39,7 @@ const int timeOut = 10;
#ifdef WIN32
#include "utils/stringutils.h"
+
#include <windows.h>
int execFileWait(const std::string &pathName, const std::string &name A_UNUSED,
@@ -275,6 +276,9 @@ bool openBrowser(std::string url)
return execFile("/usr/bin/xdg-open", "/usr/bin/xdg-open", url, "");
}
#elif defined __native_client__
+
+#include "utils/naclmessages.h"
+
bool openBrowser(std::string url)
{
naclPostMessage("open-browser", url);
@@ -302,76 +306,3 @@ void setPriority(const bool big A_UNUSED)
{
}
#endif
-
-#ifdef __native_client__
-#include <ppapi_simple/ps.h>
-#include <ppapi_simple/ps_event.h>
-#include <ppapi/cpp/instance.h>
-#include <ppapi/cpp/var.h>
-
-#include <mutex>
-#include <condition_variable>
-
-struct _NaclMessageHandle final
-{
- bool handled;
- std::string type;
- std::string message;
- std::condition_variable condv;
-};
-
-void naclPostMessage(const std::string &type, const std::string &message)
-{
- pp::Var msgVar = pp::Var(std::string(type).append(":").append(message));
- pp::Instance(PSGetInstanceId()).PostMessage(msgVar);
-}
-
-static void naclMessageHandlerFunc(struct PP_Var key,
- struct PP_Var value,
- void* user_data)
-{
- NaclMessageHandle *handle = (NaclMessageHandle *)user_data;
-
- if (key.type != PP_VARTYPE_STRING || value.type != PP_VARTYPE_STRING)
- return;
- if (pp::Var(key).AsString() != handle->type)
- return;
-
- handle->handled = true;
- handle->message = pp::Var(value).AsString();
-
- handle->condv.notify_one();
-}
-
-NaclMessageHandle *naclRegisterMessageHandler(const std::string &type)
-{
- NaclMessageHandle *handle = new NaclMessageHandle;
- handle->handled = false;
- handle->type = type;
-
- PSEventRegisterMessageHandler(type.c_str(),
- naclMessageHandlerFunc,
- (void *)handle);
- return handle;
-}
-
-void naclUnregisterMessageHandler(NaclMessageHandle *handle)
-{
- PSEventRegisterMessageHandler(handle->type.c_str(),
- nullptr,
- nullptr);
- delete handle;
-}
-
-std::string naclWaitForMessage(NaclMessageHandle *handle)
-{
- std::mutex mtx;
- std::unique_lock <std::mutex> lck(mtx);
-
- while (!handle->handled)
- handle->condv.wait(lck);
-
- handle->handled = false;
- return handle->message;
-}
-#endif
diff --git a/src/utils/process.h b/src/utils/process.h
index 44c1d2286..5ceddd032 100644
--- a/src/utils/process.h
+++ b/src/utils/process.h
@@ -34,16 +34,4 @@ bool openBrowser(std::string url);
void setPriority(const bool big);
-#ifdef __native_client__
-
-typedef struct _NaclMessageHandle NaclMessageHandle;
-
-void naclPostMessage(const std::string &type, const std::string &message);
-
-NaclMessageHandle *naclRegisterMessageHandler(const std::string &type);
-void naclUnregisterMessageHandler(NaclMessageHandle *handle);
-std::string naclWaitForMessage(NaclMessageHandle *handle);
-
-#endif
-
#endif // UTILS_PROCESS_H