websocket_echo_server.c
Go to the documentation of this file.
1 // Copyright (c) 2013-2014 Cesanta Software Limited
2 // $Date: 2014-09-09 17:07:55 UTC $
3 
4 #include <string.h>
5 #include <time.h>
6 #include "mongoose.h"
7 
8 static void push_message(struct mg_server *server, time_t current_time) {
9  struct mg_connection *c;
10  char buf[20];
11  int len = sprintf(buf, "%lu", (unsigned long) current_time);
12 
13  // Iterate over all connections, and push current time message to websocket ones.
14  for (c = mg_next(server, NULL); c != NULL; c = mg_next(server, c)) {
15  if (c->is_websocket) {
16  mg_websocket_write(c, 1, buf, len);
17  }
18  }
19 }
20 
21 static int send_reply(struct mg_connection *conn) {
22  if (conn->is_websocket) {
23  // This handler is called for each incoming websocket frame, one or more
24  // times for connection lifetime.
25  // Echo websocket data back to the client.
26  mg_websocket_write(conn, 1, conn->content, conn->content_len);
27  return conn->content_len == 4 && !memcmp(conn->content, "exit", 4) ?
28  MG_FALSE : MG_TRUE;
29  } else {
30  mg_send_file(conn, "index.html", NULL);
31  return MG_MORE;
32  }
33 }
34 
35 static int ev_handler(struct mg_connection *conn, enum mg_event ev) {
36  switch (ev) {
37  case MG_AUTH: return MG_TRUE;
38  case MG_REQUEST: return send_reply(conn);
39  default: return MG_FALSE;
40  }
41 }
42 
43 int main(void) {
45  time_t current_timer = 0, last_timer = time(NULL);
46 
47  mg_set_option(server, "listening_port", "8080");
48 
49  printf("Started on port %s\n", mg_get_option(server, "listening_port"));
50  for (;;) {
51  mg_poll_server(server, 100);
52  current_timer = time(NULL);
53  if (current_timer - last_timer > 0) {
54  last_timer = current_timer;
55  push_message(server, current_timer);
56  }
57  }
58 
59  mg_destroy_server(&server);
60  return 0;
61 }
int is_websocket
Definition: mongoose.h:52
struct mg_connection * mg_next(struct mg_server *s, struct mg_connection *c)
Definition: mongoose.c:4983
size_t mg_websocket_write(struct mg_connection *conn, int opcode, const char *data, size_t data_len)
Definition: mongoose.c:3045
static int ev_handler(struct mg_connection *conn, enum mg_event ev)
struct mg_server * mg_create_server(void *server_data, mg_handler_t handler)
Definition: mongoose.c:5431
const char * mg_get_option(const struct mg_server *server, const char *name)
Definition: mongoose.c:5425
size_t len
Definition: curl_sasl.c:55
time_t mg_poll_server(struct mg_server *server, int milliseconds)
Definition: mongoose.c:4965
#define sprintf
Definition: curl_printf.h:53
static void push_message(struct mg_server *server, time_t current_time)
static int send_reply(struct mg_connection *conn)
#define printf
Definition: curl_printf.h:40
mg_event
Definition: mongoose.h:62
static struct mg_server * server
Definition: web_server.c:72
int main(void)
char buf[3]
Definition: unit1398.c:32
const char * mg_set_option(struct mg_server *server, const char *name, const char *value)
Definition: mongoose.c:5143
void mg_send_file(struct mg_connection *c, const char *file_name, const char *extra_headers)
Definition: mongoose.c:4585
void mg_destroy_server(struct mg_server **server)
Definition: mongoose.c:4969
size_t content_len
Definition: mongoose.h:50
char * content
Definition: mongoose.h:49


rc_tagdetect_client
Author(s): Monika Florek-Jasinska , Raphael Schaller
autogenerated on Sat Feb 13 2021 03:42:17