====== Serveur Minitel web ====== ===== Openframeworks ===== Récupérer la librairie ofxLibwebsockets sur [[https://github.com/robotconscience/ofxLibwebsockets|Github]]. Placer le répertoire décompressé dans le répertoire addons de votre OpenFrameworks. Inclure addon Linux sudo nano /home/pi/openFrameworks/apps/myApps/ServeurMinitelWeb/addons.make Inclure dans le fichier : ofxLibwebsockets Ctrl-O pour sauvegarder et Ctrl-X pour sortir. Installer git : $ sudo apt-get install git-core Installer cmake : $ sudo apt-get install cmake Installer LibWebSocket : [[serveur_websocket|Installation de LibWebSockets]] Créer un projet avec projectGenerator en incluant l'addon ofxLibwebsockets. Copier les fichiers de données dans le répertoire bin/data de votre projet. Configurer sa box : [[labom_yunohost_sur_raspberrypi#si_on_ne_dispose_pas_de_nom_de_domaine_nohostme|yunohost sur raspberrypi, si on ne dispose pas de nom de domaine nohostme]] LibWebSockets [[https://stackoverflow.com/questions/35341871/how-to-solve-the-linking-error-in-libwebsockets|How to solve the linking error in libwebsockets]] LibWebSockets en C++ [[https://github.com/mnisjk/cppWebSockets|cppWebSockets]] [[https://medium.com/@martin.sikora/libwebsockets-simple-websocket-server-68195343d64b|libwebsockets: Simple WebSocket server]] // gcc -Wall testServeur.c -o testServeur -lwebsockets #include #include #include static int lws_callback_http( struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len ) { switch (reason) { case LWS_CALLBACK_ESTABLISHED: printf("connection established\n"); break; case LWS_CALLBACK_RECEIVE: { unsigned char *buf = (unsigned char*) malloc(LWS_SEND_BUFFER_PRE_PADDING + len + LWS_SEND_BUFFER_POST_PADDING); int i; for (i=0; i < len; i++) { buf[LWS_SEND_BUFFER_PRE_PADDING + (len - 1) - i ] = ((char *) in)[i]; } printf("received data: %s, replying: %.*s\n", (char *) in, (int) len, buf + LWS_SEND_BUFFER_PRE_PADDING); lws_write(wsi, &buf[LWS_SEND_BUFFER_PRE_PADDING], len, LWS_WRITE_TEXT); free(buf); break; } default: break; } return 0; } static struct lws_protocols protocols[] = { { "http-only", // name lws_callback_http, // callback 0 // per_session_data_size }, { NULL, NULL, 0 /* End of list */ } }; static const struct lws_extension exts[] = { { "permessage-deflate", lws_extension_callback_pm_deflate, "permessage-deflate" }, { NULL, NULL, NULL /* terminator */ } }; int main(void) { int port = 9000; const char *interface = NULL; struct lws_context *context; int opts = 0; // create libwebsocket context representing this server struct lws_context_creation_info info; memset(&info, 0, sizeof info); info.port = port; info.iface = interface; info.protocols = protocols; info.extensions = exts; //if (!use_ssl) { info.ssl_cert_filepath = NULL; info.ssl_private_key_filepath = NULL; //} else { // info.ssl_cert_filepath = LOCAL_RESOURCE_PATH"/libwebsockets-test-server.pem"; // info.ssl_private_key_filepath = LOCAL_RESOURCE_PATH"/libwebsockets-test-server.key.pem"; //} info.gid = -1; info.uid = -1; info.options = opts; context = lws_create_context(&info); if (context == NULL) { fprintf(stderr, "libwebsocket init failed\n"); return -1; } printf("starting server...\n"); while (1) { lws_service(context, 50); } lws_context_destroy(context); return 0; } Compiler le tout : gcc -Wall serveurWebsocket.c -o serveurWebsocket -lwebsockets sudo ldconfig ./serveurWebsocket {{tag>raspberry_pi Minitel sylvain}}