websocket_client.c 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*
  2. * Copyright (c) 2014 Jordan Shelley
  3. * https://github.com/jshelley
  4. * License http://opensource.org/licenses/mit-license.php MIT License
  5. */
  6. // Simple example program on how to use websocket client embedded C interface.
  7. #ifdef _WIN32
  8. #include <Windows.h>
  9. #define sleep(x) Sleep(1000*(x))
  10. #else
  11. #include <unistd.h>
  12. #endif
  13. #include <string.h>
  14. #include "civetweb.h"
  15. #define DOCUMENT_ROOT "."
  16. #define PORT "8888"
  17. #define SSL_CERT "./ssl/server.pem"
  18. static int websocket_data_handler(struct mg_connection *conn, int flags, char *data, size_t data_len)
  19. {
  20. printf("From server: ");
  21. fwrite(data, 1, data_len, stdout);
  22. printf("\r\n");
  23. return 1;
  24. }
  25. int main(int argc, char *argv[])
  26. {
  27. const char * options[] = { "document_root", DOCUMENT_ROOT,
  28. "ssl_certificate", SSL_CERT,
  29. "listening_ports", PORT, 0
  30. };
  31. struct mg_callbacks callbacks;
  32. struct mg_context *ctx;
  33. struct mg_connection* newconn;
  34. char ebuf[100];
  35. memset(&callbacks, 0, sizeof(callbacks));
  36. ctx = mg_start(&callbacks, 0, options);
  37. newconn = mg_websocket_client_connect("echo.websocket.org", 443, 1,
  38. ebuf, sizeof(ebuf),
  39. "/", "http://websocket.org",websocket_data_handler);
  40. if (newconn == NULL)
  41. {
  42. printf("Error: %s", ebuf);
  43. return 1;
  44. }
  45. mg_websocket_write(newconn, WEBSOCKET_OPCODE_TEXT, "data1", 5);
  46. sleep(5);
  47. mg_websocket_write(newconn, WEBSOCKET_OPCODE_TEXT, "data2", 5);
  48. sleep(5);
  49. mg_websocket_write(newconn, WEBSOCKET_OPCODE_TEXT, "data3", 5);
  50. sleep(5);
  51. mg_websocket_write(newconn, WEBSOCKET_OPCODE_TEXT, "data4", 5);
  52. sleep(5);
  53. mg_close_connection(newconn);
  54. printf("Bye!\n");
  55. return 0;
  56. }