anchor.diff:    bool loggedin = false;
     String loginName = "Nobody";
   
  +  List<TableView> tableViews;
  +
     Tarabish();
   
     // Lazy start socket on first login
     _setup_socket() {
       if (_tsocket == null) {
         _tsocket = new TarabishSocket("ws://localhost:42745/websocket");
  +      _tsocket.subscribe("valid_login", (e) => loginName = e);
  +      _tsocket.subscribe("tables", (e) => tableViews = e);
       }
     }
   
  
positive.code:       return;
      }
      if (message['type'] == "tables") {
        print ("Received tables message, parsing");
        for (var table in message['tables']) {
          var view = new TableView.from_json(table);
          print ("$view");
        }
  
      } else if (message['type'] != null) {
        var type = message['type'];
        print("Received message with type $type");
        print("Message: $message");
        // TODO: handle
      }
    }
  }
  
  
negative.code: import 'dart:json' as json;
  import 'package:web_ui/web_ui.dart';
  
  typedef void MessageCallback(dynamic data);
  
  class TarabishSocket {
    // TODO: add logged_in
  