File size: 1,749 Bytes
7c7b2d5
 
 
f21ac8b
7c7b2d5
 
 
 
 
 
 
 
 
 
f21ac8b
7c7b2d5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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);
    
  } 
}