mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-12 01:00:29 +08:00
switch: next/prev api
This commit is contained in:
parent
a65cd7feb5
commit
8d7f89e8f1
@ -52,6 +52,16 @@ class SwitchApi:
|
|||||||
async def __state_handler(self, _: Request) -> Response:
|
async def __state_handler(self, _: Request) -> Response:
|
||||||
return make_json_response(await self.__switch.get_state())
|
return make_json_response(await self.__switch.get_state())
|
||||||
|
|
||||||
|
@exposed_http("POST", "/switch/set_active_prev")
|
||||||
|
async def __set_active_prev_handler(self, _: Request) -> Response:
|
||||||
|
await self.__switch.set_active_prev()
|
||||||
|
return make_json_response()
|
||||||
|
|
||||||
|
@exposed_http("POST", "/switch/set_active_next")
|
||||||
|
async def __set_active_next_handler(self, _: Request) -> Response:
|
||||||
|
await self.__switch.set_active_next()
|
||||||
|
return make_json_response()
|
||||||
|
|
||||||
@exposed_http("POST", "/switch/set_active")
|
@exposed_http("POST", "/switch/set_active")
|
||||||
async def __set_active_port_handler(self, req: Request) -> Response:
|
async def __set_active_port_handler(self, req: Request) -> Response:
|
||||||
port = valid_int_f0(req.query.get("port"))
|
port = valid_int_f0(req.query.get("port"))
|
||||||
|
|||||||
@ -141,6 +141,12 @@ class Switch: # pylint: disable=too-many-public-methods
|
|||||||
|
|
||||||
# =====
|
# =====
|
||||||
|
|
||||||
|
async def set_active_prev(self) -> None:
|
||||||
|
self.__chain.set_active_prev()
|
||||||
|
|
||||||
|
async def set_active_next(self) -> None:
|
||||||
|
self.__chain.set_active_next()
|
||||||
|
|
||||||
async def set_active_port(self, port: int) -> None:
|
async def set_active_port(self, port: int) -> None:
|
||||||
self.__chain.set_active_port(port)
|
self.__chain.set_active_port(port)
|
||||||
|
|
||||||
|
|||||||
@ -55,6 +55,14 @@ class _CmdSetActual(_BaseCmd):
|
|||||||
actual: bool
|
actual: bool
|
||||||
|
|
||||||
|
|
||||||
|
class _CmdSetActivePrev(_BaseCmd):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class _CmdSetActiveNext(_BaseCmd):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
@dataclasses.dataclass(frozen=True)
|
@dataclasses.dataclass(frozen=True)
|
||||||
class _CmdSetActivePort(_BaseCmd):
|
class _CmdSetActivePort(_BaseCmd):
|
||||||
port: int
|
port: int
|
||||||
@ -212,6 +220,12 @@ class Chain: # pylint: disable=too-many-instance-attributes
|
|||||||
|
|
||||||
# =====
|
# =====
|
||||||
|
|
||||||
|
def set_active_prev(self) -> None:
|
||||||
|
self.__queue_cmd(_CmdSetActivePrev())
|
||||||
|
|
||||||
|
def set_active_next(self) -> None:
|
||||||
|
self.__queue_cmd(_CmdSetActiveNext())
|
||||||
|
|
||||||
def set_active_port(self, port: int) -> None:
|
def set_active_port(self, port: int) -> None:
|
||||||
self.__queue_cmd(_CmdSetActivePort(port))
|
self.__queue_cmd(_CmdSetActivePort(port))
|
||||||
|
|
||||||
@ -330,10 +344,29 @@ class Chain: # pylint: disable=too-many-instance-attributes
|
|||||||
case _CmdSetActual():
|
case _CmdSetActual():
|
||||||
self.__actual = cmd.actual
|
self.__actual = cmd.actual
|
||||||
|
|
||||||
|
case _CmdSetActivePrev():
|
||||||
|
if len(self.__units) > 0:
|
||||||
|
port = self.__active_port
|
||||||
|
port -= 1
|
||||||
|
if port >= 0:
|
||||||
|
self.__active_port = port
|
||||||
|
self.__queue_event(PortActivatedEvent(self.__active_port))
|
||||||
|
|
||||||
|
case _CmdSetActiveNext():
|
||||||
|
port = self.__active_port
|
||||||
|
if port < 0:
|
||||||
|
port = 0
|
||||||
|
else:
|
||||||
|
port += 1
|
||||||
|
if port < len(self.__units) * 4:
|
||||||
|
self.__active_port = port
|
||||||
|
self.__queue_event(PortActivatedEvent(self.__active_port))
|
||||||
|
|
||||||
case _CmdSetActivePort():
|
case _CmdSetActivePort():
|
||||||
# Может быть вызвано изнутри при синхронизации
|
# Может быть вызвано изнутри при синхронизации
|
||||||
self.__active_port = cmd.port
|
if cmd.port < len(self.__units) * 4:
|
||||||
self.__queue_event(PortActivatedEvent(self.__active_port))
|
self.__active_port = cmd.port
|
||||||
|
self.__queue_event(PortActivatedEvent(self.__active_port))
|
||||||
|
|
||||||
case _CmdSetPortBeacon():
|
case _CmdSetPortBeacon():
|
||||||
(unit, ch) = self.get_real_unit_channel(cmd.port)
|
(unit, ch) = self.get_real_unit_channel(cmd.port)
|
||||||
|
|||||||
@ -136,6 +136,26 @@ class _AtxApiPart(_BaseApiPart):
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
|
class _SwitchApiPart(_BaseApiPart):
|
||||||
|
async def set_active_prev(self) -> None:
|
||||||
|
session = self._ensure_http_session()
|
||||||
|
async with session.post("/switch/set_active_prev") as resp:
|
||||||
|
htclient.raise_not_200(resp)
|
||||||
|
|
||||||
|
async def set_active_next(self) -> None:
|
||||||
|
session = self._ensure_http_session()
|
||||||
|
async with session.post("/switch/set_active_next") as resp:
|
||||||
|
htclient.raise_not_200(resp)
|
||||||
|
|
||||||
|
async def set_active(self, port: int) -> None:
|
||||||
|
session = self._ensure_http_session()
|
||||||
|
async with session.post(
|
||||||
|
url="/switch/set_active",
|
||||||
|
params={"port": port},
|
||||||
|
) as resp:
|
||||||
|
htclient.raise_not_200(resp)
|
||||||
|
|
||||||
|
|
||||||
# =====
|
# =====
|
||||||
class KvmdClientWs:
|
class KvmdClientWs:
|
||||||
def __init__(self, ws: aiohttp.ClientWebSocketResponse) -> None:
|
def __init__(self, ws: aiohttp.ClientWebSocketResponse) -> None:
|
||||||
@ -213,6 +233,7 @@ class KvmdClientSession(BaseHttpClientSession):
|
|||||||
self.streamer = _StreamerApiPart(self._ensure_http_session)
|
self.streamer = _StreamerApiPart(self._ensure_http_session)
|
||||||
self.hid = _HidApiPart(self._ensure_http_session)
|
self.hid = _HidApiPart(self._ensure_http_session)
|
||||||
self.atx = _AtxApiPart(self._ensure_http_session)
|
self.atx = _AtxApiPart(self._ensure_http_session)
|
||||||
|
self.switch = _SwitchApiPart(self._ensure_http_session)
|
||||||
|
|
||||||
@contextlib.asynccontextmanager
|
@contextlib.asynccontextmanager
|
||||||
async def ws(self) -> AsyncGenerator[KvmdClientWs, None]:
|
async def ws(self) -> AsyncGenerator[KvmdClientWs, None]:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user