解决打招呼消息的bug

This commit is contained in:
zw
2025-09-08 19:16:05 +08:00
parent a6d5330c73
commit 7a8380af9c
4 changed files with 48 additions and 71 deletions

42
.idea/workspace.xml generated
View File

@@ -6,7 +6,9 @@
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="eceeff5e-51c1-459c-a911-d21ec090a423" name="Changes" comment="ai 开始测试"> <list default="true" id="eceeff5e-51c1-459c-a911-d21ec090a423" name="Changes" comment="ai 开始测试">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Entity/Variables.py" beforeDir="false" afterPath="$PROJECT_DIR$/Entity/Variables.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Module/DeviceInfo.py" beforeDir="false" afterPath="$PROJECT_DIR$/Module/DeviceInfo.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/Module/DeviceInfo.py" beforeDir="false" afterPath="$PROJECT_DIR$/Module/DeviceInfo.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Module/FlaskService.py" beforeDir="false" afterPath="$PROJECT_DIR$/Module/FlaskService.py" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -34,6 +36,9 @@
<component name="Git.Settings"> <component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component> </component>
<component name="HighlightingSettingsPerFile">
<setting file="file://$PROJECT_DIR$/build.bat" root0="SKIP_INSPECTION" />
</component>
<component name="ProjectColorInfo">{ <component name="ProjectColorInfo">{
&quot;customColor&quot;: &quot;&quot;, &quot;customColor&quot;: &quot;&quot;,
&quot;associatedIndex&quot;: 5 &quot;associatedIndex&quot;: 5
@@ -73,7 +78,7 @@
<recent name="E:\Code\python\iOSAI" /> <recent name="E:\Code\python\iOSAI" />
</key> </key>
</component> </component>
<component name="RunManager" selected="Python.Main"> <component name="RunManager">
<configuration name="Main" type="PythonConfigurationType" factoryName="Python" nameIsGenerated="true"> <configuration name="Main" type="PythonConfigurationType" factoryName="Python" nameIsGenerated="true">
<module name="iOSAI" /> <module name="iOSAI" />
<option name="ENV_FILES" value="" /> <option name="ENV_FILES" value="" />
@@ -83,6 +88,7 @@
<env name="PYTHONUNBUFFERED" value="1" /> <env name="PYTHONUNBUFFERED" value="1" />
</envs> </envs>
<option name="SDK_HOME" value="" /> <option name="SDK_HOME" value="" />
<option name="SDK_NAME" value="Python 3.12" />
<option name="WORKING_DIRECTORY" value="" /> <option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" /> <option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" /> <option name="ADD_CONTENT_ROOTS" value="true" />
@@ -97,34 +103,6 @@
<option name="INPUT_FILE" value="" /> <option name="INPUT_FILE" value="" />
<method v="2" /> <method v="2" />
</configuration> </configuration>
<configuration name="tidevice_entry" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="iOSAI" />
<option name="ENV_FILES" value="" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tidevice_entry.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<recent_temporary>
<list>
<item itemvalue="Python.tidevice_entry" />
</list>
</recent_temporary>
</component> </component>
<component name="SharedIndexes"> <component name="SharedIndexes">
<attachedChunks> <attachedChunks>
@@ -181,7 +159,9 @@
<workItem from="1756979981948" duration="4536000" /> <workItem from="1756979981948" duration="4536000" />
<workItem from="1757053266703" duration="9092000" /> <workItem from="1757053266703" duration="9092000" />
<workItem from="1757308358620" duration="654000" /> <workItem from="1757308358620" duration="654000" />
<workItem from="1757309200278" duration="986000" /> <workItem from="1757309200278" duration="8241000" />
<workItem from="1757317510820" duration="50000" />
<workItem from="1757317658542" duration="8554000" />
</task> </task>
<task id="LOCAL-00001" summary="ai 开始测试"> <task id="LOCAL-00001" summary="ai 开始测试">
<option name="closed" value="true" /> <option name="closed" value="true" />
@@ -218,7 +198,7 @@
</component> </component>
<component name="com.intellij.coverage.CoverageDataManagerImpl"> <component name="com.intellij.coverage.CoverageDataManagerImpl">
<SUITE FILE_PATH="coverage/iOSAI$123__1_.coverage" NAME="123 (1) 覆盖结果" MODIFIED="1756897091135" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" /> <SUITE FILE_PATH="coverage/iOSAI$123__1_.coverage" NAME="123 (1) 覆盖结果" MODIFIED="1756897091135" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/iOSAI$Main.coverage" NAME="Main Coverage Results" MODIFIED="1757309807138" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="" /> <SUITE FILE_PATH="coverage/iOSAI$Main.coverage" NAME="Main Coverage Results" MODIFIED="1757329579933" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="" />
<SUITE FILE_PATH="coverage/iOSAI$mac_wda_agent.coverage" NAME="mac_wda_agent Coverage Results" MODIFIED="1756473148639" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/script" /> <SUITE FILE_PATH="coverage/iOSAI$mac_wda_agent.coverage" NAME="mac_wda_agent Coverage Results" MODIFIED="1756473148639" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/script" />
<SUITE FILE_PATH="coverage/iOSAI$tidevice_entry.coverage" NAME="tidevice_entry Coverage Results" MODIFIED="1756886706033" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" /> <SUITE FILE_PATH="coverage/iOSAI$tidevice_entry.coverage" NAME="tidevice_entry Coverage Results" MODIFIED="1756886706033" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/iOSAI$ScriptManager.coverage" NAME="ScriptManager 覆盖结果" MODIFIED="1756896057801" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/script" /> <SUITE FILE_PATH="coverage/iOSAI$ScriptManager.coverage" NAME="ScriptManager 覆盖结果" MODIFIED="1756896057801" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/script" />

View File

@@ -11,12 +11,11 @@ anchorList: list[AnchorModel] = []
# 线程锁 # 线程锁
anchorListLock = threading.Lock() anchorListLock = threading.Lock()
# 打招呼数据 # 打招呼数据
prologueList = [] prologueList: list[str] = []
# 评论列表 # 评论列表
commentsList = [] commentsList = []
# 存储主播名和session_id的字典 # 存储主播名和session_id的字典
anchorWithSession = {} anchorWithSession = {}
# 前端传递的token # 前端传递的token
token = '' token = ''
# 前端传递的 # 前端传递的
@@ -30,10 +29,14 @@ def removeModelFromAnchorList(model: AnchorModel):
with anchorListLock: with anchorListLock:
anchorList.remove(model) anchorList.remove(model)
# 添加数据 # 添加数据
def addModelToAnchorList(models: list[Dict[str, Any]]): def addModelToAnchorList(models: list[Dict[str, Any]]):
with anchorListLock: with anchorListLock:
for dic in models: for dic in models:
obj = AnchorModel.dictToModel(dic) obj = AnchorModel.dictToModel(dic)
anchorList.append(obj) anchorList.append(obj)
# 添加打招呼语
def addDataToPrologue(data: list[str]):
prologueList = data

View File

@@ -1,9 +1,7 @@
# -*- coding: utf-8 -*-
import os import os
import signal import signal
import sys import sys
import time import time
import json
import wda import wda
import threading import threading
import subprocess import subprocess
@@ -30,7 +28,6 @@ class Deviceinfo(object):
self._lock = threading.Lock() self._lock = threading.Lock()
self._pending_udids = set() self._pending_udids = set()
try: try:
self.iproxy_path = self._iproxy_path() self.iproxy_path = self._iproxy_path()
self.iproxy_dir = self.iproxy_path.parent self.iproxy_dir = self.iproxy_path.parent
@@ -96,7 +93,6 @@ class Deviceinfo(object):
continue continue
now_udids = {d.udid for d in lists if d.conn_type == ConnectionType.USB} now_udids = {d.udid for d in lists if d.conn_type == ConnectionType.USB}
# 1. 处理“已插入但未信任”的设备,一旦信任就补连接 # 1. 处理“已插入但未信任”的设备,一旦信任就补连接
for udid in list(self._pending_udids): for udid in list(self._pending_udids):
if udid not in now_udids: if udid not in now_udids:
@@ -281,7 +277,6 @@ class Deviceinfo(object):
if not self._spawn_iproxy: if not self._spawn_iproxy:
LogManager.error("iproxy 启动器未就绪,无法建立端口映射(初始化时未找到 iproxy", udid) LogManager.error("iproxy 启动器未就绪,无法建立端口映射(初始化时未找到 iproxy", udid)
return None return None
try: try:
p = self._spawn_iproxy(udid, self.screenProxy, 9100) p = self._spawn_iproxy(udid, self.screenProxy, 9100)
LogManager.info(f"启动 iproxy 成功,本地 {self.screenProxy} -> 设备 9100", udid) LogManager.info(f"启动 iproxy 成功,本地 {self.screenProxy} -> 设备 9100", udid)

View File

@@ -16,15 +16,17 @@ from Entity.ResultData import ResultData
from Utils.ControlUtils import ControlUtils from Utils.ControlUtils import ControlUtils
from Utils.ThreadManager import ThreadManager from Utils.ThreadManager import ThreadManager
from script.ScriptManager import ScriptManager from script.ScriptManager import ScriptManager
from Entity.Variables import anchorList, addModelToAnchorList, prologueList, removeModelFromAnchorList from Entity.Variables import anchorList, prologueList, addModelToAnchorList, removeModelFromAnchorList
import Entity.Variables as ev import Entity.Variables as ev
app = Flask(__name__) app = Flask(__name__)
CORS(app) CORS(app)
app.config['JSON_AS_ASCII'] = False # Flask jsonify 不转义中文/emoji
app.config['JSONIFY_MIMETYPE'] = "application/json; charset=utf-8"
listData = [] listData = []
dataQueue = Queue() dataQueue = Queue()
def start_socket_listener(): def start_socket_listener():
port = int(os.getenv('FLASK_COMM_PORT', 0)) port = int(os.getenv('FLASK_COMM_PORT', 0))
LogManager.info(f"Received port from environment: {port}") LogManager.info(f"Received port from environment: {port}")
@@ -230,25 +232,20 @@ def stopScript():
code, msg = ThreadManager.stop(udid) code, msg = ThreadManager.stop(udid)
return ResultData(code=code, data="", msg=msg).toJson() return ResultData(code=code, data="", msg=msg).toJson()
# 关注打招呼
# 传递主播数据(关注主播打招呼)
@app.route('/passAnchorData', methods=['POST']) @app.route('/passAnchorData', methods=['POST'])
def passAnchorData(): def passAnchorData():
try:
data: Dict[str, Any] = request.get_json() data: Dict[str, Any] = request.get_json()
# 设备列表 # 设备列表
print("接收的数据", data)
idList = data.get("deviceList", []) idList = data.get("deviceList", [])
# 主播列表 # 主播列表
acList = data.get("anchorList", []) acList = data.get("anchorList", [])
# 是否需要回复 # 是否需要回复
needReply = data.get("needReply", True) needReply = data.get("needReply", True)
# 获取打招呼数据 # 获取打招呼数据
ev.prologueList = data.get("prologueList", []) ev.prologueList = data.get("prologueList", [])
# 添加主播数据 # 添加主播数据
addModelToAnchorList(acList) addModelToAnchorList(acList)
# 启动线程,执行脚本 # 启动线程,执行脚本
@@ -261,12 +258,14 @@ def passAnchorData():
# 添加到线程管理 # 添加到线程管理
ThreadManager.add(udid, thread, event) ThreadManager.add(udid, thread, event)
return ResultData(data="").toJson() return ResultData(data="").toJson()
except Exception as e:
LogManager.error(e)
# 获取私信数据 # 获取私信数据
@app.route("/getPrologueList", methods=['GET']) @app.route("/getPrologueList", methods=['GET'])
def getPrologueList(): def getPrologueList():
print(ev.prologueList) import Entity.Variables as Variables
return ResultData(data=ev.prologueList).toJson() return ResultData(data=Variables.prologueList).toJson()
# 添加临时数据 # 添加临时数据
@app.route("/addTempAnchorData", methods=['POST']) @app.route("/addTempAnchorData", methods=['POST'])