MonkeyBusiness/modules/iidx/iidx30lobby.py

170 lines
5.5 KiB
Python
Raw Normal View History

2023-06-02 22:56:10 +00:00
from time import time
2022-10-21 01:23:54 +00:00
import config
from fastapi import APIRouter, Request, Response
from core_common import core_process_request, core_prepare_response, E
2023-05-20 19:50:11 +00:00
router = APIRouter(prefix="/lobby", tags=["lobby"])
2022-10-21 01:23:54 +00:00
router.model_whitelist = ["LDJ"]
2023-06-13 21:23:13 +00:00
arena_host = {}
bpl_host = {}
2023-06-02 22:56:10 +00:00
2022-11-15 14:03:37 +00:00
@router.post("/{gameinfo}/IIDX30lobby/entry")
2022-10-21 01:23:54 +00:00
async def iidx30lobby_entry(request: Request):
request_info = await core_process_request(request)
2023-06-02 22:56:10 +00:00
root = request_info["root"][0]
sp_dp = root.find("play_style").text
arena_class = root.find("arena_class").text
ga = root.find("address/ga").text.split()
gp = root.find("address/gp").text
la = root.find("address/la").text.split()
2023-06-13 21:23:13 +00:00
if arena_host and time() < arena_host["time"]:
2023-06-02 22:56:10 +00:00
# test menu reset
2023-06-13 21:23:13 +00:00
if arena_host["ga"] == ga:
is_arena_host = 1
arena_host["time"] = time() + 30
2023-06-02 22:56:10 +00:00
else:
2023-06-13 21:23:13 +00:00
is_arena_host = 0
2023-06-02 22:56:10 +00:00
response = E.response(
E.IIDX30lobby(
2023-06-13 21:23:13 +00:00
E.host(is_arena_host, __type="bool"),
2023-06-02 22:56:10 +00:00
E.matching_class(arena_class, __type="s32"),
E.address(
2023-06-13 21:23:13 +00:00
E.ga(arena_host["ga"], __type="u8"),
E.gp(arena_host["gp"], __type="u16"),
E.la(arena_host["la"], __type="u8"),
2023-06-02 22:56:10 +00:00
),
)
)
else:
2023-06-13 21:23:13 +00:00
arena_host["ga"] = ga
arena_host["gp"] = gp
arena_host["la"] = la
arena_host["time"] = time() + 30
2023-06-02 22:56:10 +00:00
response = E.response(
E.IIDX30lobby(
E.host(1, __type="bool"),
E.matching_class(arena_class, __type="s32"),
E.address(
E.ga(ga, __type="u8"),
E.gp(gp, __type="u16"),
E.la(la, __type="u8"),
),
)
)
2022-10-21 01:23:54 +00:00
response_body, response_headers = await core_prepare_response(request, response)
return Response(content=response_body, headers=response_headers)
2022-11-15 14:03:37 +00:00
@router.post("/{gameinfo}/IIDX30lobby/update")
2022-10-21 01:23:54 +00:00
async def iidx30lobby_update(request: Request):
request_info = await core_process_request(request)
2022-11-15 14:03:37 +00:00
response = E.response(E.IIDX30lobby())
2022-10-21 01:23:54 +00:00
response_body, response_headers = await core_prepare_response(request, response)
return Response(content=response_body, headers=response_headers)
2022-11-15 14:03:37 +00:00
@router.post("/{gameinfo}/IIDX30lobby/delete")
2022-10-21 01:23:54 +00:00
async def iidx30lobby_delete(request: Request):
request_info = await core_process_request(request)
2023-06-02 22:56:10 +00:00
# normal reset
2023-06-13 21:23:13 +00:00
del arena_host["ga"]
del arena_host["gp"]
del arena_host["la"]
del arena_host["time"]
2022-11-15 14:03:37 +00:00
response = E.response(E.IIDX30lobby())
2022-10-21 01:23:54 +00:00
response_body, response_headers = await core_prepare_response(request, response)
return Response(content=response_body, headers=response_headers)
2022-11-15 14:03:37 +00:00
@router.post("/{gameinfo}/IIDX30lobby/bplbattle_entry")
2022-10-21 01:23:54 +00:00
async def iidx30lobby_bplbattle_entry(request: Request):
request_info = await core_process_request(request)
2023-06-13 21:23:13 +00:00
root = request_info["root"][0]
sp_dp = root.find("play_style").text
arena_class = root.find("arena_class").text
password = root.find("passward").text # passward
ga = root.find("address/ga").text.split()
gp = root.find("address/gp").text
la = root.find("address/la").text.split()
if bpl_host and password in bpl_host and time() < bpl_host[password]["time"]:
# test menu reset
if bpl_host[password]["ga"] == ga:
is_bpl_host = 1
bpl_host[password]["time"] = time() + 30
else:
is_bpl_host = 0
response = E.response(
E.IIDX30lobby(
E.host(is_bpl_host, __type="bool"),
E.matching_class(arena_class, __type="s32"),
E.address(
E.ga(bpl_host[password]["ga"], __type="u8"),
E.gp(bpl_host[password]["gp"], __type="u16"),
E.la(bpl_host[password]["la"], __type="u8"),
),
)
)
else:
bpl_host[password] = {}
bpl_host[password]["ga"] = ga
bpl_host[password]["gp"] = gp
bpl_host[password]["la"] = la
bpl_host[password]["time"] = time() + 30
response = E.response(
E.IIDX30lobby(
E.host(1, __type="bool"),
E.matching_class(arena_class, __type="s32"),
E.address(
E.ga(ga, __type="u8"),
E.gp(gp, __type="u16"),
E.la(la, __type="u8"),
),
)
)
2022-10-21 01:23:54 +00:00
response_body, response_headers = await core_prepare_response(request, response)
return Response(content=response_body, headers=response_headers)
2022-11-15 14:03:37 +00:00
@router.post("/{gameinfo}/IIDX30lobby/bplbattle_update")
2022-10-21 01:23:54 +00:00
async def iidx30lobby_bplbattle_update(request: Request):
request_info = await core_process_request(request)
2022-11-15 14:03:37 +00:00
response = E.response(E.IIDX30lobby())
2022-10-21 01:23:54 +00:00
response_body, response_headers = await core_prepare_response(request, response)
return Response(content=response_body, headers=response_headers)
2022-11-15 14:03:37 +00:00
@router.post("/{gameinfo}/IIDX30lobby/bplbattle_delete")
2022-10-21 01:23:54 +00:00
async def iidx30lobby_bplbattle_delete(request: Request):
request_info = await core_process_request(request)
2023-06-13 21:23:13 +00:00
root = request_info["root"][0]
ga = root.find("address/ga").text.split()
# normal reset
for host in bpl_host:
if bpl_host[host]["ga"] == ga:
del bpl_host[host]
2023-06-15 13:13:04 +00:00
break
2022-11-15 14:03:37 +00:00
response = E.response(E.IIDX30lobby())
2022-10-21 01:23:54 +00:00
response_body, response_headers = await core_prepare_response(request, response)
return Response(content=response_body, headers=response_headers)