mirror of
https://github.com/cesanta/mongoose.git
synced 2026-10-19 11:09:42 +00:00
Revert "Stop publish examples to mongoose repo"
This reverts commit 1a17e17c462bdd4e1d26d8742f8b7087273e04c2. PUBLISHED_FROM=80028de308c9a021955d1425d2bfee8feb85f193
This commit is contained in:
1 parent
7cc7df8c0e
commit
eaef5bd133
351 files changed
+195424
No files matched your search
@@ -0,0 +1,2 @@
|
||||
PROG = websocket_chat_client
|
||||
include ../examples.mk
|
||||
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Cesanta Software Limited
|
||||
* All rights reserved
|
||||
*/
|
||||
|
||||
/*
|
||||
* This is a WebSocket client example.
|
||||
* Prints WS frames to stdout and forwards stdin to server.
|
||||
*/
|
||||
|
||||
#include "mongoose.h"
|
||||
|
||||
static int s_done = 0;
|
||||
static int s_is_connected = 0;
|
||||
|
||||
static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) {
|
||||
struct websocket_message *wm = (struct websocket_message *) ev_data;
|
||||
(void) nc;
|
||||
|
||||
switch (ev) {
|
||||
case MG_EV_CONNECT: {
|
||||
int status = *((int *) ev_data);
|
||||
if (status != 0) {
|
||||
printf("-- Connection error: %d\n", status);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MG_EV_WEBSOCKET_HANDSHAKE_DONE: {
|
||||
printf("-- Connected\n");
|
||||
s_is_connected = 1;
|
||||
break;
|
||||
}
|
||||
case MG_EV_POLL: {
|
||||
char msg[500];
|
||||
int n = 0;
|
||||
#ifdef _WIN32 /* Windows console input is special. */
|
||||
INPUT_RECORD inp[100];
|
||||
HANDLE h = GetStdHandle(STD_INPUT_HANDLE);
|
||||
DWORD i, num;
|
||||
if (!PeekConsoleInput(h, inp, sizeof(inp) / sizeof(*inp), &num)) break;
|
||||
for (i = 0; i < num; i++) {
|
||||
if (inp[i].EventType == KEY_EVENT &&
|
||||
inp[i].Event.KeyEvent.wVirtualKeyCode == VK_RETURN) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == num) break;
|
||||
if (!ReadConsole(h, msg, sizeof(msg), &num, NULL)) break;
|
||||
/* Un-unicode. This is totally not the right way to do it. */
|
||||
for (i = 0; i < num * 2; i += 2) msg[i / 2] = msg[i];
|
||||
n = (int) num;
|
||||
#else /* For everybody else, we just read() stdin. */
|
||||
fd_set read_set, write_set, err_set;
|
||||
struct timeval timeout = {0, 0};
|
||||
FD_ZERO(&read_set);
|
||||
FD_ZERO(&write_set);
|
||||
FD_ZERO(&err_set);
|
||||
FD_SET(0 /* stdin */, &read_set);
|
||||
if (select(1, &read_set, &write_set, &err_set, &timeout) == 1) {
|
||||
n = read(0, msg, sizeof(msg));
|
||||
}
|
||||
#endif
|
||||
if (n <= 0) break;
|
||||
while (msg[n - 1] == '\r' || msg[n - 1] == '\n') n--;
|
||||
mg_send_websocket_frame(nc, WEBSOCKET_OP_TEXT, msg, n);
|
||||
break;
|
||||
}
|
||||
case MG_EV_WEBSOCKET_FRAME: {
|
||||
printf("%.*s\n", (int) wm->size, wm->data);
|
||||
break;
|
||||
}
|
||||
case MG_EV_CLOSE: {
|
||||
if (s_is_connected) printf("-- Disconnected\n");
|
||||
s_done = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
struct mg_mgr mgr;
|
||||
struct mg_connection *nc;
|
||||
const char *chat_server_url = argc > 1 ? argv[1] : "ws://127.0.0.1:8000";
|
||||
|
||||
mg_mgr_init(&mgr, NULL);
|
||||
|
||||
nc = mg_connect_ws(&mgr, ev_handler, chat_server_url, "ws_chat", NULL);
|
||||
if (nc == NULL) {
|
||||
fprintf(stderr, "Invalid address\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
while (!s_done) {
|
||||
mg_mgr_poll(&mgr, 100);
|
||||
}
|
||||
mg_mgr_free(&mgr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in new issue
Block a user