package kubach.workers; import com.esotericsoftware.kryonet.Client; import com.esotericsoftware.kryonet.Connection; import com.esotericsoftware.kryonet.Listener; import java.util.List; import javax.swing.SwingWorker; import kubach.Constants; import kubach.gui.CaptchaPanel; import kubach.packet.PacketCaptchaImage; import kubach.packet.PacketLogin; import kubach.packet.PacketLoginResponse; import kubach.packet.PacketRequestCaptcha; import kubach.workers.LoadCaptchaWorker.CaptchaImageState; /** * Sends auth request and checks result * * @author Cr0s */ public class LoadCaptchaWorker extends SwingWorker<Void, CaptchaImageState> { public String login, password; public CaptchaPanel cp; public LoadCaptchaWorker(CaptchaPanel cp, String login, String password) { this.cp = cp; this.login = login; this.password = password; } @Override protected Void doInBackground() throws Exception { Client loginClient = new Client(4096 * 2, 4096 * 2); loginClient.getKryo().setRegistrationRequired(false); loginClient.getKryo().register(PacketLogin.class); loginClient.getKryo().register(PacketLoginResponse.class); loginClient.getKryo().register(PacketRequestCaptcha.class); loginClient.getKryo().register(PacketCaptchaImage.class); loginClient.addListener(new Listener() { @Override public void received(Connection connection, Object object) { if (object instanceof PacketCaptchaImage) { PacketCaptchaImage response = (PacketCaptchaImage) object; System.out.println("Captcha: " + response.toString()); publish(new CaptchaImageState(response)); connection.close(); } } }); loginClient.start(); try { loginClient.connect(5000, Constants.SERVER_HOST, Constants.SERVER_PORT); PacketRequestCaptcha prc = new PacketRequestCaptcha(); prc.username = login; prc.password = password; loginClient.sendTCP(prc); } catch (Exception e) { PacketCaptchaImage response = new PacketCaptchaImage(); response.hasCaptcha = false; response.key = e.toString(); publish(new CaptchaImageState(response)); e.printStackTrace(); return null; } return null; } class CaptchaImageState { public PacketCaptchaImage p; public CaptchaImageState(PacketCaptchaImage p) { this.p = p; } } @Override protected void process(List<CaptchaImageState> l) { for (CaptchaImageState ls : l) { this.cp.loadCaptchaImage(ls.p); } } }