server_api¶
server_api - клиент, написанный с использованием библиотеки fastapi.
Для реализации удобного взаимодейтвия есть файл api.py
который содержит PlayerAPI, HostAPI. Оеализованный с помощью запросов на сервер.
В данном файле
host_map = {} # словарь ключ которого pin
empty_hosts = list([i for i in range(100001, 1000000)]) # свободные хосты
Пример hostmap
при одной открытой игре и одном игроке подключенном к ней.
{
"100001": {
"key": "c14c536d2c09dbb59d279ec0cd4bffa20b2615db",
"last_active": "2019-12-19T22:02:03.591276",
"question_cnt": -1,
"peoples": {
"7b6e01d931302c93899756bb5f34e1c8fdc777a8": {
"score": 0,
"last_active": "2019-12-19T22:02:17.455739",
"name": "9kin",
"last": {
"ans": -1,
"res": false,
"add": 0
}
}
},
"quiz": {
"0": {
"answers": [
"3",
"4",
"5"
],
"question": "2 + 2 = ?",
"score": 100,
"time": 10,
"true": 1
},
"1": {
"answers": [
"6",
"7"
],
"question": "2 * 2 + 2 = ?",
"score": 100,
"time": 10,
"true": 0
}
}
}
}
key
- код 20 знаков для подтверждения действий
last_active
- удобно для дебага
question_cnt
- текущий вопрос. (-1 ожидание игроков)
peoples
- Словарь подключенных людей.ключ key
которыый даётся при подключенние к игре.
score
- текущие очки (до этого вопроса)
last_active
- удобно для дебага
name
- имя
last
- словарь последнего ответа
ans
- ответ на последний вопрос (n/-1; -1 не ответил)
res
- результат (True/False)
add
- изменение рейтинга после окончание данного вопроса
quiz
- словарь с содержимом викторины
n
- n вопрос 0,1,2,3….
answers
- массив ответов
question
- вопрос
score
- max балл за этот вопрос
time
- время на вопрос
true
- правильный ответ индекс
В сервере на неправильные данные или если ошибка возвращается HTTPException(status_code=404, detail="error")
host¶
-
@app.get("/status")
Game_id: (int) pin игры Key: (str) ключ хоста Возвращает все данные игры с номером
game_id
-
@app.get("/host")
Quiz: (str) json объект который в примере находитса в quiz
возвращает
pin
иhost_key
-
@app.get("/{game_id}/play")
Game_id: (int) pin игры Key: (str) ключ сервера запуск игры
-
@app.get("/{game_id}/next")
Game_id: (int) pin игры Key: (str) ключ сервера следующий вопрос
client¶
-
@app.get("/{game_id}/connect")
Game_id: (int) pin игры Name: (str) имя игрока возвращает:
- если игры нет или она уже идёт
game
- если такое имя уже используется
name
- если всё нормально
key
- если игры нет или она уже идёт
-
@app.get("/{game_id}/validate")
Game_id: (int) pin игры Key: (str) ключ игрока Ожидание ота=вета на последний вопрос используется sleep
-
@app.get("/{game_id}/reply")
Game_id: (int) pin игры Key: (str) ключ игрока Ans: (int) индес ответа отвечает на текущий вопрос
-
@app.get("/{game_id}/wait")
Game_id: (int) pin игры Key: (str) ключ игрока ожидание следующего вопроса/начала игры
-
@app.get('/{game_id}/question_info')
Game_id: (int) pin игры Key: (str) ключ игрока возвращает количество ответов и время на его решение
-
@app.get('/{game_id}/game_info')
Game_id: (int) pin игры Key: (str) ключ игрока возвращает количество вопросов в игре