예제 #1
0
  @Override
  public void messageReceived(Object message) throws IOException {
    LoginRequest request = (LoginRequest) message;
    if (request.getServerSessionKey() != serverSessionKey)
      throw new IOException("Server session key mismatch.");

    boolean versionMismatch = false;
    if (request.getVersion() != server.getVersion()) versionMismatch = true;

    ChecksumTable table = server.getChecksumTable();
    int[] crc = request.getCrc();
    for (int i = 0; i < crc.length; i++) {
      if (table.getEntry(i).getCrc() != crc[i]) {
        versionMismatch = true;
        break;
      }
    }

    if (versionMismatch) {
      sendLoginFailure(LoginResponse.STATUS_GAME_UPDATED);
      return;
    }

    long clientSessionKey = request.getClientSessionKey();
    long serverSessionKey = request.getServerSessionKey();
    int[] seed = new int[4];
    seed[0] = (int) (clientSessionKey >> 32);
    seed[1] = (int) clientSessionKey;
    seed[2] = (int) (serverSessionKey >> 32);
    seed[3] = (int) serverSessionKey;

    inRandom = new IsaacRandom(seed);
    for (int i = 0; i < seed.length; i++) seed[i] += 50;
    outRandom = new IsaacRandom(seed);
    displayMode = request.getDisplayMode();

    service.addLoginRequest(this, request);
  }