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) ключ игрока

возвращает количество вопросов в игре