#include <libwebsockets.h>
+#define RECVED_MESSAGE "recved"
+#define MESSAGE_LEFT "left"
+
pthread_t g_ws_server_thread = (pthread_t)NULL;
pthread_mutex_t g_ws_server_mutex = PTHREAD_MUTEX_INITIALIZER;
if (pss->valid) {
pthread_mutex_lock(&g_ws_server_mutex);
std::queue<ISE_MESSAGE>& messages = agent->get_send_message_queue();
+ /* One write allowed per one writable callback */
if (messages.size() > 0) {
ISE_MESSAGE &message = messages.front();
std::string str = CISEMessageSerializer::serialize(message);
n = lws_write(wsi, p, n, LWS_WRITE_TEXT);
messages.pop();
}
+ if (messages.size() > 0) {
+ ecore_pipe_write(agent->get_message_pipe(), MESSAGE_LEFT, strlen(MESSAGE_LEFT));
+ }
pthread_mutex_unlock(&g_ws_server_mutex);
if (n < 0) {
messages.push(message);
pthread_mutex_unlock(&g_ws_server_mutex);
- const char *recved_message = "recved";
- ecore_pipe_write(agent->get_recv_message_pipe(), recved_message, strlen(recved_message));
+ ecore_pipe_write(agent->get_message_pipe(), RECVED_MESSAGE, strlen(RECVED_MESSAGE));
/* If we received reply message, let's send signal to wake up our main thread */
if (message.type.compare(ISE_MESSAGE_TYPE_STRINGS[ISE_MESSAGE_TYPE_REPLY]) == 0) {
LOGD("WARNING : m_current_instance is NOT NULL");
}
m_current_instance = this;
- m_recv_message_pipe = NULL;
+ m_message_pipe = NULL;
}
CWebHelperAgentWebSocket::~CWebHelperAgentWebSocket()
m_current_instance = NULL;
}
- if (m_recv_message_pipe) {
- ecore_pipe_del(m_recv_message_pipe);
- m_recv_message_pipe = NULL;
+ if (m_message_pipe) {
+ ecore_pipe_del(m_message_pipe);
+ m_message_pipe = NULL;
}
}
-static void recv_message_pipe_handler(void *data, void *buffer, unsigned int nbyte)
+static void message_pipe_handler(void *data, void *buffer, unsigned int nbyte)
{
- CWebHelperAgentWebSocket *agent = CWebHelperAgentWebSocket::get_current_instance();
- if (agent) {
- agent->process_recved_messages();
+ if (buffer) {
+ if (strncmp((const char*)buffer, RECVED_MESSAGE, strlen(RECVED_MESSAGE)) == 0) {
+ CWebHelperAgentWebSocket *agent = CWebHelperAgentWebSocket::get_current_instance();
+ if (agent) {
+ agent->process_recved_messages();
+ }
+ } else {
+ if (g_ws_server_context) {
+ lws_callback_on_writable_all_protocol(g_ws_server_context, &protocols[PROTOCOL_KEYBOARD]);
+ } else {
+ LOGD("WARNING : g_ws_server_context is NULL");
+ }
+ }
}
}
memset(&info, 0, sizeof info);
info.port = 7681;
- int debug_level = LLL_DEBUG;
- lws_set_log_level(debug_level, log_func);
+ int log_level = LLL_ERR | LLL_WARN | LLL_DEBUG;
+ lws_set_log_level(log_level, log_func);
info.iface = NULL;
info.protocols = protocols;
/* The WebSocket server is running on a separate thread, and let the thread send a message
through this pipe to guarantee thread safety */
- m_recv_message_pipe = ecore_pipe_add(recv_message_pipe_handler, NULL);
+ m_message_pipe = ecore_pipe_add(message_pipe_handler, NULL);
/* Let's retry creating server context for a certain number of times */
const int max_retry_num = 10;
g_ws_server_exit = true;
- if (m_recv_message_pipe) {
- ecore_pipe_del(m_recv_message_pipe);
- m_recv_message_pipe = NULL;
+ if (m_message_pipe) {
+ ecore_pipe_del(m_message_pipe);
+ m_message_pipe = NULL;
}
if (g_ws_server_thread) {
return m_recv_message_queue;
}
-Ecore_Pipe* CWebHelperAgentWebSocket::get_recv_message_pipe()
+Ecore_Pipe* CWebHelperAgentWebSocket::get_message_pipe()
{
- return m_recv_message_pipe;
+ return m_message_pipe;
}
void CWebHelperAgentWebSocket::wait_for_reply_message()