Move presence init server to user list

This commit is contained in:
Arnaud Vergnet 2021-01-07 15:02:03 +01:00
parent 2929211c85
commit 7a36ef2c60
4 changed files with 45 additions and 35 deletions

View file

@ -2,7 +2,6 @@ package fr.insa.clavardator.server;
import fr.insa.clavardator.network.PeerConnection; import fr.insa.clavardator.network.PeerConnection;
import java.net.InetAddress;
import java.util.ArrayList; import java.util.ArrayList;
public interface Presence { public interface Presence {

View file

@ -249,38 +249,14 @@ public class MainController implements Initializable {
* then init current user, and finally load user list. * then init current user, and finally load user list.
*/ */
private void initBackend() { private void initBackend() {
ConfigLoader.load((Config config) -> { ConfigLoader.load(
initPresenceServer(config); (Config config) -> new DatabaseController().initTables(
new DatabaseController().initTables(
() -> userList.retrievedPreviousUsers( () -> userList.retrievedPreviousUsers(
() -> currentUser.init(this::onInitError), () -> currentUser.init(
() -> userList.initPresenceServer(config),
this::onInitError),
this::onInitError this::onInitError
), this::onInitError); ), this::onInitError));
});
}
/**
* Initializes the presence server based on user config
*
* @param config The user config
*/
private void initPresenceServer(Config config) {
final Config.ServerConfig serverConfig = config.getServerConfig();
if (serverConfig.isEnabled()) {
try {
final PresenceType type = serverConfig.getType();
final String uri = serverConfig.getUri();
final int presencePort = serverConfig.getPresencePort();
final int proxyPort = serverConfig.getProxyPort();
presenceServer = PresenceFactory.create(type, uri, presencePort, proxyPort);
Log.v("INIT", "Presence server support enabled: " + type + "@" + uri + ':' + presencePort + " / proxy:" + proxyPort);
} catch (UnknownPresenceException e) {
Log.e("INIT", "Presence server type not found", e);
presenceServer = null;
}
} else {
Log.v("INIT", "Presence server support disabled.");
}
} }
/** /**

View file

@ -29,7 +29,7 @@ public class CurrentUser extends User {
return UUID.randomUUID().toString(); return UUID.randomUUID().toString();
} }
public void init(ErrorCallback errorCallback) { public void init(InitCallback callback, ErrorCallback errorCallback) {
final DatabaseController db = new DatabaseController(); final DatabaseController db = new DatabaseController();
db.getCurrentUser((user) -> { db.getCurrentUser((user) -> {
if (user == null) { if (user == null) {
@ -37,7 +37,10 @@ public class CurrentUser extends User {
Log.v(getClass().getSimpleName(), "No previous user found, generating id: " + id); Log.v(getClass().getSimpleName(), "No previous user found, generating id: " + id);
db.addCurrentUser( db.addCurrentUser(
new UserInformation(this), new UserInformation(this),
() -> setState(State.NONE), () -> {
setState(State.NONE);
callback.onFinish();
},
errorCallback); errorCallback);
} else { } else {
id = user.id; id = user.id;
@ -48,6 +51,7 @@ public class CurrentUser extends User {
Log.v(getClass().getSimpleName(), "No username found, asking user"); Log.v(getClass().getSimpleName(), "No username found, asking user");
setState(State.NONE); setState(State.NONE);
} }
callback.onFinish();
} }
}, errorCallback); }, errorCallback);
} }

View file

@ -1,9 +1,14 @@
package fr.insa.clavardator.users; package fr.insa.clavardator.users;
import fr.insa.clavardator.config.Config;
import fr.insa.clavardator.db.DatabaseController; import fr.insa.clavardator.db.DatabaseController;
import fr.insa.clavardator.network.ConnectionListener; import fr.insa.clavardator.network.ConnectionListener;
import fr.insa.clavardator.network.NetDiscoverer; import fr.insa.clavardator.network.NetDiscoverer;
import fr.insa.clavardator.network.PeerHandshake; import fr.insa.clavardator.network.PeerHandshake;
import fr.insa.clavardator.server.Presence;
import fr.insa.clavardator.server.PresenceFactory;
import fr.insa.clavardator.server.PresenceType;
import fr.insa.clavardator.server.UnknownPresenceException;
import fr.insa.clavardator.util.ErrorCallback; import fr.insa.clavardator.util.ErrorCallback;
import fr.insa.clavardator.util.Log; import fr.insa.clavardator.util.Log;
import javafx.application.Platform; import javafx.application.Platform;
@ -24,6 +29,8 @@ public class UserList {
private final NetDiscoverer netDiscoverer = new NetDiscoverer(); private final NetDiscoverer netDiscoverer = new NetDiscoverer();
private final ConnectionListener connectionListener = new ConnectionListener(); private final ConnectionListener connectionListener = new ConnectionListener();
private Presence presenceServer;
public UserList() { public UserList() {
} }
@ -125,6 +132,30 @@ public class UserList {
userHashmap.forEach((id, user) -> user.sendCurrentUser(Throwable::printStackTrace)); userHashmap.forEach((id, user) -> user.sendCurrentUser(Throwable::printStackTrace));
} }
/**
* Initializes the presence server based on user config
*
* @param config The user config
*/
public void initPresenceServer(Config config) {
final Config.ServerConfig serverConfig = config.getServerConfig();
if (serverConfig.isEnabled()) {
try {
final PresenceType type = serverConfig.getType();
final String uri = serverConfig.getUri();
final int presencePort = serverConfig.getPresencePort();
final int proxyPort = serverConfig.getProxyPort();
presenceServer = PresenceFactory.create(type, uri, presencePort, proxyPort);
Log.v(getClass().getSimpleName(), "Presence server support enabled: " + type + "@" + uri + ':' + presencePort + " / proxy:" + proxyPort);
} catch (UnknownPresenceException e) {
Log.e(getClass().getSimpleName(), "Presence server type not found", e);
presenceServer = null;
}
} else {
Log.v(getClass().getSimpleName(), "Presence server support disabled.");
}
}
/** /**
* Closes all running threads, sockets and db connection. * Closes all running threads, sockets and db connection.
* Must be called before exiting the app. * Must be called before exiting the app.