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.JOptionPane;
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.PacketRegister;
import kubach.packet.PacketRegistered;
import kubach.packet.PacketRequestCaptcha;
import kubach.workers.RegisterUserWorker.RegistrationState;
/**
* Sends registration request and checks server answer
*
* @author Cr0s
*/
public class RegisterUserWorker extends SwingWorker<Void, RegistrationState> {
public String login, password, key, ans;
public CaptchaPanel cp;
public RegisterUserWorker(CaptchaPanel cp, String username, String password, String key, String text) {
this.cp = cp;
this.login = username;
this.password = password;
this.key = key;
this.ans = text;
}
@Override
protected Void doInBackground() throws Exception {
Client loginClient = new Client(4096 * 2, 4096 * 2);
loginClient.getKryo().register(PacketLogin.class);
loginClient.getKryo().register(PacketLoginResponse.class);
loginClient.getKryo().register(PacketRequestCaptcha.class);
loginClient.getKryo().register(PacketCaptchaImage.class);
loginClient.getKryo().register(byte[].class);
loginClient.getKryo().register(PacketRegister.class);
loginClient.getKryo().register(PacketRegistered.class);
loginClient.addListener(new Listener() {
@Override
public void received(Connection connection, Object object) {
if (object instanceof PacketCaptchaImage) {
PacketCaptchaImage response = (PacketCaptchaImage) object;
System.out.println("Invalid captcha, new: " + response.toString());
publish(new RegistrationState(response));
connection.close();
} else if (object instanceof PacketRegistered) {
PacketRegistered response = (PacketRegistered) object;
System.out.println("Registered: " + response.toString());
publish(new RegistrationState(true));
connection.close();
}
}
});
loginClient.start();
try {
loginClient.connect(5000, Constants.SERVER_HOST, Constants.SERVER_PORT);
PacketRegister pr = new PacketRegister();
pr.username = login;
pr.password = password;
pr.captchaKey = key;
pr.captchaAnswer = ans;
loginClient.sendTCP(pr);
} catch (Exception e) {
e.printStackTrace();
return null;
}
return null;
}
class RegistrationState {
public PacketCaptchaImage p;
public boolean isSuccess;
public RegistrationState(boolean isSuccess) {
this.isSuccess = isSuccess;
}
public RegistrationState(PacketCaptchaImage p) {
this.p = p;
}
}
@Override
protected void process(List<RegistrationState> l) {
for (RegistrationState ls : l) {
if (ls.isSuccess) {
this.cp.setVisible(false);
JOptionPane.showMessageDialog(cp, "Username successfully registered", "Success", JOptionPane.INFORMATION_MESSAGE, null);
this.cp.mf.cancelRegistration();
return;
}
this.cp.loadCaptchaImage(ls.p);
}
}
}