Пример #1
0
  public void start() {
    if (isRunning) throw new IllegalStateException("Client is already started.");

    // Start up the threads and stuff
    if (reliableAdapter != null) {
      reliableAdapter.start();
    }
    if (fastAdapter != null) {
      fastAdapter.start();
    }

    // Send our connection message with a generated ID until
    // we get one back from the server.  We'll hash time in
    // millis and time in nanos.
    // This is used to match the TCP and UDP endpoints up on the
    // other end since they may take different routes to get there.
    // Behind NAT, many game clients may be coming over the same
    // IP address from the server's perspective and they may have
    // their UDP ports mapped all over the place.
    //
    // Since currentTimeMillis() is absolute time and nano time
    // is roughtly related to system start time, adding these two
    // together should be plenty unique for our purposes.  It wouldn't
    // hurt to reconcile with IP on the server side, though.
    long tempId = System.currentTimeMillis() + System.nanoTime();

    // Set it true here so we can send some messages.
    isRunning = true;

    ClientRegistrationMessage reg;
    if (reliable != null) {
      reg = new ClientRegistrationMessage();
      reg.setId(tempId);
      reg.setGameName(getGameName());
      reg.setVersion(getVersion());
      reg.setReliable(true);
      send(reg, false);
    }
    if (fast != null) {
      // We create two different ones to prepare for someday
      // when there will probably be threaded sending.
      reg = new ClientRegistrationMessage();
      reg.setId(tempId);
      reg.setReliable(false);
      send(reg, false);
    }
  }