Hi Jared,

the code looks fine to me.

What do you mean 'unable to call'?  Are you getting a compiler error?  Or a
crash at runtime?

Cheers,
/ulrich


On Thu, Jul 10, 2014 at 1:20 PM, Jared <[email protected]> wrote:

> 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.
>   // Navigating to http://localhost:8080 will invoke
> begin_request_handler().
>   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;
> }
>
>  --
> You received this message because you are subscribed to the Google Groups
> "mongoose-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/mongoose-users.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"mongoose-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/mongoose-users.
For more options, visit https://groups.google.com/d/optout.

Reply via email to