Latest non-working version

This commit is contained in:
Paul Schaub 2020-05-23 12:01:31 +02:00
parent 10ed534876
commit 272924643c
Signed by: vanitasvitae
GPG Key ID: 62BEE9264BF17311
7 changed files with 57 additions and 34 deletions

View File

@ -1,6 +1,7 @@
package org.mercury_im.messenger.ui.account;
import android.app.Application;
import android.util.Log;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
@ -63,11 +64,12 @@ public class AccountsViewModel extends AndroidViewModel {
MercuryConnection connection = messenger.getConnectionManager().getConnection(accountModel);
if (connection != null) {
if (enabled) {
connection.connect()
compositeDisposable.add(connection.connect()
.andThen(connection.login())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
.subscribe(() -> Log.d("Mercury-IM", "Login successful for " + accountModel.getAddress()),
e -> Log.e("Mercury-IM", "Connecting failed.", e)));
} else {
connection.shutdown();
}

View File

@ -1,6 +1,7 @@
package org.mercury_im.messenger.ui.account;
import android.app.Application;
import android.util.Log;
import android.widget.Toast;
import androidx.annotation.NonNull;
@ -95,7 +96,8 @@ public class LoginViewModel extends AndroidViewModel {
.observeOn(AndroidSchedulers.mainThread())
.doOnComplete(this::signalLoginSuccessful)
.doOnError(this::signalLoginError)
.subscribe());
.subscribe(() -> Log.d("Mercury-IM", "Login successful for " + account.getAddress()),
e -> Log.e("Mercury-IM", "Login failed for " + account.getAddress(), e)));
}
private void signalLoginSuccessful() {

View File

@ -13,6 +13,7 @@ import org.mercury_im.messenger.xmpp.state.ConnectionState;
import org.mercury_im.messenger.xmpp.state.ConnectivityState;
import java.io.IOException;
import java.rmi.server.ExportException;
import java.util.UUID;
import java.util.logging.Logger;
@ -39,6 +40,7 @@ public class MercuryConnection {
this.state = BehaviorSubject.createDefault(new ConnectionState(account.getId(), this,
ConnectivityState.disconnected, false, false));
connection.addConnectionListener(connectionListener);
}
public UUID getAccountId() {
@ -75,7 +77,7 @@ public class MercuryConnection {
return Completable.fromAction(this::doLogin);
}
private void doLogin() throws InvalidCredentialsException, ServerUnreachableException {
private void doLogin() throws InvalidCredentialsException {
try {
((AbstractXMPPConnection) getConnection()).login();
} catch (SASLErrorException e) {

View File

@ -3,11 +3,7 @@ package org.mercury_im.messenger.xmpp;
import org.jivesoftware.smack.AbstractXMPPConnection;
import org.jivesoftware.smack.ReconnectionListener;
import org.jivesoftware.smack.ReconnectionManager;
import org.jivesoftware.smack.sm.packet.StreamManagement;
import org.jivesoftware.smackx.caps.EntityCapsManager;
import org.jivesoftware.smackx.iqversion.VersionManager;
import org.jivesoftware.smackx.receipts.DeliveryReceiptManager;
import org.jivesoftware.smackx.sid.StableUniqueStanzaIdManager;
import org.mercury_im.messenger.data.repository.AccountRepository;
import org.mercury_im.messenger.data.repository.Repositories;
import org.mercury_im.messenger.entity.Account;
@ -41,29 +37,19 @@ public class MercuryConnectionManager {
private static final Logger LOGGER = Logger.getLogger("ConnectionManager");
private static final XmppConnectionFactory connectionFactory = new XmppConnectionFactory();
private final Map<UUID, MercuryConnection> connections = new ConcurrentHashMap<>();
private final Map<UUID, Disposable> connectionDisposables = new ConcurrentHashMap<>();
private final BehaviorSubject<ConnectionPoolState> stateObservable =
BehaviorSubject.createDefault(new ConnectionPoolState());
private final AccountRepository accountRepository;
private final RosterStoreBinder rosterStoreBinder;
private final MercuryEntityCapsStore entityCapsStore;
private final Map<UUID, MercuryConnection> connectionsMap = new ConcurrentHashMap<>();
private final Map<UUID, Disposable> connectionDisposables = new ConcurrentHashMap<>();
private final BehaviorSubject<ConnectionPoolState> connectionPoolObservable =
BehaviorSubject.createDefault(new ConnectionPoolState());
private final CompositeDisposable disposable = new CompositeDisposable();
static {
ReconnectionManager.setEnabledPerDefault(true);
ReconnectionManager.setDefaultReconnectionPolicy(ReconnectionManager.ReconnectionPolicy.RANDOM_INCREASING_DELAY);
VersionManager.setAutoAppendSmackVersion(false);
VersionManager.setDefaultVersion("Mercury-IM", "0.0.1-little-joe");
DeliveryReceiptManager.setDefaultAutoReceiptMode(DeliveryReceiptManager.AutoReceiptMode.ifIsSubscribed);
StableUniqueStanzaIdManager.setEnabledByDefault(true);
SmackConfig.staticConfiguration();
}
@Inject
@ -75,14 +61,20 @@ public class MercuryConnectionManager {
this.entityCapsStore = entityCapsStore;
EntityCapsManager.setPersistentCache(entityCapsStore);
start();
}
public void start() {
accountRepository.observeAllAccounts()
.subscribe(accounts -> registerConnections(accounts));
}
public List<MercuryConnection> getConnections() {
return new ArrayList<>(connections.values());
return new ArrayList<>(connectionsMap.values());
}
public Observable<ConnectionPoolState> observeConnectionPool() {
return stateObservable;
return connectionPoolObservable;
}
@ -91,7 +83,7 @@ public class MercuryConnectionManager {
}
public MercuryConnection getConnection(UUID id) {
return connections.get(id);
return connectionsMap.get(id);
}
public MercuryConnection createConnection(Account account) {
@ -100,7 +92,7 @@ public class MercuryConnectionManager {
public void registerConnections(List<Account> accounts) {
for (Account account : accounts) {
if (!connections.containsKey(account.getId())) {
if (!connectionsMap.containsKey(account.getId())) {
MercuryConnection connection = createConnection(account);
registerConnection(connection);
}
@ -119,9 +111,9 @@ public class MercuryConnectionManager {
}
private void putConnection(MercuryConnection connection) {
connections.put(connection.getAccountId(), connection);
connectionsMap.put(connection.getAccountId(), connection);
connectionDisposables.put(connection.getAccountId(), connection.observeConnection().subscribe(s ->
stateObservable.onNext(updatePoolState(stateObservable.getValue(), s))));
connectionPoolObservable.onNext(updatePoolState(connectionPoolObservable.getValue(), s))));
bindConnection(connection);
}
@ -195,14 +187,14 @@ public class MercuryConnectionManager {
private void removeConnection(MercuryConnection connection) {
LOGGER.log(Level.FINER, "Remove Connection: " + connection.getAccountId());
connections.remove(connection.getAccountId());
connectionsMap.remove(connection.getAccountId());
connectionDisposables.remove(connection.getAccountId()).dispose();
stateObservable.onNext(updatePoolState(stateObservable.getValue()));
connectionPoolObservable.onNext(updatePoolState(connectionPoolObservable.getValue()));
}
private ConnectionPoolState updatePoolState(ConnectionPoolState value) {
Map<UUID, ConnectionState> states = value.getConnectionStates();
for (UUID id : connections.keySet()) {
for (UUID id : connectionsMap.keySet()) {
if (!states.containsKey(id)) {
states.remove(id);
}

View File

@ -0,0 +1,21 @@
package org.mercury_im.messenger.xmpp;
import org.jivesoftware.smack.ReconnectionManager;
import org.jivesoftware.smackx.iqversion.VersionManager;
import org.jivesoftware.smackx.receipts.DeliveryReceiptManager;
import org.jivesoftware.smackx.sid.StableUniqueStanzaIdManager;
public class SmackConfig {
static void staticConfiguration() {
ReconnectionManager.setEnabledPerDefault(true);
ReconnectionManager.setDefaultReconnectionPolicy(ReconnectionManager.ReconnectionPolicy.RANDOM_INCREASING_DELAY);
VersionManager.setAutoAppendSmackVersion(false);
VersionManager.setDefaultVersion("Mercury-IM", "0.0.1-little-joe");
DeliveryReceiptManager.setDefaultAutoReceiptMode(DeliveryReceiptManager.AutoReceiptMode.ifIsSubscribed);
StableUniqueStanzaIdManager.setEnabledByDefault(true);
}
}

View File

@ -15,4 +15,8 @@ public class Account {
String host;
int port;
boolean enabled;
public Account() {
this.id = UUID.randomUUID();
}
}

@ -1 +1 @@
Subproject commit f00acbff891ba0edd0a51e7147e0e07d0de7e4b5
Subproject commit 5bfe789e08ebb251b3c4302cb653c715eee363ea