if (line.startsWith("NICKINUSE")) {
socketOut.println("NICK " + Controller.getAlternateNick());
} else {
Controller.getInstance().dispatchEvent(
new ReceivedLineFromServerEvent(line));
}
Logger.info(this, "Requesting user list.");
Controller.getInstance().dispatchEvent(
new OutputTextEvent(Localizor.getInstance().get(
"REQUEST_USER_LIST"), Formatter.getInfoFormat()));
socketOut.println("LIST");
// Start ping thread that checks that the server is alive.
pingThread = new Thread("PingThread") {
@Override
public void run() {
super.run();
EventObserver<PongEvent> pongObserver = new EventObserver<PongEvent>() {
@Override
public void inform(PongEvent event) {
// Do nothing as we know that the connection is alive.
}
};
Controller.getInstance()
.register(PongEvent.class, pongObserver);
while (!killed) {
send("PING");
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
// It doesn not matter if we check too often.
}
}
Controller.getInstance().deregister(PongEvent.class,
pongObserver);
}
};
pingThread.start();
// Start new thread that reads from socket in background.
new Thread("ReadServerThread") {
@Override
public void run() {
super.run();
String line;
try {
while ((line = socketIn.readLine()) != null) {
String decLine = line;
synchronized (cryptoLock) {
if (crypto != null) {
try {
Logger.debug(Connection.class, "Trying to "
+ "decrypt »" + line + "«.");
decLine = crypto.decrypt(line);
Logger.debug(Connection.class, "Text "
+ "decrypted.");
} catch (IllegalBlockSizeException e) {
Logger.error(Connection.class, "A fatal "
+ "error occurred while "
+ "decrypting ("
+ e.getLocalizedMessage() + ")!");
Controller.getInstance().dispatchEvent(
new QuitEvent());
return;
} catch (BadPaddingException e) {
Logger.error(Connection.class, "A fatal "
+ "error occurred while "
+ "decrypting ("
+ e.getLocalizedMessage() + ")!");
Controller.getInstance().dispatchEvent(
new QuitEvent());
return;
}
}
}
Controller.getInstance().dispatchEvent(
new ReceivedLineFromServerEvent(decLine));
}
} catch (IOException e) {
deregisterEventObservers();
connection = null;