anchor.diff:  
     WebSocketRails(this.url);
   
  -  Stream<WsEvent> get onOpen => onOpenController.stream;
  +  //TODO: implement own streams
  +  Stream get onOpen => connection.onOpen.stream;
  +  Stream get onClose => connection.onClose.stream;
   
     connect() {
       if(connection == null) {
  
positive.code:     if(eventControllers[e.name] != null) eventControllers[e.name].add(e.data);
    }
  
    Channel subscribe(String name) {
      return _subscribe(name, false);
    }
  
    Channel subscribe_private(String name) {
      return _subscribe(name, true);
    }
  
    Channel _subscribe(String name, bool private) {
      if(channels[name] == null) {
        Channel c = channels[name] = new Channel(name, private);
        connection.trigger(c.getSubscriptionEvent());
        return c;
      } else {
        return channels[name];
      }
    }
  
    unsubscribe(String name) {
      if(channels[name] != null) {
        channels[name].destroy();
        channels.remove(name);
      }
    }
  
    _dispatchChannel(WsChannel e) {
      if(channels[e.channel] != null)
        channels[e.channel].dispatch(e);
    }
  
    connectionStale() {
      state != STATE_CONNECTED;
    }
  
    reconnectChannels() {
      channels.forEach((String name, Channel c) {
        //TODO:
        /*
              callbacks = channel._callbacks
              channel.destroy()
              delete @channels[name]
              channel = if channel.is_private
                @subscribe_private name
              else
                @subscribe name
              channel._callbacks = callbacks
              channel
               */
      });
    }
  }
  
negative.code:   String url;
    int state;
    WebSocketConnection connection;
    Map<String, Channel> _channels = {};
    Map<int, WsEvent> _eventQueue = {};
    Map<int, Completer> _eventQueueCompleter = {};
  
  
    static const int STATE_DISCONNECTED = 0;
    static const int STATE_CONNECTING = 1;
  