concept.md 1.48 KB
Newer Older
1
# Design Concept
2

3
Mongoose has three basic data structures:
4 5 6 7 8

- `struct mg_mgr` is an event manager that holds all active connections
- `struct mg_connection` describes a connection
- `struct mbuf` describes data buffer (received or sent data)

Marko Mikulicic's avatar
Marko Mikulicic committed
9 10 11 12
Connections could be either *listening*, *outbound* or *inbound*. Outbound
connections are created by the `mg_connect()` call. Listening connections are
created by the `mg_bind()` call. Inbound connections are those accepted by a
listening connection. Each connection is described by the `struct mg_connection`
13
structure, which has a number of fields like socket, event handler function,
Marko Mikulicic's avatar
Marko Mikulicic committed
14
send/receive buffer, flags, etc.
15

16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
An application that uses mongoose should follow a standard pattern of
event-driven application:

1. declare and initialise event manager:

    ```c
    struct mg_mgr mgr;
    mg_mgr_init(&mgr, NULL);
    ```
2. Create connections. For example, a server application should create
   listening connections:

   ```c
    struct mg_connection *c = mg_bind(&mgr, "80", ev_handler_function);
    mg_set_protocol_http_websocket(c);
   ```

3. create an event loop by calling `mg_mgr_poll()` in a loop:

    ```c
    for (;;) {
      mg_mgr_poll(&mgr, 1000);
    }
    ```

41
`mg_mgr_poll()` iterates over all sockets, accepts new connections, sends and
Marko Mikulicic's avatar
Marko Mikulicic committed
42
receives data, closes connections and calls event handler functions for the
43 44 45
respective events. For the full example, see
[Usage Example](#/overview/usage-example.md/)
which implements TCP echo server.