diff --git a/lib/talk/startChart/start_chart_manage.dart b/lib/talk/startChart/start_chart_manage.dart index b59e9905..cc5ff80e 100644 --- a/lib/talk/startChart/start_chart_manage.dart +++ b/lib/talk/startChart/start_chart_manage.dart @@ -21,6 +21,7 @@ import 'package:star_lock/talk/startChart/entity/star_chart_register_node_entity import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_handler_factory.dart'; import 'package:star_lock/talk/startChart/proto/talk_expect.pb.dart'; +import 'package:star_lock/talk/startChart/start_chart_talk_status.dart'; import 'package:star_lock/tools/deviceInfo_utils.dart'; import 'package:star_lock/tools/storage.dart'; import 'package:uuid/uuid.dart'; @@ -76,6 +77,9 @@ class StartChartManage { String relayPeerId = ''; // 中继peerId bool _calling = false; // 是否处于通话中 + // 获取 StartChartTalkStatus 的唯一实例 + StartChartTalkStatus talkStatus = StartChartTalkStatus.instance; + // 星图服务初始化 Future init() async { if (isOnlineStartChartServer && _udpSocket != null) { @@ -170,6 +174,7 @@ class StartChartManage { reportInformationData: data, ); if (response.statusCode == 200) { + talkStatus.setInitializationCompleted(); // 发送心跳消息 _sendHeartbeatMessage(); // 发送送上线消息 diff --git a/lib/talk/startChart/start_chart_talk_status.dart b/lib/talk/startChart/start_chart_talk_status.dart new file mode 100644 index 00000000..cfa9c8d3 --- /dev/null +++ b/lib/talk/startChart/start_chart_talk_status.dart @@ -0,0 +1,100 @@ +// 定义视频对讲的状态枚举 +enum TalkStatus { + waitingAnswer, // 等待接听 + duringCall, // 通话中 + rejected, // 被拒绝 + uninitialized, // 未初始化 + initializationCompleted, // 初始化完成 + notTalkData, // 暂无通话数据 + notTalkPing, // 暂无通话保持 + error, // 错误状态 +} + +class StartChartTalkStatus { + // 私有字段,用于存储当前状态 + TalkStatus _status = TalkStatus.uninitialized; + + // 私有化默认构造函数,防止外部创建实例 + StartChartTalkStatus._( + {TalkStatus initialStatus = TalkStatus.uninitialized}) { + _status = initialStatus; + } + + // 静态私有字段,存储唯一的实例 + static final StartChartTalkStatus _instance = StartChartTalkStatus._(); + + // 静态工厂构造函数,返回唯一的实例 + static StartChartTalkStatus get instance => _instance; + + // 获取当前状态的 getter 方法 + TalkStatus get status => _status; + + // 通用的 set 方法(仍然保留) + set status(TalkStatus newStatus) { + _setStatus(newStatus); + } + + // 内部方法,用于更新状态并触发状态变化事件 + void _setStatus(TalkStatus newStatus) { + if (_status == newStatus) return; // 如果状态没有变化,直接返回 + // 更新状态 + _status = newStatus; + + // 触发状态变化的事件或执行其他操作 + _onStatusChanged(newStatus); + } + + // 状态变化时的回调方法(可选) + void _onStatusChanged(TalkStatus newStatus) { + // 例如,可以在这里发送通知、更新 UI 或记录日志 + print("对讲状态变化: ${_status.name} -> ${newStatus.name}"); + } + + /// 设置状态为等待接听 + void setWaitingAnswer() { + _setStatus(TalkStatus.waitingAnswer); + // 可以在这里添加特定于 "waitingAnswer" 状态的逻辑 + } + + /// 设置状态为通话中 + void setDuringCall() { + _setStatus(TalkStatus.duringCall); + // 可以在这里添加特定于 "duringCall" 状态的逻辑 + } + + /// 设置状态为被拒绝 + void setRejected() { + _setStatus(TalkStatus.rejected); + // 可以在这里添加特定于 "rejected" 状态的逻辑 + } + + /// 设置状态为未初始化 + void setUninitialized() { + _setStatus(TalkStatus.uninitialized); + // 可以在这里添加特定于 "uninitialized" 状态的逻辑 + } + + /// 设置状态为初始化完成 + void setInitializationCompleted() { + _setStatus(TalkStatus.initializationCompleted); + // 可以为 "initializationCompleted" 状态添加特定的逻辑 + } + + /// 设置状态为暂无通话数据 + void setNotTalkData() { + _setStatus(TalkStatus.notTalkData); + // 可以在这里添加特定于 "notTalkData" 状态的逻辑 + } + + /// 设置状态为暂无通话保持 + void setNotTalkPing() { + _setStatus(TalkStatus.notTalkPing); + // 可以在这里添加特定于 "notTalkPing" 状态的逻辑 + } + + /// 设置状态为错误 + void setError() { + _setStatus(TalkStatus.error); + // 可以在这里添加特定于 "error" 状态的逻辑 + } +}