@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); }