diff --git a/binding-mri/journal-binding.cpp b/binding-mri/journal-binding.cpp index ed01539..d8d9278 100644 --- a/binding-mri/journal-binding.cpp +++ b/binding-mri/journal-binding.cpp @@ -1,3 +1,4 @@ +#include "journal-binding.h" #include "binding-util.h" #include "binding-types.h" #include "pipe.h" @@ -6,17 +7,7 @@ #include -//OS-Specific code -#if defined _WIN32 - #define OS_W32 -#elif defined __APPLE__ || __linux__ - #define LINUX - #ifdef __APPLE__ - #define OS_OSX - #else - #define OS_LINUX - #endif - +#ifdef LINUX #include #include #include @@ -25,66 +16,8 @@ #endif #include #include -#else - #error "Operating system not detected." #endif -#define BUFFER_SIZE 256 - -static SDL_Thread *thread = NULL; -static SDL_mutex *mutex = NULL; -static volatile char lang_buffer[BUFFER_SIZE]; -static volatile char message_buffer[BUFFER_SIZE]; -static volatile bool active = false; -static volatile int message_len = 0; - -#ifdef LINUX - #define PIPE_PATH "/tmp/oneshot-pipe" - static volatile int out_pipe = -1; - void cleanup_pipe() - { - unlink(PIPE_PATH); - remove(PIPE_PATH); - } -#endif - -int server_thread(void *data) -{ - (void)data; -#if defined OS_W32 - HANDLE pipe = CreateNamedPipeW(L"\\\\.\\pipe\\oneshot-journal-to-game", - PIPE_ACCESS_OUTBOUND, - PIPE_TYPE_BYTE | PIPE_WAIT, - PIPE_UNLIMITED_INSTANCES, - BUFFER_SIZE, - BUFFER_SIZE, - 0, - NULL); - for (;;) { - ConnectNamedPipe(pipe, NULL); - SDL_LockMutex(mutex); - DWORD written; - WriteFile(pipe, (const void*)message_buffer, BUFFER_SIZE, &written, NULL); - active = true; - SDL_UnlockMutex(mutex); - FlushFileBuffers(pipe); - DisconnectNamedPipe(pipe); - } - CloseHandle(pipe); -#else - if (FILE *file = fopen(PIPE_PATH, "r")) { - fclose(file); - out_pipe = open(PIPE_PATH, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); - SDL_LockMutex(mutex); - active = true; - if (message_len > 0) - write(out_pipe, (char*)message_buffer, message_len); - SDL_UnlockMutex(mutex); - } - return 0; -#endif -} - RB_METHOD(journalSet) { RB_UNUSED_PARAM; diff --git a/binding-mri/journal-binding.h b/binding-mri/journal-binding.h new file mode 100644 index 0000000..3d14e02 --- /dev/null +++ b/binding-mri/journal-binding.h @@ -0,0 +1,86 @@ +#include "binding-util.h" +#include "binding-types.h" +#include "pipe.h" +#include "debugwriter.h" +#include "i18n.h" + +#include + +//OS-Specific code +#if defined _WIN32 + #define OS_W32 +#elif defined __APPLE__ || __linux__ + #define LINUX + #ifdef __APPLE__ + #define OS_OSX + #else + #define OS_LINUX + #endif + + #include + #include + #include + #ifdef OS_LINUX + #include + #endif + #include + #include +#else + #error "Operating system not detected." +#endif + +#define BUFFER_SIZE 256 + +static SDL_Thread *thread = NULL; +static SDL_mutex *mutex = NULL; +static volatile char lang_buffer[BUFFER_SIZE]; +static volatile char message_buffer[BUFFER_SIZE]; +static volatile bool active = false; +static volatile int message_len = 0; + +#ifdef LINUX + #define PIPE_PATH "/tmp/oneshot-pipe" + static volatile int out_pipe = -1; + void cleanup_pipe() + { + unlink(PIPE_PATH); + remove(PIPE_PATH); + } +#endif + +int server_thread(void *data) +{ + (void)data; +#if defined OS_W32 + HANDLE pipe = CreateNamedPipeW(L"\\\\.\\pipe\\oneshot-journal-to-game", + PIPE_ACCESS_OUTBOUND, + PIPE_TYPE_BYTE | PIPE_WAIT, + PIPE_UNLIMITED_INSTANCES, + BUFFER_SIZE, + BUFFER_SIZE, + 0, + NULL); + for (;;) { + ConnectNamedPipe(pipe, NULL); + SDL_LockMutex(mutex); + DWORD written; + WriteFile(pipe, (const void*)message_buffer, BUFFER_SIZE, &written, NULL); + active = true; + SDL_UnlockMutex(mutex); + FlushFileBuffers(pipe); + DisconnectNamedPipe(pipe); + } + CloseHandle(pipe); +#else + if (FILE *file = fopen(PIPE_PATH, "r")) { + fclose(file); + out_pipe = open(PIPE_PATH, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); + SDL_LockMutex(mutex); + active = true; + if (message_len > 0) + write(out_pipe, (char*)message_buffer, message_len); + SDL_UnlockMutex(mutex); + } + return 0; +#endif +} diff --git a/mkxp.pro b/mkxp.pro index 11cab11..33385c0 100644 --- a/mkxp.pro +++ b/mkxp.pro @@ -271,7 +271,8 @@ BINDING_MRI { binding-mri/disposable-binding.h \ binding-mri/sceneelement-binding.h \ binding-mri/viewportelement-binding.h \ - binding-mri/flashable-binding.h + binding-mri/flashable-binding.h \ + binding-mri/journal-binding.h SOURCES += \ binding-mri/binding-mri.cpp \