anchor.diff:    var url = window.location.toString();
     window.open(url, "_blank");
   }
  +
  +const int CLUBS = 1;
  +const int DIAMONDS = 2;
  +const int SPADES = 3;
  +const int HEARTS = 4;
   
   typedef void MessageCallback(dynamic data);
   
  
positive.code:       table.recv_part(message['seat'], message['name']);
      } else if (message['type'] == "you_part") {
        table.recv_you_part();
      } else if (message['type'] != null) {
        var type = message['type'];
        print("Received message with type $type");
  
negative.code:   new_game() {
      var start = mkmsg("start_game", {"table_id": id});
      tsocket.send(json.stringify(start));
    }
  
    recv_deal(new_dealer, new_cards) {
      cards.addAll(new_cards);
      dealer = new_dealer;
      print("Received new dealer $dealer and cards $new_cards");
    }
  }
  
  class Card {
    int value;
    int suit;
  
    Card(this.value, this.suit);
  
    factory Card.from_json(json) {
      var value = json['value'];
      var suit = json['suit'];
      return new Card(value, suit);
    }
  
    String toString() {
      return "Card v: $value s: $suit";
    }
  }
  
  