PokerUnicorn
Loading...
Searching...
No Matches
poker.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 <sys/time.h>
24#include <pthread.h>
25
26#include "../include/ref.h"
27#include "../include/table.h"
28#include "../include/account.h"
29#include "../include/card.h"
31#include "../include/sugar.h"
32
45
52
60
61typedef struct pkrsrv_poker pkrsrv_poker_t;
62typedef struct pkrsrv_poker_players pkrsrv_poker_players_t;
63typedef struct pkrsrv_poker_player pkrsrv_poker_player_t;
64typedef struct pkrsrv_poker_player_score pkrsrv_poker_player_score_t;
65typedef struct pkrsrv_poker_hand pkrsrv_poker_hand_t;
66typedef struct pkrsrv_poker_action pkrsrv_poker_action_t;
67typedef struct pkrsrv_poker_action_result pkrsrv_poker_action_result_t;
68typedef struct pkrsrv_poker_actions pkrsrv_poker_actions_t;
69typedef struct pkrsrv_poker_actions_action pkrsrv_poker_actions_action_t;
70typedef struct pkrsrv_poker_on_action_params pkrsrv_poker_on_action_params_t;
71typedef void (*pkrsrv_poker_on_action_t)(pkrsrv_eventloop_task_t* task);
72
80 pkrsrv_card_t cards[3];
82 pkrsrv_poker_actions_t* actions;
84};
85
87 pkrsrv_poker_player_t* player;
88 uint64_t bet_diff;
89};
90
99
100 void* owner;
101 pkrsrv_eventloop_t* eventloop;
102
103 // * Game Information
104 int process_latency; // * Microseconds
106
107 // * State Information
108 pkrsrv_poker_players_t* players;
109 pkrsrv_poker_player_t** sorted_players;
111 pkrsrv_poker_hand_t hand_preflop;
112 pkrsrv_poker_hand_t hand_flop;
113 pkrsrv_poker_hand_t hand_turn;
114 pkrsrv_poker_hand_t hand_river;
116 uint64_t action_time; // * Microseconds
117 uint64_t proceed_time; // * Microseconds
118 uint64_t starting_time; // * Microseconds
119
120 pkrsrv_card_t card_history[52];
121
124 uint64_t current_bet;
125
128 uint64_t pot_amount;
129
134
137
139
140 pkrsrv_poker_player_t* winner;
141 pkrsrv_card_score_result_t winner_score_result;
142
143 pkrsrv_poker_player_score_t scores[10];
145};
146
148 LISTIFY(pkrsrv_poker_player_t*);
149 pkrsrv_poker_player_t* sb_player;
150 pkrsrv_poker_player_t* bb_player;
154};
155
157 ITEMIFY(pkrsrv_poker_player_t*);
159 pkrsrv_account_t* account;
160 pkrsrv_card_t cards[2];
168 uint64_t balance;
169 uint64_t bet;
170 void* owner;
171};
172
173typedef struct {
174 pkrsrv_poker_t* poker;
176
177typedef struct {
178 pkrsrv_poker_players_t* players;
179 pkrsrv_account_t* account;
181
190
194
199 LISTIFY(pkrsrv_poker_actions_action_t*);
200};
201
203 ITEMIFY(pkrsrv_poker_actions_action_t*);
204 pkrsrv_poker_action_t action;
205 pkrsrv_poker_player_t* player;
206};
207
208typedef struct pkrsrv_poker_actions_action_new_params {
209 pkrsrv_poker_action_t action;
210 pkrsrv_poker_player_t* player;
212
213typedef struct pkrsrv_poker_new_params {
214 void* owner;
217 pkrsrv_eventloop_t* eventloop;
220
222 pkrsrv_poker_t* poker;
223 pkrsrv_poker_player_t* player;
224 pkrsrv_poker_action_t action;
225};
226
227void pkrsrv_poker_free(pkrsrv_poker_t *poker);
228
236void pkrsrv_poker_players_free(pkrsrv_poker_players_t *players);
240bool pkrsrv_poker_players_add(pkrsrv_poker_t *poker, pkrsrv_poker_player_t *player);
244void pkrsrv_poker_players_remove(pkrsrv_poker_t* poker, pkrsrv_poker_player_t* player);
248void pkrsrv_poker_players_get_sorted(pkrsrv_poker_t* poker, pkrsrv_poker_player_t** result);
252pkrsrv_poker_player_t* pkrsrv_poker_players_getby_index(pkrsrv_poker_t* poker, int index);
256pkrsrv_poker_player_t* pkrsrv_poker_players_getby_id(pkrsrv_poker_t* poker, uint64_t id);
260pkrsrv_poker_player_t* pkrsrv_poker_players_getby_position(pkrsrv_poker_t* poker, int position);
264pkrsrv_poker_player_t* pkrsrv_poker_players_getby_position_in_sorted(pkrsrv_poker_t* poker, pkrsrv_poker_player_t** sorted, int position);
272bool pkrsrv_poker_player_is_playing(pkrsrv_poker_player_t* player);
276int pkrsrv_poker_players_get_playing_count(pkrsrv_poker_t* poker);
280int pkrsrv_poker_players_get_ingame_count(pkrsrv_poker_t* poker);
288bool pkrsrv_poker_player_set_balance(pkrsrv_poker_player_t* player, uint64_t amount);
292bool pkrsrv_poker_player_remove_balance(pkrsrv_poker_player_t* player, uint64_t amount);
296bool pkrsrv_poker_player_add_balance(pkrsrv_poker_player_t* player, uint64_t amount);
297
302void pkrsrv_poker_players_deal(pkrsrv_poker_t* poker);
303
311void pkrsrv_poker_player_free(pkrsrv_poker_player_t* player);
315pkrsrv_poker_player_t* pkrsrv_poker_players_addby_account(pkrsrv_poker_t* poker, pkrsrv_account_t* account, int position);
319void pkrsrv_poker_player_deal(pkrsrv_poker_t* poker, pkrsrv_poker_player_t* player);
320
325void pkrsrv_poker_deal(pkrsrv_poker_t* poker);
326
327pkrsrv_poker_hand_t* pkrsrv_poker_get_current_hand(pkrsrv_poker_t* poker);
328pkrsrv_poker_actions_action_t* pkrsrv_poker_get_last_action(pkrsrv_poker_t* poker);
329
333void pkrsrv_poker_ready(pkrsrv_poker_t* poker);
338void pkrsrv_poker_starting(pkrsrv_poker_t* poker);
343bool pkrsrv_poker_start(pkrsrv_poker_t* poker);
347void pkrsrv_poker_proceed(pkrsrv_poker_t* poker);
351bool pkrsrv_poker_restart(pkrsrv_poker_t* poker);
357int pkrsrv_poker_get_last_playing_position(pkrsrv_poker_t* poker, pkrsrv_poker_player_t* action_player);
358
362pkrsrv_poker_action_result_t pkrsrv_poker_do_action(
363 pkrsrv_poker_t* poker,
364 pkrsrv_poker_player_t* player,
365 pkrsrv_poker_action_t action
366);
367
369void pkrsrv_poker_actions_add(pkrsrv_poker_actions_t* actions, pkrsrv_poker_actions_action_t* action);
370
pkrsrv_poker_player_t * player
Definition poker.h:87
uint64_t action_time
Definition poker.h:116
bool is_done
Definition poker.h:192
int starter_players_num
Definition poker.h:130
bool is_sb_must_call
Definition poker.h:136
pkrsrv_account_t * account
Definition poker.h:179
pkrsrv_poker_state_t state
Definition poker.h:110
pkrsrv_poker_hand_t hand_preflop
Definition poker.h:111
uint64_t bet_diff
Definition poker.h:88
bool is_folded
Definition poker.h:163
pkrsrv_poker_on_action_t on_action
Definition poker.h:138
pkrsrv_table_t * table
Definition poker.h:105
bool is_left
Definition poker.h:164
uint64_t bet
Definition poker.h:169
pkrsrv_poker_players_t * players
Definition poker.h:178
pkrsrv_poker_hand_kind_t kind
Definition poker.h:79
pkrsrv_poker_player_t * player
Definition poker.h:223
pkrsrv_table_t * table
Definition poker.h:215
pkrsrv_poker_player_t * bb_player
Definition poker.h:150
void * owner
Definition poker.h:100
pkrsrv_poker_player_t * sb_player
Definition poker.h:149
pkrsrv_account_t * account
Definition poker.h:159
pkrsrv_poker_hand_t hand_river
Definition poker.h:114
uint64_t pot_amount
Definition poker.h:128
pkrsrv_poker_players_t * players
Definition poker.h:108
pkrsrv_eventloop_t * eventloop
Definition poker.h:217
bool is_raised
Definition poker.h:83
pkrsrv_poker_t * poker
Definition poker.h:222
pkrsrv_poker_hand_t hand_turn
Definition poker.h:113
pkrsrv_card_t card_history[52]
Definition poker.h:120
pkrsrv_poker_hand_kind_t hand_kind
Definition poker.h:115
pkrsrv_card_t cards[3]
Definition poker.h:80
bool is_checked
Definition poker.h:81
pkrsrv_poker_on_action_t on_action
Definition poker.h:216
uint64_t current_raise_total
Definition poker.h:123
int position
Definition poker.h:166
pkrsrv_poker_actions_t * actions
Definition poker.h:82
uint64_t enterance_balance
Definition poker.h:167
int process_latency
Definition poker.h:104
uint64_t proceed_time
Definition poker.h:117
bool is_dealt
Definition poker.h:153
pkrsrv_poker_t * poker
Definition poker.h:174
bool is_playing
Definition poker.h:161
uint64_t current_raise
Definition poker.h:122
pkrsrv_card_t cards[2]
Definition poker.h:160
pkrsrv_poker_action_t action
Definition poker.h:204
bool is_playing_last
Definition poker.h:135
pkrsrv_poker_player_t * player
Definition poker.h:210
uint64_t starting_time
Definition poker.h:118
int scores_length
Definition poker.h:144
int synced_action_counter
Definition poker.h:133
bool is_allin
Definition poker.h:165
void * owner
Definition poker.h:170
pkrsrv_account_t account
Definition poker.h:186
pkrsrv_card_score_result_t winner_score_result
Definition poker.h:141
pkrsrv_poker_hand_t hand_flop
Definition poker.h:112
pkrsrv_poker_player_score_t scores[10]
Definition poker.h:143
uint64_t balance
Definition poker.h:168
pkrsrv_eventloop_t * eventloop
Definition poker.h:101
pkrsrv_poker_player_t ** sorted_players
Definition poker.h:109
int button_position
Definition poker.h:151
int position_i
Definition poker.h:152
pkrsrv_poker_action_t action
Definition poker.h:209
int button_position
Definition poker.h:126
uint64_t current_bet
Definition poker.h:124
pkrsrv_poker_actions_action_kind_t kind
Definition poker.h:187
int last_pos_before_last_raise
Definition poker.h:132
pkrsrv_poker_player_t * winner
Definition poker.h:140
uint64_t amount
Definition poker.h:188
int playing_position
Definition poker.h:127
int last_raised_pos
Definition poker.h:131
pkrsrv_poker_player_t * player
Definition poker.h:205
pkrsrv_poker_action_t action
Definition poker.h:224
bool is_dealt
Definition poker.h:162
void * owner
Definition poker.h:214
pkrsrv_poker_hand_kind_t
Definition poker.h:46
void(* pkrsrv_poker_on_action_t)(pkrsrv_eventloop_task_t *task)
Definition poker.h:71
void pkrsrv_poker_ready(pkrsrv_poker_t *poker)
void pkrsrv_poker_free(pkrsrv_poker_t *poker)
int pkrsrv_poker_players_get_playing_count(pkrsrv_poker_t *poker)
void pkrsrv_poker_players_free(pkrsrv_poker_players_t *players)
bool pkrsrv_poker_players_add(pkrsrv_poker_t *poker, pkrsrv_poker_player_t *player)
bool pkrsrv_poker_start(pkrsrv_poker_t *poker)
pkrsrv_poker_actions_action_t * pkrsrv_poker_actions_action_new(pkrsrv_poker_actions_action_new_params_t params)
pkrsrv_poker_action_result_t pkrsrv_poker_do_action(pkrsrv_poker_t *poker, pkrsrv_poker_player_t *player, pkrsrv_poker_action_t action)
bool pkrsrv_poker_player_add_balance(pkrsrv_poker_player_t *player, uint64_t amount)
void pkrsrv_poker_players_deal(pkrsrv_poker_t *poker)
pkrsrv_poker_players_t * pkrsrv_poker_players_new(pkrsrv_poker_players_new_params_t params)
void pkrsrv_poker_actions_add(pkrsrv_poker_actions_t *actions, pkrsrv_poker_actions_action_t *action)
void pkrsrv_poker_starting(pkrsrv_poker_t *poker)
void pkrsrv_poker_player_deal(pkrsrv_poker_t *poker, pkrsrv_poker_player_t *player)
void pkrsrv_poker_player_free(pkrsrv_poker_player_t *player)
pkrsrv_poker_player_t * pkrsrv_poker_players_getby_id(pkrsrv_poker_t *poker, uint64_t id)
bool pkrsrv_poker_restart(pkrsrv_poker_t *poker)
void pkrsrv_poker_deal(pkrsrv_poker_t *poker)
int pkrsrv_poker_players_get_ingame_count(pkrsrv_poker_t *poker)
bool pkrsrv_poker_player_is_playing(pkrsrv_poker_player_t *player)
bool pkrsrv_poker_player_set_balance(pkrsrv_poker_player_t *player, uint64_t amount)
int pkrsrv_poker_get_last_playing_position(pkrsrv_poker_t *poker, pkrsrv_poker_player_t *action_player)
pkrsrv_poker_hand_t * pkrsrv_poker_get_current_hand(pkrsrv_poker_t *poker)
int pkrsrv_poker_players_get_mustplay_count(pkrsrv_poker_t *poker)
bool pkrsrv_poker_player_remove_balance(pkrsrv_poker_player_t *player, uint64_t amount)
void pkrsrv_poker_players_get_sorted(pkrsrv_poker_t *poker, pkrsrv_poker_player_t **result)
pkrsrv_poker_player_t * pkrsrv_poker_players_getby_position(pkrsrv_poker_t *poker, int position)
pkrsrv_poker_player_t * pkrsrv_poker_players_getby_index(pkrsrv_poker_t *poker, int index)
pkrsrv_poker_actions_action_t * pkrsrv_poker_get_last_action(pkrsrv_poker_t *poker)
int pkrsrv_poker_players_get_playable_count(pkrsrv_poker_t *poker)
pkrsrv_poker_player_t * pkrsrv_poker_player_new(pkrsrv_poker_player_new_params_t params)
pkrsrv_poker_player_t * pkrsrv_poker_players_addby_account(pkrsrv_poker_t *poker, pkrsrv_account_t *account, int position)
pkrsrv_poker_state_t
Definition poker.h:33
void pkrsrv_poker_players_remove(pkrsrv_poker_t *poker, pkrsrv_poker_player_t *player)
void pkrsrv_poker_proceed(pkrsrv_poker_t *poker)
pkrsrv_poker_actions_action_kind_t
Definition poker.h:53
pkrsrv_poker_player_t * pkrsrv_poker_players_getby_position_in_sorted(pkrsrv_poker_t *poker, pkrsrv_poker_player_t **sorted, int position)
pkrsrv_poker_t * pkrsrv_poker_new(pkrsrv_poker_new_params_t params)
@ PKRSRV_POKER_HAND_KIND_TURN
Definition poker.h:49
@ PKRSRV_POKER_HAND_KIND_FLOP
Definition poker.h:48
@ PKRSRV_POKER_HAND_KIND_PREFLOP
Definition poker.h:47
@ PKRSRV_POKER_HAND_KIND_RIVER
Definition poker.h:50
@ PKRSRV_POKER_STATE_CREATED
Definition poker.h:34
@ PKRSRV_POKER_STATE_STARTING
Definition poker.h:36
@ PKRSRV_POKER_STATE_DONE
Definition poker.h:43
@ PKRSRV_POKER_STATE_W4P
Definition poker.h:35
@ PKRSRV_POKER_STATE_SMALL_BLIND
Definition poker.h:37
@ PKRSRV_POKER_STATE_FLOP
Definition poker.h:40
@ PKRSRV_POKER_STATE_TURN
Definition poker.h:41
@ PKRSRV_POKER_STATE_RIVER
Definition poker.h:42
@ PKRSRV_POKER_STATE_PREFLOP
Definition poker.h:39
@ PKRSRV_POKER_STATE_BIG_BLIND
Definition poker.h:38
@ PKRSRV_POKER_ACTION_KIND_FOLD
Definition poker.h:58
@ PKRSRV_POKER_ACTION_KIND_SMALL_BLIND
Definition poker.h:54
@ PKRSRV_POKER_ACTION_KIND_CHECK
Definition poker.h:57
@ PKRSRV_POKER_ACTION_KIND_RAISE
Definition poker.h:56
@ PKRSRV_POKER_ACTION_KIND_BIG_BLIND
Definition poker.h:55
Definition poker.h:97
Definition poker.h:185
Definition poker.h:191
Definition poker.h:198
Definition poker.h:202
Definition poker.h:78
Definition poker.h:213
Definition poker.h:221
Definition poker.h:156
Definition poker.h:177
Definition poker.h:86
Definition poker.h:147
Definition poker.h:173
#define PKRSRV_REF_COUNTEDIFY()
Makes a structure reference-counted.
Definition ref.h:70
#define LISTIFY(type)
Definition sugar.h:38
#define ITEMIFY(type)
Definition sugar.h:44
Definition table.h:35