- DatabaseBootstrapper: 删除 Gitee 分片/manifest/blob 下载逻辑, 曲库只走官方 MuseDbSync - build.gradle: 移除 GITEE_DATABASE_* 构建参数 - MainActivity: 重置数据库文案改为官方同步 - ktv_api.js: 歌曲源仅 w.w345.my, 缓存标记 7, 广告/错号资源拦截+重试 - 远程日志: 点歌记录 编号/标题/请求源/状态
53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
"""Expose an adb-forwarded emulator port to the physical LAN for QR testing."""
|
|
|
|
import argparse
|
|
import socket
|
|
import threading
|
|
|
|
|
|
def relay(source: socket.socket, target: socket.socket) -> None:
|
|
try:
|
|
while data := source.recv(65536):
|
|
target.sendall(data)
|
|
except OSError:
|
|
pass
|
|
finally:
|
|
try:
|
|
target.shutdown(socket.SHUT_WR)
|
|
except OSError:
|
|
pass
|
|
|
|
|
|
def handle(client: socket.socket, target_host: str, target_port: int) -> None:
|
|
try:
|
|
target = socket.create_connection((target_host, target_port), timeout=5)
|
|
threading.Thread(target=relay, args=(client, target), daemon=True).start()
|
|
relay(target, client)
|
|
except OSError:
|
|
client.close()
|
|
|
|
|
|
def main() -> None:
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--listen-host", default="0.0.0.0")
|
|
parser.add_argument("--listen-port", type=int, default=8765)
|
|
parser.add_argument("--target-host", default="127.0.0.1")
|
|
parser.add_argument("--target-port", type=int, default=18765)
|
|
args = parser.parse_args()
|
|
|
|
server = socket.socket()
|
|
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
server.bind((args.listen_host, args.listen_port))
|
|
server.listen(64)
|
|
while True:
|
|
client, _ = server.accept()
|
|
threading.Thread(
|
|
target=handle,
|
|
args=(client, args.target_host, args.target_port),
|
|
daemon=True,
|
|
).start()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|