Mongoose サーバー イベント ハンドラーが NULL の場合、HTML ファイル (たとえば、localhost:8080/index.html) が問題なくレンダリングされることがわかりました。
https://github.com/cesanta/mongooseにある Mongoose Github リポジトリの例から抜粋したコードを次に示します。
int main(void) {
struct mg_server *server = mg_create_server(NULL, NULL);
mg_set_option(server, "listening_port", "8080");
printf("Starting on port %s\n", mg_get_option(server, "listening_port"));
for (;;) {
mg_poll_server(server, 1000);
}
mg_destroy_server(&server);
return 0;
}
Mongoose のイベント ハンドラを使用してリクエストを処理したいと考えています。ここでチュートリアルを見ました: https://github.com/cesanta/mongoose/blob/master/examples/post.c。唯一の問題は、以下のコードに示すように、埋め込みファイルとして初期化されていない限り、index.html ファイルにアクセスできないことです。埋め込みファイルのバージョンを削除して、実際の html ファイルをレンダリングしたいと考えています。
#include <stdio.h>
#include <string.h>
#include "mongoose.h"
static const char *html_form =
"<html><body>"
"<form action=\"/handle_request\">"
"<input type=\"text\" name=\"request_value\" /> <br/>"
"<input type=\"submit\" />"
"</form></body></html>";
static void send_reply(struct mg_connection *conn) {
char value[500];
if(strcmp(conn->uri, "/handle_request") == 0) {
mg_get_var(conn, "request_value", value, sizeof(value));
mg_send_header(conn, "Content-Type", "text/plain");
mg_printf_data( conn, value );
} if(strcmp(conn->uri, "/index.html") == 0) {
// #######################
// HELP ME HERE
// #######################
// Render the html file.
// #######################
} else {
mg_send_data(conn, html_form, strlen(html_form));
}
}
static int ev_handler( struct mg_connection *conn, enum mg_event ev ) {
if ( ev == MG_REQUEST ) {
send_reply( conn );
return MG_TRUE;
} else if ( ev == MG_AUTH ) {
return MG_TRUE;
} else {
return MG_FALSE;
}
}
int main(void) {
struct mg_server *server = mg_create_server(NULL, ev_handler);
mg_set_option(server, "listening_port", "8080");
printf("Starting on port %s\n", mg_get_option(server, "listening_port"));
for (;;) {
mg_poll_server(server, 1000);
}
mg_destroy_server(&server);
return 0;
}
助言がありますか?前もって感謝します。