PokerUnicorn
Loading...
Searching...
No Matches
server.h
Go to the documentation of this file.
1/*
2 * PokerUnicorn Server
3 * This project uses test network, NO real coin or NO real money involved.
4 * Copyright (C) 2023, Oğuzhan Eroğlu <meowingcate@gmail.com> (https://meowingcat.io)
5 * Licensed under GPLv3 License
6 * See LICENSE for more info
7 */
8
9#pragma once
10
22#include <stdbool.h>
23#include <stdint.h>
24
25#include <openssl/ssl.h>
26#include <libpq-fe.h>
27
28#include "ref.h"
29#include "sugar.h"
30#include "string.h"
31#include "account.h"
32#include "card.h"
33#include "poker.h"
34#include "websocket.h"
35#include "eventloop.h"
36
37typedef struct pkrsrv_server_packet_frame_header pkrsrv_server_packet_frame_header_t;
38typedef struct pkrsrv_server_packet_frame_login pkrsrv_server_packet_frame_login_t;
39typedef struct pkrsrv_server_packet_frame_login_res pkrsrv_server_packet_frame_login_res_t;
40typedef struct pkrsrv_server_packet_frame_login_res_account pkrsrv_server_packet_frame_login_res_account_t;
41typedef struct pkrsrv_server_packet_frame_signup pkrsrv_server_packet_frame_signup_t;
42typedef struct pkrsrv_server_packet_frame_signup_res pkrsrv_server_packet_frame_signup_res_t;
43typedef struct pkrsrv_server_packet_frame_signup_res_account pkrsrv_server_packet_frame_signup_res_account_t;
44typedef struct pkrsrv_server_packet_frame_account pkrsrv_server_packet_frame_account_t;
45typedef struct pkrsrv_server_packet_frame_enter pkrsrv_server_packet_frame_enter_t;
46typedef struct pkrsrv_server_packet_frame_enter_res pkrsrv_server_packet_frame_enter_res_t;
47typedef struct pkrsrv_server_packet_frame_leave pkrsrv_server_packet_frame_leave_t;
48typedef struct pkrsrv_server_packet_frame_leave_res pkrsrv_server_packet_frame_leave_res_t;
49typedef struct pkrsrv_server_packet_frame_join pkrsrv_server_packet_frame_join_t;
50typedef struct pkrsrv_server_packet_frame_join_res pkrsrv_server_packet_frame_join_res_t;
51typedef struct pkrsrv_server_packet_frame_unjoin pkrsrv_server_packet_frame_unjoin_t;
52typedef struct pkrsrv_server_packet_frame_unjoin_res pkrsrv_server_packet_frame_unjoin_res_t;
53typedef struct pkrsrv_server_packet_frame_poker_info pkrsrv_server_packet_frame_poker_info_t;
54typedef struct pkrsrv_server_packet_frame_poker_info_player pkrsrv_server_packet_frame_poker_info_player_t;
55typedef struct pkrsrv_server_packet_frame_poker_state pkrsrv_server_packet_frame_poker_state_t;
56typedef struct pkrsrv_server_packet_frame_poker_state_player pkrsrv_server_packet_frame_poker_state_player_t;
57typedef struct pkrsrv_server_packet_frame_poker_action pkrsrv_server_packet_frame_poker_action_t;
58typedef struct pkrsrv_server_packet_frame_poker_action_reflection pkrsrv_server_packet_frame_poker_action_reflection_t;
59typedef struct pkrsrv_server_packet_frame_poker_end pkrsrv_server_packet_frame_poker_end_t;
60typedef struct pkrsrv_server_packet_frame_poker_end_score pkrsrv_server_packet_frame_poker_end_score_t;
61typedef struct pkrsrv_server_packet_frame_poker_restarted pkrsrv_server_packet_frame_poker_restarted_t;
62typedef struct pkrsrv_server_packet_frame_unjoined pkrsrv_server_packet_frame_unjoined_t;
63typedef struct pkrsrv_server_packet_frame_get_tables pkrsrv_server_packet_frame_get_tables_t;
64typedef struct pkrsrv_server_packet_frame_tables pkrsrv_server_packet_frame_tables_t;
65typedef struct pkrsrv_server_packet_frame_get_sessions pkrsrv_server_packet_frame_get_sessions_t;
66typedef struct pkrsrv_server_packet_frame_sessions pkrsrv_server_packet_frame_sessions_t;
67typedef struct pkrsrv_server_packet_frame_table pkrsrv_server_packet_frame_table_t;
68typedef struct pkrsrv_server_packet_frame_update_account pkrsrv_server_packet_frame_update_account_t;
69typedef struct pkrsrv_server_packet_frame_update_account_res pkrsrv_server_packet_frame_update_account_res_t;
70typedef struct pkrsrv_server_packet_frame_server_info pkrsrv_server_packet_frame_server_info_t;
71typedef struct pkrsrv_server pkrsrv_server_t;
72typedef struct pkrsrv_server_clients pkrsrv_server_clients_t;
73typedef struct pkrsrv_server_client pkrsrv_server_client_t;
74typedef uint32_t pkrsrv_server_opcode_t;
75
116
122
123typedef void (*opcode_handler_t)(
124 pkrsrv_server_client_t* client,
126);
127
128struct __attribute__((__packed__))
129pkrsrv_server_packet_frame_header {
130 uint32_t opcode;
131 uint32_t length;
132};
133
137struct __attribute__((__packed__))
138pkrsrv_server_packet_frame_login {
139 uint16_t id_token_length;
140 uint16_t password_length;
141};
142
146struct __attribute__((__packed__))
147pkrsrv_server_packet_frame_login_res {
148 uint8_t is_ok;
149 uint8_t is_logined;
150};
151struct __attribute__((__packed__))
152pkrsrv_server_packet_frame_login_res_account {
153 uint16_t xmr_deposit_address_length;
154 uint16_t id_token_length;
155 uint16_t name_length;
156 uint32_t avatar_length;
157 uint64_t id;
158 uint64_t balance;
159};
160
164struct __attribute__((__packed__))
165pkrsrv_server_packet_frame_signup {
166 uint16_t id_token_length;
167 uint16_t password_length;
168 uint16_t name_length;
169 uint32_t avatar_length;
170};
171
175struct __attribute__((__packed__))
176pkrsrv_server_packet_frame_signup_res {
177 uint8_t is_ok;
178 uint8_t is_logined;
179 uint16_t status;
180};
181struct __attribute__((__packed__))
182pkrsrv_server_packet_frame_signup_res_account {
183 uint16_t id_token_length;
184 uint16_t name_length;
185 uint32_t avatar_length;
186 uint16_t xmr_deposit_address_length;
187 uint64_t id;
188 uint64_t balance;
189};
190
194struct __attribute__((__packed__))
195pkrsrv_server_packet_frame_account {
196 uint16_t xmr_deposit_address_length;
197 uint16_t id_token_length;
198 uint16_t name_length;
199 uint32_t avatar_length;
200 uint64_t id;
201 uint64_t balance;
202};
203
207struct __attribute__((__packed__))
208pkrsrv_server_packet_frame_enter {
209 uint64_t table_id;
210};
211
215struct __attribute__((__packed__))
216pkrsrv_server_packet_frame_enter_res {
217 uint64_t table_id;
218 uint8_t is_ok;
219};
220
224struct __attribute__((__packed__))
225pkrsrv_server_packet_frame_leave {
226 uint64_t table_id;
227};
228
232struct __attribute__((__packed__))
233pkrsrv_server_packet_frame_leave_res {
234 uint64_t table_id;
235 uint8_t is_ok;
236};
237
241struct __attribute__((__packed__))
242pkrsrv_server_packet_frame_join {
243 uint64_t table_id;
244 uint8_t position;
245 uint64_t enterance_amount;
246};
247
251struct __attribute__((__packed__))
252pkrsrv_server_packet_frame_join_res {
253 uint64_t table_id;
254 uint8_t is_ok;
255};
256
260struct __attribute__((__packed__))
261pkrsrv_server_packet_frame_unjoin {
262 uint64_t table_id;
263};
264
268struct __attribute__((__packed__))
269pkrsrv_server_packet_frame_unjoin_res {
270 uint64_t table_id;
271 uint8_t is_ok;
272};
273
277struct __attribute__((__packed__))
278pkrsrv_server_packet_frame_poker_info {
279 uint16_t name_length;
280 uint16_t players_length;
281 uint64_t table_id;
282 uint16_t max_players;
283 uint16_t action_timeout;
284 uint64_t small_blind;
285 uint64_t big_blind;
286 uint64_t enterance_min;
287 uint64_t enterance_max;
288};
289
290struct __attribute__((__packed__))
291pkrsrv_server_packet_frame_poker_info_player {
292 uint16_t name_length;
293 uint32_t avatar_length;
294 uint64_t id;
295 uint8_t position;
296 uint8_t is_playing;
297 uint8_t is_dealt;
298 uint8_t is_allin;
299 uint8_t is_folded;
300 uint8_t is_left;
301 uint64_t balance;
302};
303
307struct __attribute__((__packed__))
308pkrsrv_server_packet_frame_poker_state {
309 uint16_t players_length;
310 uint64_t table_id;
311 uint16_t state;
312 uint8_t is_playing;
313 uint8_t cards[5];
314 uint8_t position;
315 uint8_t playing_position;
316 uint8_t is_dealt;
317 uint8_t hand_cards[2];
318 uint64_t balance;
319 uint64_t bet;
320 uint64_t current_raise;
321 uint64_t current_bet;
322 uint64_t pot_amount;
323 uint64_t starting_time;
324};
325
326struct __attribute__((__packed__))
327pkrsrv_server_packet_frame_poker_state_player {
328 uint16_t name_length;
329 uint64_t id;
330 uint8_t position;
331 uint8_t is_playing;
332 uint8_t is_dealt;
333 uint8_t is_allin;
334 uint8_t is_folded;
335 uint8_t is_left;
336 uint64_t balance;
337};
338
342struct __attribute__((__packed__))
343pkrsrv_server_packet_frame_poker_action {
344 uint64_t table_id;
345 uint16_t action_kind;
346 uint64_t amount;
347};
348
353struct __attribute__((__packed__))
354pkrsrv_server_packet_frame_poker_action_reflection {
355 uint64_t table_id;
356 uint64_t account_id;
357 uint16_t action_kind;
358 uint64_t amount;
359};
360
364struct __attribute__((__packed__))
365pkrsrv_server_packet_frame_poker_end {
366 uint64_t table_id;
367 uint64_t winner_account_id;
368 uint8_t scores_length;
369 uint64_t earned_amount;
370};
371
372struct __attribute__((__packed__))
373pkrsrv_server_packet_frame_poker_end_score {
374 uint64_t bet_diff_length;
375 uint64_t account_id;
376};
377
381struct __attribute__((__packed__))
382pkrsrv_server_packet_frame_poker_restarted {
383 uint64_t table_id;
384};
385
389struct __attribute__((__packed__))
390pkrsrv_server_packet_frame_unjoined {
391 uint64_t table_id;
392 uint32_t reason;
393};
394
398struct __attribute__((__packed__))
399pkrsrv_server_packet_frame_get_sessions {
400 uint16_t offset;
401 uint16_t length;
402};
403
407struct __attribute__((__packed__))
408pkrsrv_server_packet_frame_sessions {
409 uint16_t offset;
410 uint16_t length;
411};
412
416struct __attribute__((__packed__))
417pkrsrv_server_packet_frame_get_tables {
418 uint16_t offset;
419 uint16_t length;
420};
421
425struct __attribute__((__packed__))
426pkrsrv_server_packet_frame_tables {
427 uint16_t offset;
428 uint16_t length;
429};
430
434struct __attribute__((__packed__))
435pkrsrv_server_packet_frame_table {
436 uint16_t name_length;
437 uint64_t id;
438 uint16_t max_players;
439 uint16_t players_count;
440 uint16_t watchers_count;
441 uint64_t small_blind;
442 uint64_t big_blind;
443};
444
448struct __attribute__((__packed__))
449pkrsrv_server_packet_frame_server_info {
450 uint64_t build_number;
451 uint16_t version_length;
452 uint16_t revision_length;
453 uint16_t compiler_length;
454};
455
459struct __attribute__((__packed__))
460pkrsrv_server_packet_frame_update_account {
461 uint16_t name_length;
462 uint32_t avatar_length;
463};
464
468struct __attribute__((__packed__))
469pkrsrv_server_packet_frame_update_account_res {
470 uint8_t is_ok;
471 uint8_t is_avatar_too_big;
472};
473
474// * <API event types>
475
476typedef struct pkrsrv_server_packet_login {
477 pkrsrv_string_t* id_token;
478 pkrsrv_string_t* password;
480
481typedef struct pkrsrv_server_packet_signup {
482 pkrsrv_string_t* id_token;
483 pkrsrv_string_t* password;
484 pkrsrv_string_t* name;
486 pkrsrv_string_t* avatar;
488
489typedef struct pkrsrv_server_packet_enter {
490 uint64_t table_id;
492
493typedef struct pkrsrv_server_packet_leave {
494 uint64_t table_id;
496
497typedef struct pkrsrv_server_packet_join {
498 uint64_t table_id;
500 uint8_t position;
502
503typedef struct pkrsrv_server_packet_unjoin {
504 uint64_t table_id;
506
507typedef struct pkrsrv_server_packet_poker_action {
508 uint64_t table_id;
509 uint16_t action_kind;
510 uint64_t amount;
512
513typedef struct pkrsrv_server_packet_get_tables {
514 uint16_t offset;
515 uint16_t length;
517
518typedef struct pkrsrv_server_packet_get_sessions {
519 uint16_t offset;
520 uint16_t length;
522
523typedef struct pkrsrv_server_packet_json {
524 pkrsrv_string_t* json;
526
527typedef struct pkrsrv_server_packet_update_account {
528 pkrsrv_string_t* name;
529 pkrsrv_string_t* avatar;
531
532// * </API event types>
533
534typedef struct on_client_connected_params {
535 void* owner;
536 pkrsrv_server_client_t* client;
538typedef struct on_client_disconnected_params {
539 void* owner;
540 pkrsrv_server_client_t* client;
542typedef struct on_client_meowed_params {
543 void* owner;
544 pkrsrv_server_client_t* client;
546typedef struct on_client_enter_params {
547 void* owner;
548 pkrsrv_server_client_t* client;
551typedef struct on_client_leave_params {
552 void* owner;
553 pkrsrv_server_client_t* client;
556typedef struct on_client_join_params {
557 void* owner;
558 pkrsrv_server_client_t* client;
561typedef struct on_client_unjoin_params {
562 void* owner;
563 pkrsrv_server_client_t* client;
566typedef struct on_client_login_params {
567 void* owner;
568 pkrsrv_server_client_t* client;
571typedef struct on_client_signup_params {
572 void* owner;
573 pkrsrv_server_client_t* client;
576typedef struct on_client_get_account_params {
577 void* owner;
578 pkrsrv_server_client_t* client;
580typedef struct on_client_action_params {
581 void* owner;
582 pkrsrv_server_client_t* client;
585typedef struct on_client_get_tables_params {
586 void* owner;
587 pkrsrv_server_client_t* client;
590typedef struct on_client_get_sessions_params {
591 void* owner;
592 pkrsrv_server_client_t* client;
595typedef struct on_client_update_account_params {
596 void* owner;
597 pkrsrv_server_client_t* client;
600typedef struct on_client_json_params {
601 void* owner;
602 pkrsrv_server_client_t* client;
605
612 void *owner;
613 pkrsrv_eventloop_t* eventloop;
614 int port;
618 pkrsrv_server_clients_t* clients;
619 SSL_CTX* ssl_ctx;
620 void (*on_client_connected)(pkrsrv_eventloop_task_t* task);
621 void (*on_client_disconnected)(pkrsrv_eventloop_task_t* task);
622 void (*on_client_meowed)(pkrsrv_eventloop_task_t* task);
623 void (*on_client_login)(pkrsrv_eventloop_task_t* task);
624 void (*on_client_signup)(pkrsrv_eventloop_task_t* task);
625 void (*on_client_get_account)(pkrsrv_eventloop_task_t* task);
626 void (*on_client_enter)(pkrsrv_eventloop_task_t* task);
627 void (*on_client_leave)(pkrsrv_eventloop_task_t* task);
628 void (*on_client_join)(pkrsrv_eventloop_task_t* task);
629 void (*on_client_unjoin)(pkrsrv_eventloop_task_t* task);
630 void (*on_client_action)(pkrsrv_eventloop_task_t* task);
631 void (*on_client_get_tables)(pkrsrv_eventloop_task_t* task);
632 void (*on_client_get_sessions)(pkrsrv_eventloop_task_t* task);
633 void (*on_client_update_account)(pkrsrv_eventloop_task_t* task);
634 void (*on_client_json)(pkrsrv_eventloop_task_t* task);
635 pthread_mutex_t mutex;
636 pthread_t thread;
638};
639
641 pkrsrv_server_client_t* prev;
642 pkrsrv_server_client_t* next;
643 pkrsrv_server_client_t* terminal;
645};
646
667
668int pkrsrv_server_ssl_read(SSL* ssl, void* buffer, ssize_t length);
669int pkrsrv_server_ssl_write(SSL* ssl, void* buffer, ssize_t length);
670
671int pkrsrv_server_net_read(pkrsrv_server_client_t* client, void* buffer, ssize_t length);
672int pkrsrv_server_net_write(pkrsrv_server_client_t* client, void* buffer, ssize_t length);
673
675 void* owner;
676 int port;
678 pkrsrv_eventloop_t* eventloop;
680 void (*on_client_connected)(pkrsrv_eventloop_task_t* task);
681 void (*on_client_disconnected)(pkrsrv_eventloop_task_t* task);
682 void (*on_client_meowed)(pkrsrv_eventloop_task_t* task);
683 void (*on_client_login)(pkrsrv_eventloop_task_t* task);
684 void (*on_client_signup)(pkrsrv_eventloop_task_t* task);
685 void (*on_client_get_account)(pkrsrv_eventloop_task_t* task);
686 void (*on_client_enter)(pkrsrv_eventloop_task_t* task);
687 void (*on_client_leave)(pkrsrv_eventloop_task_t* task);
688 void (*on_client_join)(pkrsrv_eventloop_task_t* task);
689 void (*on_client_unjoin)(pkrsrv_eventloop_task_t* task);
690 void (*on_client_action)(pkrsrv_eventloop_task_t* task);
691 void (*on_client_get_tables)(pkrsrv_eventloop_task_t* task);
692 void (*on_client_get_sessions)(pkrsrv_eventloop_task_t* task);
693 void (*on_client_update_account)(pkrsrv_eventloop_task_t* task);
694 void (*on_client_json)(pkrsrv_eventloop_task_t* task);
695};
696typedef struct pkrsrv_server_new_params pkrsrv_server_new_params_t;
697
701pkrsrv_server_t* pkrsrv_server_new(pkrsrv_server_new_params_t params);
705void pkrsrv_server_start(pkrsrv_server_t* server);
709void pkrsrv_server_listen(pkrsrv_server_t* server);
713void pkrsrv_server_free(pkrsrv_server_t* server);
714
715pkrsrv_server_clients_t* pkrsrv_server_clients_new();
716void pkrsrv_server_add_client(pkrsrv_server_t* server, pkrsrv_server_client_t* client);
717void pkrsrv_server_add_client__ts(pkrsrv_server_t* server, pkrsrv_server_client_t* client);
718void pkrsrv_server_remove_client(pkrsrv_server_t* server, pkrsrv_server_client_t* client);
719void pkrsrv_server_remove_client__ts(pkrsrv_server_t* server, pkrsrv_server_client_t* client);
720pkrsrv_server_client_t* pkrsrv_server_client_new(pkrsrv_server_t* server);
721void pkrsrv_server_client_free(pkrsrv_server_client_t* client);
722
723static void client_handler(pkrsrv_server_client_t* client);
724static void receive_packet(pkrsrv_server_client_t* client);
725static void receive_websocket_packet(pkrsrv_server_client_t* client);
726static bool send_packet(pkrsrv_server_client_t* client, uint8_t* message, size_t message_size);
727static void client_disconnected(pkrsrv_server_client_t* client);
728
729bool pkrsrv_server_send_binary(pkrsrv_server_client_t* client, uint8_t* data, size_t size);
730
731static void opcode_handler_nop(pkrsrv_server_client_t* client, pkrsrv_server_packet_frame_header_t req_header);
732static void opcode_handler_meow(pkrsrv_server_client_t* client, pkrsrv_server_packet_frame_header_t req_header);
733static void opcode_handler_ping(pkrsrv_server_client_t* client, pkrsrv_server_packet_frame_header_t req_header);
734static void opcode_handler_login(pkrsrv_server_client_t* client, pkrsrv_server_packet_frame_header_t req_header);
735static void opcode_handler_signup(pkrsrv_server_client_t* client, pkrsrv_server_packet_frame_header_t req_header);
736static void opcode_handler_get_account(pkrsrv_server_client_t* client, pkrsrv_server_packet_frame_header_t req_header);
737static void opcode_handler_enter(pkrsrv_server_client_t* client, pkrsrv_server_packet_frame_header_t req_header);
738static void opcode_handler_leave(pkrsrv_server_client_t* client, pkrsrv_server_packet_frame_header_t req_header);
739static void opcode_handler_join(pkrsrv_server_client_t* client, pkrsrv_server_packet_frame_header_t req_header);
740static void opcode_handler_unjoin(pkrsrv_server_client_t* client, pkrsrv_server_packet_frame_header_t req_header);
741static void opcode_handler_poker_action(pkrsrv_server_client_t* client, pkrsrv_server_packet_frame_header_t req_header);
742static void opcode_handler_get_tables(pkrsrv_server_client_t* client, pkrsrv_server_packet_frame_header_t req_header);
743static void opcode_handler_get_sessions(pkrsrv_server_client_t* client, pkrsrv_server_packet_frame_header_t req_header);
744static void opcode_handler_update_account(pkrsrv_server_client_t* client, pkrsrv_server_packet_frame_header_t req_header);
745static void opcode_handler_json(pkrsrv_server_client_t* client, pkrsrv_server_packet_frame_header_t req_header);
746
747bool pkrsrv_server_send_over_capacity(pkrsrv_server_client_t* client);
748bool pkrsrv_server_send_pong(pkrsrv_server_client_t* client);
749
750typedef struct {
751 pkrsrv_server_client_t* client;
752 uint8_t is_ok;
753 uint8_t is_logined;
754 pkrsrv_account_t* account;
757
758typedef struct {
759 pkrsrv_server_client_t* client;
760 uint8_t is_ok;
761 uint8_t is_logined;
762 uint16_t status;
763 pkrsrv_account_t* account;
766
767typedef struct {
768 pkrsrv_server_client_t* client;
769 pkrsrv_account_t* account;
772
773typedef struct {
774 pkrsrv_server_client_t* client;
775 uint64_t table_id;
776 uint8_t is_ok;
779
780typedef struct {
781 pkrsrv_server_client_t* client;
782 uint64_t table_id;
783 uint8_t is_ok;
786
787typedef struct {
788 pkrsrv_server_client_t* client;
789 uint64_t table_id;
790 uint8_t is_ok;
793
794typedef struct {
795 pkrsrv_server_client_t* client;
796 uint64_t table_id;
797 uint8_t is_ok;
800
801typedef struct {
802 pkrsrv_server_client_t* client;
803 pkrsrv_poker_t* poker;
806bool pkrsrv_server_send_poker_info_player(pkrsrv_server_client_t* p_client, pkrsrv_poker_player_t* p_player);
807
808typedef struct {
809 pkrsrv_server_client_t* client;
810 pkrsrv_poker_t* poker;
811 pkrsrv_poker_player_t* player;
814bool pkrsrv_server_send_poker_state_player(pkrsrv_server_client_t* p_client, pkrsrv_poker_player_t* p_player);
815
816typedef struct {
817 pkrsrv_server_client_t* client;
818 uint64_t table_id;
819 uint64_t account_id;
820 uint16_t action_kind;
821 uint64_t amount;
824
825typedef struct {
826 pkrsrv_server_client_t* client;
827 uint64_t table_id;
828
831
832 pkrsrv_poker_t* poker;
835
836typedef struct {
837 pkrsrv_server_client_t* client;
838 uint64_t table_id;
841
842typedef struct {
843 pkrsrv_server_client_t* client;
844 uint64_t table_id;
845 uint32_t reason;
848
849typedef struct {
850 pkrsrv_server_client_t* client;
851 uint16_t offset;
855
856typedef struct {
857 pkrsrv_server_client_t* client;
858 uint16_t offset;
860 pkrsrv_poker_t** pokers;
863
864typedef struct {
865 pkrsrv_server_client_t* client;
866 bool is_ok;
870
871typedef struct {
872 pkrsrv_server_client_t* client;
873 uint64_t build_number;
874 pkrsrv_string_t* version;
875 pkrsrv_string_t* revision;
876 pkrsrv_string_t* compiler;
879
880typedef struct {
881 pkrsrv_server_client_t* client;
882 pkrsrv_string_t* json;
885
886static void sigabrt_handler();
887static void sigpipe_handler(int signal);
888
#define PKRSRV_REF_COUNTEDIFY()
Makes a structure reference-counted.
Definition ref.h:70
void(* on_client_signup)(pkrsrv_eventloop_task_t *task)
Definition server.h:684
pkrsrv_server_packet_update_account_t update_account
Definition server.h:598
pkrsrv_server_packet_unjoin_t unjoin
Definition server.h:564
pkrsrv_server_client_t * client
Definition server.h:548
pkrsrv_server_client_t * client
Definition server.h:544
pkrsrv_string_t * json
Definition server.h:882
pkrsrv_server_client_t * client
Definition server.h:751
bool is_avatar_too_big
Definition server.h:867
pkrsrv_server_client_t * client
Definition server.h:881
pkrsrv_server_client_t * client
Definition server.h:759
pkrsrv_account_t * account
Definition server.h:769
void(* on_client_enter)(pkrsrv_eventloop_task_t *task)
Definition server.h:686
pkrsrv_server_client_t * client
Definition server.h:582
pkrsrv_server_clients_t * clients
Definition server.h:618
uint8_t is_ok
Definition server.h:797
pkrsrv_server_client_t * client
Definition server.h:865
pkrsrv_poker_t ** pokers
Definition server.h:860
void(* on_client_get_sessions)(pkrsrv_eventloop_task_t *task)
Definition server.h:692
void(* on_client_json)(pkrsrv_eventloop_task_t *task)
Definition server.h:634
void * owner
Definition server.h:557
pkrsrv_server_packet_get_sessions_t get_sessions
Definition server.h:593
uint64_t table_id
Definition server.h:508
pkrsrv_server_client_t * client
Definition server.h:872
uint64_t table_id
Definition server.h:498
pkrsrv_server_client_t * next
Definition server.h:642
pkrsrv_server_client_t * client
Definition server.h:573
uint16_t length
Definition server.h:515
pkrsrv_string_t * name
Definition server.h:528
pkrsrv_server_packet_enter_t enter
Definition server.h:549
void * owner
Definition server.h:572
pkrsrv_server_packet_get_tables_t get_tables
Definition server.h:588
void(* on_client_leave)(pkrsrv_eventloop_task_t *task)
Definition server.h:687
pkrsrv_server_packet_leave_t leave
Definition server.h:554
pkrsrv_server_packet_signup_t signup
Definition server.h:574
pkrsrv_string_t * avatar
Definition server.h:529
pkrsrv_server_client_t * client
Definition server.h:553
uint32_t avatar_length
Definition server.h:485
pthread_mutex_t write_mutex
Definition server.h:661
pkrsrv_account_t * account
Definition server.h:754
pkrsrv_server_packet_login_t login
Definition server.h:569
pkrsrv_string_t * compiler
Definition server.h:876
void * owner
Definition server.h:552
int address
Definition server.h:664
PGconn * pg_conn
Definition server.h:655
void(* on_client_json)(pkrsrv_eventloop_task_t *task)
Definition server.h:694
void * owner
Definition server.h:675
pkrsrv_string_t * avatar
Definition server.h:486
pkrsrv_poker_t * poker
Definition server.h:832
void(* on_client_get_account)(pkrsrv_eventloop_task_t *task)
Definition server.h:625
pkrsrv_server_client_t * client
Definition server.h:843
char * host_address
Definition server.h:616
pkrsrv_table_list_t * list
Definition server.h:852
void(* on_client_signup)(pkrsrv_eventloop_task_t *task)
Definition server.h:624
pkrsrv_server_client_t * client
Definition server.h:774
pkrsrv_server_client_t * client
Definition server.h:602
uint64_t build_number
Definition server.h:873
pkrsrv_server_client_t * client
Definition server.h:592
pkrsrv_string_t * name
Definition server.h:484
pkrsrv_server_client_t * client
Definition server.h:540
pkrsrv_server_client_t * terminal
Definition server.h:643
pkrsrv_server_client_t * client
Definition server.h:802
pkrsrv_server_client_t * client
Definition server.h:809
void(* on_client_action)(pkrsrv_eventloop_task_t *task)
Definition server.h:690
uint16_t action_kind
Definition server.h:509
void * owner
Definition server.h:539
uint8_t is_ok
Definition server.h:776
uint64_t winner_account_id
Definition server.h:829
uint8_t position
Definition server.h:500
bool is_running
Definition server.h:637
void(* on_client_login)(pkrsrv_eventloop_task_t *task)
Definition server.h:683
pkrsrv_account_t * account
Definition server.h:763
void * owner
Definition server.h:665
void(* on_client_update_account)(pkrsrv_eventloop_task_t *task)
Definition server.h:693
void * owner
Definition server.h:567
uint64_t table_id
Definition server.h:827
pkrsrv_server_client_t * client
Definition server.h:587
void(* on_client_meowed)(pkrsrv_eventloop_task_t *task)
Definition server.h:622
uint64_t table_id
Definition server.h:494
uint16_t offset
Definition server.h:514
pkrsrv_server_client_t * client
Definition server.h:768
pkrsrv_server_client_t * client
Definition server.h:857
uint8_t is_logined
Definition server.h:753
uint64_t table_id
Definition server.h:504
bool is_protocol_determined
Definition server.h:658
pkrsrv_string_t * password
Definition server.h:478
pkrsrv_server_client_t * client
Definition server.h:850
void(* on_client_join)(pkrsrv_eventloop_task_t *task)
Definition server.h:628
void(* on_client_get_tables)(pkrsrv_eventloop_task_t *task)
Definition server.h:631
uint64_t table_id
Definition server.h:775
int port
Definition server.h:614
pkrsrv_string_t * id_token
Definition server.h:482
uint32_t reason
Definition server.h:845
uint16_t offset
Definition server.h:519
int max_clients
Definition server.h:679
int socket
Definition server.h:662
uint64_t earned_amount
Definition server.h:830
pkrsrv_server_client_t * client
Definition server.h:826
pkrsrv_server_packet_json_t json
Definition server.h:603
void(* on_client_enter)(pkrsrv_eventloop_task_t *task)
Definition server.h:626
int server_socket
Definition server.h:663
void(* on_client_connected)(pkrsrv_eventloop_task_t *task)
Definition server.h:680
void(* on_client_get_account)(pkrsrv_eventloop_task_t *task)
Definition server.h:685
pkrsrv_server_client_t * client
Definition server.h:563
void(* on_client_get_sessions)(pkrsrv_eventloop_task_t *task)
Definition server.h:632
int port
Definition server.h:676
bool is_alive
Definition server.h:657
int length
Definition server.h:644
void(* on_client_join)(pkrsrv_eventloop_task_t *task)
Definition server.h:688
pkrsrv_server_client_t * client
Definition server.h:578
pkrsrv_server_client_t * client
Definition server.h:781
void * owner
Definition server.h:612
void * owner
Definition server.h:547
uint8_t is_logined
Definition server.h:761
int pokers_length
Definition server.h:859
void(* on_client_action)(pkrsrv_eventloop_task_t *task)
Definition server.h:630
pkrsrv_server_client_t * prev
Definition server.h:641
pkrsrv_string_t * id_token
Definition server.h:477
void(* on_client_disconnected)(pkrsrv_eventloop_task_t *task)
Definition server.h:621
char * bind_address
Definition server.h:615
void * owner
Definition server.h:586
pkrsrv_poker_t * poker
Definition server.h:810
void * owner
Definition server.h:581
pkrsrv_string_t * json
Definition server.h:524
void * owner
Definition server.h:601
pthread_t thread
Definition server.h:636
SSL * ssl
Definition server.h:656
void * owner
Definition server.h:543
void(* on_client_get_tables)(pkrsrv_eventloop_task_t *task)
Definition server.h:691
uint8_t is_ok
Definition server.h:752
void(* on_client_connected)(pkrsrv_eventloop_task_t *task)
Definition server.h:620
uint16_t action_kind
Definition server.h:820
uint64_t table_id
Definition server.h:490
pkrsrv_string_t * revision
Definition server.h:875
pkrsrv_eventloop_t * eventloop
Definition server.h:678
pkrsrv_server_client_t * client
Definition server.h:817
pkrsrv_server_client_t * client
Definition server.h:536
pkrsrv_eventloop_t * eventloop
Definition server.h:613
pkrsrv_server_t * server
Definition server.h:654
void(* on_client_unjoin)(pkrsrv_eventloop_task_t *task)
Definition server.h:629
void(* on_client_unjoin)(pkrsrv_eventloop_task_t *task)
Definition server.h:689
pkrsrv_string_t * version
Definition server.h:874
uint64_t table_id
Definition server.h:782
void * owner
Definition server.h:596
uint64_t table_id
Definition server.h:796
void(* on_client_disconnected)(pkrsrv_eventloop_task_t *task)
Definition server.h:681
pkrsrv_string_t * password
Definition server.h:483
uint64_t account_id
Definition server.h:819
pkrsrv_poker_player_t * player
Definition server.h:811
uint16_t offset
Definition server.h:851
void * owner
Definition server.h:535
uint64_t table_id
Definition server.h:789
uint64_t enterance_amount
Definition server.h:499
void(* on_client_meowed)(pkrsrv_eventloop_task_t *task)
Definition server.h:682
pkrsrv_poker_t * poker
Definition server.h:803
pkrsrv_server_client_t * client
Definition server.h:837
uint64_t table_id
Definition server.h:838
uint8_t is_ok
Definition server.h:760
pkrsrv_server_packet_join_t join
Definition server.h:559
uint16_t length
Definition server.h:520
uint8_t is_ok
Definition server.h:783
pthread_mutex_t mutex
Definition server.h:635
pkrsrv_server_client_t * client
Definition server.h:788
pkrsrv_server_client_t * client
Definition server.h:558
pkrsrv_server_client_t * client
Definition server.h:568
pkrsrv_server_client_t * client
Definition server.h:597
void(* on_client_update_account)(pkrsrv_eventloop_task_t *task)
Definition server.h:633
char * bind_address
Definition server.h:677
void(* on_client_leave)(pkrsrv_eventloop_task_t *task)
Definition server.h:627
void * owner
Definition server.h:562
uint16_t status
Definition server.h:762
int max_clients
Definition server.h:617
void * owner
Definition server.h:577
pkrsrv_websocket_t websocket
Definition server.h:660
uint8_t is_ok
Definition server.h:790
SSL_CTX * ssl_ctx
Definition server.h:619
uint64_t table_id
Definition server.h:844
uint64_t amount
Definition server.h:510
pkrsrv_server_packet_poker_action_t action
Definition server.h:583
void(* on_client_login)(pkrsrv_eventloop_task_t *task)
Definition server.h:623
void * owner
Definition server.h:591
pkrsrv_server_client_t * client
Definition server.h:795
uint16_t offset
Definition server.h:858
bool is_websocket
Definition server.h:659
int pkrsrv_server_net_write(pkrsrv_server_client_t *client, void *buffer, ssize_t length)
struct pkrsrv_server_packet_frame_poker_restarted pkrsrv_server_packet_frame_poker_restarted_t
Definition server.h:61
PKRSRV_SERVER_OPCODE
Definition server.h:79
bool pkrsrv_server_send_unjoin_res(pkrsrv_server_send_unjoin_res_params_t params)
struct pkrsrv_server_packet_frame_login_res pkrsrv_server_packet_frame_login_res_t
Definition server.h:39
struct pkrsrv_server_packet_frame_poker_info pkrsrv_server_packet_frame_poker_info_t
Definition server.h:53
struct pkrsrv_server_packet_frame_poker_state_player pkrsrv_server_packet_frame_poker_state_player_t
Definition server.h:56
struct pkrsrv_server_packet_frame_unjoined pkrsrv_server_packet_frame_unjoined_t
Definition server.h:62
bool pkrsrv_server_send_tables(pkrsrv_server_send_tables_params_t params)
struct pkrsrv_server_packet_frame_table pkrsrv_server_packet_frame_table_t
Definition server.h:67
bool pkrsrv_server_send_json(pkrsrv_server_send_json_params_t params)
void pkrsrv_server_add_client(pkrsrv_server_t *server, pkrsrv_server_client_t *client)
struct pkrsrv_server_packet_frame_signup pkrsrv_server_packet_frame_signup_t
Definition server.h:41
struct pkrsrv_server_packet_frame_signup_res_account pkrsrv_server_packet_frame_signup_res_account_t
Definition server.h:43
bool pkrsrv_server_send_poker_end(pkrsrv_server_send_poker_end_params_t params)
struct pkrsrv_server_packet_frame_login_res_account pkrsrv_server_packet_frame_login_res_account_t
Definition server.h:40
void pkrsrv_server_remove_client__ts(pkrsrv_server_t *server, pkrsrv_server_client_t *client)
pkrsrv_server_packet_signup_res_status_t
Definition server.h:117
struct pkrsrv_server_packet_frame_poker_end pkrsrv_server_packet_frame_poker_end_t
Definition server.h:59
struct pkrsrv_server_packet_frame_header pkrsrv_server_packet_frame_header_t
Definition server.h:37
void pkrsrv_server_remove_client(pkrsrv_server_t *server, pkrsrv_server_client_t *client)
bool pkrsrv_server_send_signup_res(pkrsrv_server_send_signup_res_params_t params)
struct pkrsrv_server_packet_frame_tables pkrsrv_server_packet_frame_tables_t
Definition server.h:64
struct pkrsrv_server_packet_frame_enter pkrsrv_server_packet_frame_enter_t
Definition server.h:45
struct pkrsrv_server_packet_frame_leave pkrsrv_server_packet_frame_leave_t
Definition server.h:47
struct __attribute__((__packed__)) pkrsrv_server_packet_frame_header
Definition server.h:128
bool pkrsrv_server_send_poker_info(pkrsrv_server_send_poker_info_params_t params)
struct pkrsrv_server_packet_frame_sessions pkrsrv_server_packet_frame_sessions_t
Definition server.h:66
bool pkrsrv_server_send_account(pkrsrv_server_send_account_params_t params)
struct pkrsrv_server_packet_frame_enter_res pkrsrv_server_packet_frame_enter_res_t
Definition server.h:46
bool pkrsrv_server_send_poker_info_player(pkrsrv_server_client_t *p_client, pkrsrv_poker_player_t *p_player)
struct pkrsrv_server_packet_frame_poker_action pkrsrv_server_packet_frame_poker_action_t
Definition server.h:57
struct pkrsrv_server_packet_frame_join pkrsrv_server_packet_frame_join_t
Definition server.h:49
struct pkrsrv_server_packet_frame_leave_res pkrsrv_server_packet_frame_leave_res_t
Definition server.h:48
struct pkrsrv_server_packet_frame_signup_res pkrsrv_server_packet_frame_signup_res_t
Definition server.h:42
struct pkrsrv_server_packet_frame_login pkrsrv_server_packet_frame_login_t
Definition server.h:38
bool pkrsrv_server_send_leave_res(pkrsrv_server_send_leave_res_params_t params)
void pkrsrv_server_add_client__ts(pkrsrv_server_t *server, pkrsrv_server_client_t *client)
bool pkrsrv_server_send_enter_res(pkrsrv_server_send_enter_res_params_t params)
struct pkrsrv_server_packet_frame_account pkrsrv_server_packet_frame_account_t
Definition server.h:44
pkrsrv_server_clients_t * pkrsrv_server_clients_new()
bool pkrsrv_server_send_server_info(pkrsrv_server_send_server_info_params_t params)
struct pkrsrv_server_packet_frame_poker_action_reflection pkrsrv_server_packet_frame_poker_action_reflection_t
Definition server.h:58
struct pkrsrv_server_packet_frame_unjoin pkrsrv_server_packet_frame_unjoin_t
Definition server.h:51
struct pkrsrv_server_packet_frame_unjoin_res pkrsrv_server_packet_frame_unjoin_res_t
Definition server.h:52
bool pkrsrv_server_send_login_res(pkrsrv_server_send_login_res_params_t params)
bool pkrsrv_server_send_pong(pkrsrv_server_client_t *client)
struct pkrsrv_server_packet_frame_poker_end_score pkrsrv_server_packet_frame_poker_end_score_t
Definition server.h:60
int pkrsrv_server_ssl_write(SSL *ssl, void *buffer, ssize_t length)
int pkrsrv_server_ssl_read(SSL *ssl, void *buffer, ssize_t length)
uint32_t pkrsrv_server_opcode_t
Definition server.h:74
bool pkrsrv_server_send_poker_restarted(pkrsrv_server_send_poker_restarted_params_t params)
bool pkrsrv_server_send_poker_state_player(pkrsrv_server_client_t *p_client, pkrsrv_poker_player_t *p_player)
struct pkrsrv_server_packet_frame_poker_state pkrsrv_server_packet_frame_poker_state_t
Definition server.h:55
struct pkrsrv_server_packet_frame_join_res pkrsrv_server_packet_frame_join_res_t
Definition server.h:50
pkrsrv_server_client_t * pkrsrv_server_client_new(pkrsrv_server_t *server)
void pkrsrv_server_listen(pkrsrv_server_t *server)
bool pkrsrv_server_send_join_res(pkrsrv_server_send_join_res_params_t params)
bool pkrsrv_server_send_poker_state(pkrsrv_server_send_poker_state_params_t params)
bool pkrsrv_server_send_sessions(pkrsrv_server_send_sessions_params_t params)
struct pkrsrv_server_packet_frame_update_account pkrsrv_server_packet_frame_update_account_t
Definition server.h:68
void pkrsrv_server_start(pkrsrv_server_t *server)
struct pkrsrv_server_packet_frame_poker_info_player pkrsrv_server_packet_frame_poker_info_player_t
Definition server.h:54
struct pkrsrv_server_packet_frame_server_info pkrsrv_server_packet_frame_server_info_t
Definition server.h:70
void(* opcode_handler_t)(pkrsrv_server_client_t *client, pkrsrv_server_packet_frame_header_t req_header)
Definition server.h:123
pkrsrv_server_t * pkrsrv_server_new(pkrsrv_server_new_params_t params)
bool pkrsrv_server_send_binary(pkrsrv_server_client_t *client, uint8_t *data, size_t size)
bool pkrsrv_server_send_over_capacity(pkrsrv_server_client_t *client)
int pkrsrv_server_net_read(pkrsrv_server_client_t *client, void *buffer, ssize_t length)
struct pkrsrv_server_packet_frame_get_tables pkrsrv_server_packet_frame_get_tables_t
Definition server.h:63
bool pkrsrv_server_send_update_account_res(pkrsrv_server_send_update_account_res_params_t params)
struct pkrsrv_server_packet_frame_get_sessions pkrsrv_server_packet_frame_get_sessions_t
Definition server.h:65
void pkrsrv_server_client_free(pkrsrv_server_client_t *client)
bool pkrsrv_server_send_poker_action_reflection(pkrsrv_server_send_poker_action_reflection_params_t params)
bool pkrsrv_server_send_unjoined(pkrsrv_server_send_unjoined_params_t params)
struct pkrsrv_server_packet_frame_update_account_res pkrsrv_server_packet_frame_update_account_res_t
Definition server.h:69
void pkrsrv_server_free(pkrsrv_server_t *server)
@ PKRSRV_SERVER_OPCODE_POKER_ACTION
Definition server.h:100
@ PKRSRV_SERVER_OPCODE_PING
Definition server.h:82
@ PKRSRV_SERVER_OPCODE_JOIN_RES
Definition server.h:95
@ PKRSRV_SERVER_OPCODE_GET_SESSIONS
Definition server.h:108
@ PKRSRV_SERVER_OPCODE_OVER_CAPACITY
Definition server.h:113
@ PKRSRV_SERVER_OPCODE_SERVER_INFO
Definition server.h:112
@ PKRSRV_SERVER_OPCODE_PONG
Definition server.h:83
@ PKRSRV_SERVER_OPCODE_ACCOUNT
Definition server.h:89
@ PKRSRV_SERVER_OPCODE_POKER_ACTION_REFLECTION
Definition server.h:101
@ PKRSRV_SERVER_OPCODE_POKER_END
Definition server.h:102
@ PKRSRV_SERVER_OPCODE_JSON
Definition server.h:104
@ PKRSRV_SERVER_OPCODE_SESSIONS
Definition server.h:109
@ PKRSRV_SERVER_OPCODE_GET_TABLES
Definition server.h:106
@ PKRSRV_SERVER_OPCODE_END
Definition server.h:114
@ PKRSRV_SERVER_OPCODE_POKER_STATE
Definition server.h:99
@ PKRSRV_SERVER_OPCODE_POKER_RESTARTED
Definition server.h:103
@ PKRSRV_SERVER_OPCODE_SIGNUP_RES
Definition server.h:87
@ PKRSRV_SERVER_OPCODE_LOGIN
Definition server.h:84
@ PKRSRV_SERVER_OPCODE_GET_ACCOUNT
Definition server.h:88
@ PKRSRV_SERVER_OPCODE_POKER_INFO
Definition server.h:98
@ PKRSRV_SERVER_OPCODE_LEAVE
Definition server.h:92
@ PKRSRV_SERVER_OPCODE_LOGIN_RES
Definition server.h:85
@ PKRSRV_SERVER_OPCODE_UNJOIN_RES
Definition server.h:97
@ PKRSRV_SERVER_OPCODE_SIGNUP
Definition server.h:86
@ PKRSRV_SERVER_OPCODE_NOP
Definition server.h:80
@ PKRSRV_SERVER_OPCODE_UNJOIN
Definition server.h:96
@ PKRSRV_SERVER_OPCODE_ENTER
Definition server.h:90
@ PKRSRV_SERVER_OPCODE_LEAVE_RES
Definition server.h:93
@ PKRSRV_SERVER_OPCODE_UNJOINED
Definition server.h:105
@ PKRSRV_SERVER_OPCODE_UPDATE_ACCOUNT
Definition server.h:110
@ PKRSRV_SERVER_OPCODE_MEOW
Definition server.h:81
@ PKRSRV_SERVER_OPCODE_TABLES
Definition server.h:107
@ PKRSRV_SERVER_OPCODE_ENTER_RES
Definition server.h:91
@ PKRSRV_SERVER_OPCODE_JOIN
Definition server.h:94
@ PKRSRV_SERVER_OPCODE_UPDATE_ACCOUNT_RES
Definition server.h:111
@ PKRSRV_SERVER_PACKET_SIGNUP_RES_STATUS_ALREADY_EXISTS
Definition server.h:120
@ PKRSRV_SERVER_PACKET_SIGNUP_RES_STATUS_OK
Definition server.h:118
@ PKRSRV_SERVER_PACKET_SIGNUP_RES_STATUS_ERROR
Definition server.h:119
Definition server.h:580
Definition server.h:534
Definition server.h:538
Definition server.h:546
Definition server.h:576
Definition server.h:590
Definition server.h:585
Definition server.h:556
Definition server.h:600
Definition server.h:551
Definition server.h:566
Definition server.h:542
Definition server.h:571
Definition server.h:561
Definition server.h:595
Definition server.h:610
Definition server.h:651
Definition server.h:640
Definition server.h:674
Definition server.h:489
Definition server.h:513
Definition server.h:497
Definition server.h:523
Definition server.h:493
Definition server.h:476
Definition server.h:481
Definition server.h:503
Definition server.h:880
Definition server.h:849
#define ITEMIFY(type)
Definition sugar.h:44
Definition table.h:49
Definition websocket.h:94