Spaces:
Sleeping
Sleeping
| import 'package:web_socket_channel/web_socket_channel.dart'; | |
| import 'package:web_socket_channel/status.dart' as status; | |
| class CustomWSChannel{ | |
| late WebSocketChannel channel; | |
| bool webSocketConnected=false; | |
| int reconnectAttempts=0; | |
| String serverUrl; | |
| late Uri serverUri; | |
| int delay; | |
| void Function(dynamic) onMessage; | |
| void Function(String,dynamic) onErrorShowMessage; | |
| CustomWSChannel(this.serverUrl,{this.delay=5,required this.onMessage,required this.onErrorShowMessage}){ | |
| serverUri=Uri.parse(serverUrl); | |
| connect(); | |
| } | |
| get sink => channel.sink; | |
| get ready =>channel.ready; | |
| Future<bool> isConnected() async{ | |
| try{ | |
| await channel.ready; | |
| return true; | |
| } | |
| catch(e){ | |
| debugFn("we are not connected"); | |
| return false; | |
| } | |
| } | |
| void onDone() async{ | |
| debugFn("Reconnecting in $delay seconds, attempt $reconnectAttempts "); | |
| webSocketConnected=false; | |
| // channel = null; | |
| channel.sink.close(status.goingAway); // close old connection | |
| await Future.delayed(Duration(seconds: delay)); | |
| connect(); | |
| } | |
| void onError(error){ | |
| debugFn("Error while connecting.",e:error); | |
| reconnectAttempts += 1; | |
| } | |
| void connect() async{ | |
| try{ | |
| channel=WebSocketChannel.connect( | |
| serverUri | |
| ); | |
| channel.stream.listen(onMessage, onDone:onDone, onError:onError); | |
| // channel.stream.listen(onMessage, onError:onError); | |
| await channel.ready; | |
| debugFn("connected"); | |
| } | |
| catch(e){ | |
| debugFn("can't connect to the server",e:e); | |
| } | |
| } | |
| void debugFn(String s,{e=""}){ | |
| // print("space"); | |
| // print("Custom Message:"+s); | |
| // print("Custom Error:"+e.toString()); | |
| onErrorShowMessage(s,e); | |
| } | |
| } |