Hi,
I'm new to mongoose. I edited hello.c and added a Web class into it and moved some original code around. I was able to build and execute it like its original behavior. However, when I added a member function and called in from begin_request_handler, the new function could not be called. Can you please help me? Thanks!
Web::get_Instance()->callback(); // unable to call this function
================= hello.cpp ====================
#include <stdio.h>
#include <string.h>
#include "mongoose.h"
class Web
{
private:
Web();
~Web() {};
static Web* m_instance;
public:
void callback (void);
static Web* get_Instance();
};
Web* Web::m_instance = 0;
void Web::callback (void)
{
printf ("%s\n", __FUNCTION__);
}
// This function will be called by mongoose on every new request.
static int begin_request_handler(struct mg_connection *conn)
{
Web::get_Instance()->callback(); // unable to call this function
const struct mg_request_info *request_info = mg_get_request_info(conn);
char content[100];
// Prepare the message we're going to send
int content_length = snprintf(content, sizeof(content),
"Hello from mongoose! Remote port: %d",
request_info->remote_port);
// Send HTTP reply to the client
mg_printf(conn,
"HTTP/1.1 200 OK\r\n"
"Content-Type: text/plain\r\n"
"Content-Length: %d\r\n" // Always set Content-Length
"\r\n"
"%s",
content_length, content);
// Returning non-zero tells mongoose that our function has replied to
// the client, and mongoose should not send client any more data.
return 1;
}
Web::Web()
{
struct mg_context *ctx;
struct mg_callbacks callbacks;
// List of options. Last element must be NULL.
const char *options[] = {"listening_ports", "8080", NULL};
// Prepare callbacks structure. We have only one callback, the rest are NULL.
memset(&callbacks, 0, sizeof(callbacks));
callbacks.begin_request = begin_request_handler;
// Start the web server.
ctx = mg_start(&callbacks, NULL, options);
// Wait until user hits "enter". Server is running in separate thread.
getchar();
// Stop the server.
mg_stop(ctx);
}
Web* Web::get_Instance()
{
if (!m_instance)
m_instance = new Web;
return m_instance;
}
int main(void)
{
Web::get_Instance();
return 0;
}