赞
踩
- import 'dart:async';
- import 'dart:convert';
- import 'package:web_socket_channel/web_socket_channel.dart';
- import '../pages/play/live_id.dart';
- class WebSocketManager {
- static final WebSocketManager _instance = WebSocketManager._internal();
-
- WebSocketManager._internal();
-
- static WebSocketManager getInstance() {
- return _instance;
- }
-
- WebSocketChannel? _channel;
- bool _isConnected = false;
- int _heartbeatInterval = 30000;
- Timer? _heartbeatTimer;
- Future<void> connect() async {
- print('_channel${_channel}');
- if (_channel != null) {
- return; // 连接已建立,直接返回
- }
-
- final url= 'ws://你自己的url';
-
- try {
- _channel = await WebSocketChannel.connect(Uri.parse(url));
- print('_channel_channel_channel_channel${_channel}');
- _channel?.stream.listen((data) {
- _onMessage(data);
- }, onError: (error) {
- _onConnectionFailed(error);
- }, onDone: () {
- _onConnectionClosed();
- });
-
- _startHeartbeat();
-
- _isConnected = true;
- _onConnectionSuccess();
- } catch (e) {
- _onConnectionFailed(e);
- }
- }
-
- void sendJoinGroupChat(String groupId) {
- if (_isConnected) {
- Map<String, dynamic> joinMessage = {
- "type": "joinGroupChat",
- "groupId": groupId,
- };
- var json = jsonEncode(joinMessage);
- _channel?.sink.add(json);
- }
- }
-
- void exitGroupChat(String groupId) {
- if (_isConnected) {
- Map<String, dynamic> joinMessage = {
- "type": "exitGroupChat",
- "groupId": groupId,
- };
- var json = jsonEncode(joinMessage);
- _channel?.sink.add(json);
- }
- }
-
- void sendGroupMessage(String groupId, String contentText) {
- print('_isConnected${_isConnected}');
-
- if (_isConnected) {
- Map<String, dynamic> message = {
- "type": "sendGroupMsg",
- "groupId": groupId,
- "contentText": contentText,
- };
- var json = jsonEncode(message);
- _channel?.sink.add(json);
- }
- }
-
- void disconnect() {
- _channel?.sink.close();
- _heartbeatTimer?.cancel();
- _isConnected = false;
- }
-
- void _onConnectionSuccess() {
- homeG.webscoket = true;
- print("连接成功");
- }
-
- void _onMessage(dynamic data) {
- if (_isConnected) {
- Map<String, dynamic> remessage = {
- "type": "receiveGroupMsg",
- };
- // _channel?.sink.add(remessage.toString());
- var json = jsonEncode(remessage);
- _channel?.sink.add(json);
- }
- print("收到消息:$data");
- // 在这里处理接收到的消息
- }
-
- void _onConnectionFailed(dynamic error) {
- print("连接失败:$error");
- // 重连
- Future.delayed(Duration(seconds: 3), () {
- // connect(_channel?.url?.origin ?? "", "staffid");
- connect();
- });
- }
-
- void _onConnectionClosed() {
- homeG.webscoket = false;
- print("连接关闭");
- }
-
- void _startHeartbeat() {
- _heartbeatTimer =
- Timer.periodic(Duration(milliseconds: _heartbeatInterval), (timer) {
- sendHeartbeat();
- });
- }
-
- void sendHeartbeat() {
- if (_isConnected) {
- Map<String, dynamic> heartbeatMessage = {
- "type": "heart",
- };
- // _channel?.sink.add(heartbeatMessage.toString());
- var json = jsonEncode(heartbeatMessage);
- _channel?.sink.add(json);
- }
- }
- }
需要用jsonEncode编码一下成json类型传给后端
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。