00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef _FRDI_SERVER_H
00020 #define _FRDI_SERVER_H
00021
00022 #include "../shared/frdi.h"
00023
00024
00025 #define FRDI_SERVER_GAME_STAGE_UNSET -1
00026 #define FRDI_SERVER_GAME_STAGE_OPENING 1
00027 #define FRDI_SERVER_GAME_STAGE_INIT 2
00028 #define FRDI_SERVER_GAME_STAGE_RAND 3
00029 #define FRDI_SERVER_GAME_STAGE_GENR 4
00030 #define FRDI_SERVER_GAME_STAGE_VERI 5
00031 #define FRDI_SERVER_GAME_STAGE_CLOSING 6
00032
00033 #define FRDI_SERVER_GAME_LIMIT_UNSET -1
00034 #define FRDI_SERVER_GAME_LIMIT_SIZE 1
00035 #define FRDI_SERVER_GAME_LIMIT_TIME 2
00036 #define FRDI_SERVER_GAME_LIMIT_HOST 3
00037
00038
00039 #define FRDI_SERVER_GAME_USER_UNSET -1
00040
00041 #define FRDI_SERVER_GAME_USER_CLIENT 1
00042
00043 #define FRDI_SERVER_GAME_USER_HOST 2
00044
00045 #define FRDI_SERVER_GAME_USER_SERVER 3
00046
00047 #define FRDI_SERVER_GAME_USER_USER 4
00048
00049 #define FRDI_SERVER_GAME_USER_CONTENT 5
00050
00051
00052 struct frdi__server_app
00053 {
00054 frdi_config *config;
00055 frdi_dict *host_connections;
00056 frdi_dict *client_connections;
00057 frdi_listener *host_listener;
00058 frdi_listener *client_listener;
00059 frdi_log *log;
00060 frdi_app *self;
00061 };
00062
00063 typedef struct frdi__server_app frdi_server_app;
00064
00065
00066 struct frdi__server_host
00067 {
00068 frdi_connection *connection;
00069 frdi_dict *clients;
00070 frdi_dict *games;
00071 char *description;
00072 };
00073
00074 typedef struct frdi__server_host frdi_server_host;
00075
00076
00077 struct frdi__server_client
00078 {
00079 frdi_connection *connection;
00080 frdi_server_host *host;
00081 char *description;
00082 };
00083
00084 typedef struct frdi__server_client frdi_server_client;
00085
00086
00087 struct frdi__server_user
00088 {
00089 char *id;
00090 int num;
00091 char *name;
00092 frdi_game_digest *digest;
00093 frdi_game_usertext *text;
00094 frdi_game_plaintext *plain;
00095 frdi_game_input *input;
00096 int status;
00097 frdi_server_client *client;
00098 };
00099
00100 typedef struct frdi__server_user frdi_server_user;
00101
00102
00103 struct frdi__server_game
00104 {
00105
00106 int stage;
00107 frdi_dict *clients;
00108
00109
00110
00111
00112
00113
00114
00115
00116 frdi_list *players;
00117
00118
00119 frdi_dict *users;
00120 frdi_dict *client2user;
00121 frdi_server_user *host_input;
00122 frdi_server_host *host;
00123 char *game_id;
00124 int size;
00125 int limit_type;
00126 int limit_size;
00127 int limit_time;
00128 int limit_host;
00129 frdi_game_modulo *modulo;
00130 frdi_game_output *output;
00131 frdi_game_properties *properties;
00132 frdi_game_sharedtext *seed;
00133 };
00134
00135 typedef struct frdi__server_game frdi_server_game;
00136
00137
00138 #define frdiServerDebugGame(frdi_debuggame_arg) frdiServerGameDebug(__FILE__, __LINE__, frdi_debuggame_arg)
00139
00140 void frdiServerGameDebug(char *filename, int linenum, frdi_server_game *game);
00141
00142
00143
00144
00145
00146
00147
00148
00151 frdi_server_app *frdiServerAppNew(frdi_app *app);
00152
00155 int frdiServerAppRun(frdi_server_app *self);
00156
00159 void frdiServerAppFree(frdi_server_app *self);
00160
00163 char *frdiServerAppDisplay(frdi_server_app *self);
00164
00167 void frdiServerPV(frdi_server_app *self, char *str);
00168
00171 void frdiServerPVF(frdi_server_app *self, char *format, void *arg);
00172
00173
00174
00175
00176
00177
00178
00179
00182 void *frdiServerClientListenerSpawner(void *arg);
00183
00186 void *frdiServerHostListenerSpawner(void *arg);
00187
00190 void frdiServerClientListenerWaitStop(frdi_server_app *self);
00191
00194 void frdiServerHostListenerWaitStop(frdi_server_app *self);
00195
00198 void frdiServerClientListenerTellStop(frdi_server_app *self);
00199
00202 void frdiServerHostListenerTellStop(frdi_server_app *self);
00203
00206 void frdiServerClientListenerTellStart(frdi_server_app *self);
00207
00210 void frdiServerHostListenerTellStart(frdi_server_app *self);
00211
00212
00213
00214
00215
00216
00217
00218
00219
00222 frdi_server_client *frdiServerClientInitialise(
00223 frdi_server_app *self,
00224 frdi_connection *connection);
00225
00228 frdi_server_host *frdiServerHostInitialise(
00229 frdi_server_app *self,
00230 frdi_connection *connection);
00231
00234 void frdiServerClientFinalise(
00235 frdi_server_app *self,
00236 frdi_server_client *client);
00237
00240 void frdiServerHostFinalise(
00241 frdi_server_app *self,
00242 frdi_server_host *host);
00243
00246 void frdiServerClientRecieve(
00247 frdi_server_app *self,
00248 frdi_connection *connection,
00249 frdi_message *message);
00250
00253 void frdiServerHostRecieve(
00254 frdi_server_app *self,
00255 frdi_connection *connection,
00256 frdi_message *message);
00257
00260 void frdiServerClientMessageSend(
00261 frdi_server_app *self,
00262 frdi_server_client *client,
00263 frdi_message *message);
00264
00267 void frdiServerHostMessageSend(
00268 frdi_server_app *self,
00269 frdi_server_host *host,
00270 frdi_message *message);
00271
00274 char *frdiServerClientDisplay(frdi_server_app *self, frdi_server_client *client);
00275
00278 char *frdiServerHostDisplay(frdi_server_app *self, frdi_server_host *host);
00279
00280
00281
00282
00283
00284
00285
00286
00289 void frdiServerClientMessageRecieve(
00290 frdi_server_app *self,
00291 frdi_server_host *host,
00292 frdi_server_client *client,
00293 frdi_message *message);
00294
00297 void *frdiServerHostMessageRecieve(
00298 frdi_server_app *self,
00299 frdi_server_host *host,
00300 frdi_message *message);
00301
00304 void frdiServerHostMsU(
00305 frdi_server_app *self,
00306 frdi_server_host *host,
00307 frdi_message *old_message);
00308
00311 void frdiServerClientMsU(
00312 frdi_server_app *self,
00313 frdi_server_client *client,
00314 frdi_message *old_message);
00315
00318 void frdiServerTellClientStop(frdi_server_app *self, frdi_server_client *client);
00319
00322 void frdiServerTellHostStop(frdi_server_app *self, frdi_server_host *host);
00323
00326 void frdiServerTellAllStop(frdi_server_app *self);
00327
00330 void frdiServerTellAllStopped(frdi_server_app *self);
00331
00332
00333
00334
00335
00336
00337
00338
00341 void frdiServerGameSendClient(
00342 frdi_server_app *self,
00343 frdi_server_game *game,
00344 frdi_server_client *client,
00345 char *str);
00346
00349 void frdiServerGameSendClients(
00350 frdi_server_app *self,
00351 frdi_server_game *game,
00352 char *str);
00353
00356 void frdiServerClientMrD(
00357 frdi_server_app *self,
00358 frdi_server_host *host,
00359 frdi_server_client *client,
00360 frdi_message *message);
00361
00364 void frdiServerClientMrG(
00365 frdi_server_app *self,
00366 frdi_server_host *host,
00367 frdi_server_client *client,
00368 frdi_message *message);
00369
00372 void frdiServerClientMrK(
00373 frdi_server_app *self,
00374 frdi_server_host *host,
00375 frdi_server_client *client,
00376 frdi_message *message);
00377
00380 void frdiServerClientMrL(
00381 frdi_server_app *self,
00382 frdi_server_host *host,
00383 frdi_server_client *client,
00384 frdi_message *message);
00385
00388 void frdiServerClientMrM(
00389 frdi_server_app *self,
00390 frdi_server_host *host,
00391 frdi_server_client *client,
00392 frdi_message *message);
00393
00396 void frdiServerClientMrR(
00397 frdi_server_app *self,
00398 frdi_server_host *host,
00399 frdi_server_client *client,
00400 frdi_message *message);
00401
00404 void frdiServerClientMrU(
00405 frdi_server_app *self,
00406 frdi_server_host *host,
00407 frdi_server_client *client,
00408 frdi_message *message);
00409
00412 void frdiServerClientMrV(
00413 frdi_server_app *self,
00414 frdi_server_host *host,
00415 frdi_server_client *client,
00416 frdi_message *message);
00417
00420 void frdiServerClientMrE(
00421 frdi_server_app *self,
00422 frdi_server_host *host,
00423 frdi_server_client *client,
00424 frdi_message *message,
00425 char c);
00426
00429 void frdiServerGameSendUsers(
00430 frdi_server_app *self,
00431 frdi_server_game *game,
00432 frdi_list *user_list,
00433 char *str);
00434
00437 frdi_server_host *frdiServerHostFromGameId(frdi_server_app *self, frdi_server_client *client, char *game_id);
00438
00439
00440
00441
00442
00443
00444
00445
00448 void frdiServerGameSendHost(
00449 frdi_server_app *self,
00450 frdi_server_game *game,
00451 char *str);
00452
00455 void frdiServerHostMrD(
00456 frdi_server_app *self,
00457 frdi_server_host *host,
00458 frdi_message *message);
00459
00462 void frdiServerHostMrF(
00463 frdi_server_app *self,
00464 frdi_server_host *host,
00465 frdi_message *message);
00466
00469 void frdiServerHostMrG(
00470 frdi_server_app *self,
00471 frdi_server_host *host,
00472 frdi_message *message);
00473
00476 void frdiServerHostMrK(
00477 frdi_server_app *self,
00478 frdi_server_host *host,
00479 frdi_message *message);
00480
00483 void frdiServerHostMrL(
00484 frdi_server_app *self,
00485 frdi_server_host *host,
00486 frdi_message *message);
00487
00490 void frdiServerHostMrR(
00491 frdi_server_app *self,
00492 frdi_server_host *host,
00493 frdi_message *message);
00494
00497 void frdiServerHostMrU(
00498 frdi_server_app *self,
00499 frdi_server_host *host,
00500 frdi_message *message);
00501
00504 void frdiServerHostMrE(
00505 frdi_server_app *self,
00506 frdi_server_host *host,
00507 frdi_message *message,
00508 char c);
00509
00510
00511
00512
00513
00514
00515
00518 char *frdiServerGameReport(frdi_server_app *self, frdi_server_game *game);
00519
00522 void frdiServerGameInitialiseSeed(frdi_server_app *self, frdi_server_game *game);
00523
00526 void frdiServerGameInitialiseInput(frdi_server_app *self, frdi_server_game *game);
00527
00530 void frdiServerGameReceiveClient(frdi_server_app *self, frdi_server_game *game, frdi_server_client *client, char *str);
00531
00534 void frdiServerGameReceiveHost(frdi_server_app *self, frdi_server_game *game, char *str);
00535
00538 frdi_server_game *frdiServerGameNew(frdi_server_app *self, char *game_id);
00539
00542 void frdiServerGameLog(frdi_server_app *self, frdi_server_game *game, char *str);
00543
00546 void frdiServerGameFinish(frdi_server_app *self, frdi_server_game *game);
00547
00550 char *frdiServerGameDescribe(frdi_server_app *self, frdi_server_game *game);
00551
00554 void frdiServerGameRegisterDigest(frdi_server_app *self, frdi_server_game *game, char *user_id, char *digest);
00555
00558 int frdiServerGameIsAllowed(frdi_server_app *self, frdi_server_game *game, char *prefix);
00559
00568 void frdiServerGameSetGameStage(frdi_server_app *self, frdi_server_game *game, int stage);
00569
00579 void frdiServerGameSetUserStatus(frdi_server_app *self, frdi_server_game *game,
00580 frdi_server_client *client, int status);
00581
00584 frdi_server_client *frdiServerGameClientFromName(frdi_server_app *self, frdi_server_game *game, char *name);
00585
00588 void frdiServerGameCheckReadyForOutcome(frdi_server_app *self, frdi_server_game *game);
00589
00590
00593 char *frdiServerGameUseridFromClient(frdi_server_app *self, frdi_server_game *game, frdi_server_client *client);
00594
00597 void frdiGameAnnounceOutcomeToHost(frdi_server_app *self, frdi_server_game *game);
00598
00601 frdi_server_user *frdiServerUserNew(frdi_server_app *self);
00602
00605 frdi_server_user *frdiServerUserGetFromId(frdi_server_game *game, char *user_id);
00606
00609 frdi_server_user *frdiServerUserGetFromClient(frdi_server_game *game, frdi_server_client *client);
00610
00613 frdi_list *frdiServerUserListMatchStatus(frdi_server_game *game, int status);
00614
00617 char *frdiServerUserDescribe(frdi_server_app *self, frdi_server_user *user);
00618
00619
00620
00621
00622
00623
00624
00625
00628 void frdiServerEncryptionMode(
00629 frdi_server_app *self,
00630 frdi_server_host *host,
00631 frdi_server_client *client,
00632 char *str);
00633
00636 void frdiServerAuthenticationMode(
00637 frdi_server_app *self,
00638 frdi_server_host *host,
00639 frdi_server_client *client,
00640 char *str);
00641
00644 void frdiServerAuthenticationTypePass(
00645 frdi_server_app *self,
00646 frdi_server_host *host,
00647 frdi_server_client *client,
00648 char *str);
00649
00652 void frdiServerAuthenticationType(
00653 frdi_server_app *self,
00654 frdi_server_host *host,
00655 frdi_server_client *client,
00656 char *str);
00657
00660 void frdiServerEncodingMode(
00661 frdi_server_app *self,
00662 frdi_server_host *host,
00663 frdi_server_client *client,
00664 char *str);
00665
00666 #endif
00667
00668