feat: implement the production HTTP API
This commit is contained in:
@@ -2,6 +2,12 @@
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
void application_init(application_t *application, random_source_t random) {
|
||||
if (application == NULL) return;
|
||||
application->command_queue = (command_queue_t){0};
|
||||
game_lifecycle_init(&application->lifecycle, random);
|
||||
}
|
||||
|
||||
bool application_enqueue(application_t *application, const app_command_t *command) {
|
||||
return application != NULL && command_queue_push(&application->command_queue, command);
|
||||
}
|
||||
@@ -9,3 +15,40 @@ bool application_enqueue(application_t *application, const app_command_t *comman
|
||||
bool application_take_next_command(application_t *application, app_command_t *command) {
|
||||
return application != NULL && command_queue_pop(&application->command_queue, command);
|
||||
}
|
||||
|
||||
lifecycle_result_t application_join(application_t *application, role_t requested_role, const char *name,
|
||||
uint8_t *session_index) {
|
||||
return application == NULL ? LIFECYCLE_RESULT_UNAUTHORIZED :
|
||||
game_lifecycle_join(&application->lifecycle, requested_role, name, session_index);
|
||||
}
|
||||
|
||||
lifecycle_result_t application_resume(application_t *application,
|
||||
const uint8_t token[kSessionTokenBytes], uint8_t *session_index) {
|
||||
return application == NULL ? LIFECYCLE_RESULT_UNAUTHORIZED :
|
||||
game_lifecycle_resume(&application->lifecycle, token, session_index);
|
||||
}
|
||||
|
||||
bool application_session_for_token(const application_t *application,
|
||||
const uint8_t token[kSessionTokenBytes], uint8_t *session_index) {
|
||||
return application != NULL && session_manager_find(&application->lifecycle.sessions, token, session_index);
|
||||
}
|
||||
|
||||
lifecycle_result_t application_submit(application_t *application, const app_command_t *command) {
|
||||
if (!application_enqueue(application, command)) return LIFECYCLE_RESULT_GENERATION_FAILED;
|
||||
app_command_t next = {0};
|
||||
if (!application_take_next_command(application, &next)) return LIFECYCLE_RESULT_GENERATION_FAILED;
|
||||
switch (next.type) {
|
||||
case COMMAND_CONFIG:
|
||||
return game_lifecycle_configure(&application->lifecycle, next.session_index, next.game_id, next.mode);
|
||||
case COMMAND_START:
|
||||
return game_lifecycle_start(&application->lifecycle, next.session_index, next.game_id);
|
||||
case COMMAND_SHOT:
|
||||
return game_lifecycle_shot(&application->lifecycle, next.session_index, next.game_id, next.coordinate, NULL);
|
||||
case COMMAND_REMATCH:
|
||||
return game_lifecycle_rematch(&application->lifecycle, next.session_index, next.game_id);
|
||||
case COMMAND_ABORT:
|
||||
return game_lifecycle_abort(&application->lifecycle, next.session_index, next.game_id);
|
||||
default:
|
||||
return LIFECYCLE_RESULT_GENERATION_FAILED;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user