mirror of
https://github.com/nasa/trick.git
synced 2025-01-30 16:13:55 +00:00
parent
2afa2b3e38
commit
d0cbd1f2b5
@ -30,6 +30,7 @@ class HTTP_Server {
|
|||||||
pthread_mutex_t WebSocketSessionMakerMapLock; /* ** */
|
pthread_mutex_t WebSocketSessionMakerMapLock; /* ** */
|
||||||
std::map<mg_connection*, WebSocketSession*> sessionMap; /* ** */
|
std::map<mg_connection*, WebSocketSession*> sessionMap; /* ** */
|
||||||
pthread_mutex_t sessionMapLock; /* ** */
|
pthread_mutex_t sessionMapLock; /* ** */
|
||||||
|
pthread_mutex_t serviceLock; /* ** */
|
||||||
struct mg_serve_http_opts http_server_options; /* ** mongoose*/
|
struct mg_serve_http_opts http_server_options; /* ** mongoose*/
|
||||||
struct mg_bind_opts bind_opts; /* ** mongoose*/
|
struct mg_bind_opts bind_opts; /* ** mongoose*/
|
||||||
pthread_cond_t serviceConnections; /* ** */
|
pthread_cond_t serviceConnections; /* ** */
|
||||||
|
@ -14,6 +14,7 @@ class HttpSimObject : public Trick::SimObject {
|
|||||||
HttpSimObject() {
|
HttpSimObject() {
|
||||||
("default_data") server.http_default_data() ;
|
("default_data") server.http_default_data() ;
|
||||||
("initialization") server.http_init() ;
|
("initialization") server.http_init() ;
|
||||||
|
("freeze") server.http_top_of_frame() ;
|
||||||
("top_of_frame") server.http_top_of_frame() ;
|
("top_of_frame") server.http_top_of_frame() ;
|
||||||
("shutdown") server.http_shutdown() ;
|
("shutdown") server.http_shutdown() ;
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ LIBRARY DEPENDENCIES:
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <iomanip> // for setprecision
|
#include <iomanip> // for setprecision
|
||||||
|
#include <algorithm>
|
||||||
#include "trick/memorymanager_c_intf.h"
|
#include "trick/memorymanager_c_intf.h"
|
||||||
#include "trick/input_processor_proto.h"
|
#include "trick/input_processor_proto.h"
|
||||||
#include "trick/exec_proto.h"
|
#include "trick/exec_proto.h"
|
||||||
|
@ -34,6 +34,8 @@ static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) {
|
|||||||
nc->flags |= MG_F_SEND_AND_CLOSE;
|
nc->flags |= MG_F_SEND_AND_CLOSE;
|
||||||
std::cout << "ERROR: No such web socket interface: \"" << uri << "\"." << std::endl;
|
std::cout << "ERROR: No such web socket interface: \"" << uri << "\"." << std::endl;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
std::cout << "ERROR: WEBSOCKET_REQUEST URI does not start with API prefix." << std::endl;
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
case MG_EV_WEBSOCKET_FRAME: { // Process websocket messages from the client (web browser).
|
case MG_EV_WEBSOCKET_FRAME: { // Process websocket messages from the client (web browser).
|
||||||
@ -87,16 +89,17 @@ static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) {
|
|||||||
static void* connectionAttendant (void* arg) {
|
static void* connectionAttendant (void* arg) {
|
||||||
HTTP_Server *S = (HTTP_Server*)arg;
|
HTTP_Server *S = (HTTP_Server*)arg;
|
||||||
while(1) {
|
while(1) {
|
||||||
pthread_mutex_lock(&S->sessionMapLock);
|
pthread_mutex_lock(&S->serviceLock);
|
||||||
// Wait here until the serviceConnections condition is signaled by the top_of_frame job.
|
// Wait here until the serviceConnections condition is signaled by the top_of_frame job.
|
||||||
pthread_cond_wait(&S->serviceConnections, &S->sessionMapLock);
|
pthread_cond_wait(&S->serviceConnections, &S->serviceLock);
|
||||||
|
|
||||||
if (S->shutting_down) {
|
if (S->shutting_down) {
|
||||||
pthread_mutex_unlock(&S->sessionMapLock);
|
pthread_mutex_unlock(&S->serviceLock);
|
||||||
return NULL;
|
return NULL;
|
||||||
} else {
|
} else {
|
||||||
mg_mgr_poll(&S->mgr, 50);
|
mg_mgr_poll(&S->mgr, 50);
|
||||||
}
|
}
|
||||||
pthread_mutex_unlock(&S->sessionMapLock);
|
pthread_mutex_unlock(&S->serviceLock);
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -180,6 +183,7 @@ void HTTP_Server::handleWebSocketClientMessage(struct mg_connection *nc, std::st
|
|||||||
void HTTP_Server::addWebSocketSession(struct mg_connection *nc, WebSocketSession* session) {
|
void HTTP_Server::addWebSocketSession(struct mg_connection *nc, WebSocketSession* session) {
|
||||||
pthread_mutex_lock(&sessionMapLock);
|
pthread_mutex_lock(&sessionMapLock);
|
||||||
sessionMap.insert( std::pair<mg_connection*, WebSocketSession*>(nc, session) );
|
sessionMap.insert( std::pair<mg_connection*, WebSocketSession*>(nc, session) );
|
||||||
|
|
||||||
pthread_mutex_unlock(&sessionMapLock);
|
pthread_mutex_unlock(&sessionMapLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user