2D Run-and-gun shooter inspired by One Man's Doomsday, Counter-Strike, and Metal Slug.
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 
 
 

115 řádky
2.7 KiB

  1. #include "IZ_wsclient.h"
  2. IZ_ProcedureResult IZ_WSClientCallback(
  3. struct lws* wsi,
  4. enum lws_callback_reasons reason,
  5. void* user,
  6. void* in,
  7. size_t len
  8. ) {
  9. switch (reason) {
  10. case LWS_CALLBACK_PROTOCOL_INIT:
  11. return IZ_WSClientProtocolInitialize(wsi, in);
  12. case LWS_CALLBACK_PROTOCOL_DESTROY:
  13. IZ_WSClientProtocolTeardown(wsi);
  14. break;
  15. case LWS_CALLBACK_CLIENT_CONNECTION_ERROR:
  16. IZ_WSClientConnectionError(wsi, in);
  17. break;
  18. case LWS_CALLBACK_CLIENT_ESTABLISHED:
  19. return IZ_WSClientOnOpen(wsi, user);
  20. case LWS_CALLBACK_CLIENT_CLOSED:
  21. IZ_WSClientOnClose(wsi);
  22. break;
  23. case LWS_CALLBACK_CLIENT_RECEIVE:
  24. IZ_WSClientOnReceive(wsi, user, in, len);
  25. break;
  26. case LWS_CALLBACK_CLIENT_WRITEABLE:
  27. return IZ_WSClientWritable(wsi);
  28. default:
  29. break;
  30. }
  31. return lws_callback_http_dummy(wsi, reason, user, in, len);
  32. }
  33. IZ_ProcedureResult IZ_WSClientInitialize(IZ_WSClientState* state) {
  34. struct lws_context_creation_info info;
  35. memset(&info, 0, sizeof info);
  36. info.port = CONTEXT_PORT_NO_LISTEN;
  37. static const struct lws_protocols protocols[] = {
  38. {
  39. .name = NETWORK_PROTOCOL,
  40. .callback = IZ_WSClientCallback,
  41. .per_session_data_size = sizeof(IZ_WSClientSessionData),
  42. .rx_buffer_size = 1024,
  43. .id = 0,
  44. .user = NULL,
  45. .tx_packet_size = 0,
  46. },
  47. LWS_PROTOCOL_LIST_TERM
  48. };
  49. info.protocols = protocols;
  50. static struct lws_protocol_vhost_options pvo_address = {
  51. NULL,
  52. NULL,
  53. "address", /* pvo name */
  54. "localhost" /* pvo value */
  55. };
  56. pvo_address.value = state->params.address;
  57. static struct lws_protocol_vhost_options pvo_path = {
  58. &pvo_address,
  59. NULL,
  60. "path", /* pvo name */
  61. "/" /* pvo value */
  62. };
  63. pvo_path.value = state->params.path;
  64. static struct lws_protocol_vhost_options pvo_port = {
  65. &pvo_path,
  66. NULL,
  67. "port", /* pvo name */
  68. NULL /* pvo value */
  69. };
  70. pvo_port.value = (void*) &state->params.port;
  71. static struct lws_protocol_vhost_options pvo_app = {
  72. &pvo_port,
  73. NULL,
  74. "app",
  75. NULL,
  76. };
  77. pvo_app.value = state->userdata;
  78. static const struct lws_protocol_vhost_options pvo = {
  79. NULL, /* "next" pvo linked-list */
  80. &pvo_app, /* "child" pvo linked-list */
  81. NETWORK_PROTOCOL, /* protocol name we belong to on this vhost */
  82. "" /* ignored */
  83. };
  84. info.pvo = &pvo;
  85. info.fd_limit_per_thread = 1 + 1 + 1;
  86. IZ_WebsocketInitialize(&state->ws);
  87. state->ws.context = lws_create_context(&info);
  88. if (!state->ws.context) {
  89. return -1;
  90. }
  91. return 0;
  92. }
  93. IZ_ProcedureResult IZ_WSClientHandle(IZ_WSClientState* state) {
  94. return IZ_WebsocketHandle(&state->ws);
  95. }
  96. void IZ_WSClientTeardown(IZ_WSClientState* state) {
  97. IZ_WebsocketTeardown(&state->ws);
  98. }
  99. void IZ_WSClientCancelService(IZ_WSClientState* state) {
  100. IZ_WebsocketCancelService(&state->ws);
  101. }