1 package org
.asamk
.signal
.manager
;
3 import org
.asamk
.signal
.manager
.config
.ServiceEnvironment
;
4 import org
.slf4j
.Logger
;
5 import org
.slf4j
.LoggerFactory
;
8 import java
.io
.IOException
;
9 import java
.util
.Collection
;
10 import java
.util
.HashSet
;
11 import java
.util
.List
;
13 import java
.util
.function
.Consumer
;
14 import java
.util
.stream
.Collectors
;
16 public class MultiAccountManagerImpl
implements MultiAccountManager
{
18 private final static Logger logger
= LoggerFactory
.getLogger(MultiAccountManagerImpl
.class);
20 private final Set
<Consumer
<Manager
>> onManagerAddedHandlers
= new HashSet
<>();
21 private final Set
<Consumer
<Manager
>> onManagerRemovedHandlers
= new HashSet
<>();
22 private final Set
<Manager
> managers
= new HashSet
<>();
23 private final File dataPath
;
24 private final ServiceEnvironment serviceEnvironment
;
25 private final String userAgent
;
27 public MultiAccountManagerImpl(
28 final Collection
<Manager
> managers
,
30 final ServiceEnvironment serviceEnvironment
,
31 final String userAgent
33 this.managers
.addAll(managers
);
34 this.dataPath
= dataPath
;
35 this.serviceEnvironment
= serviceEnvironment
;
36 this.userAgent
= userAgent
;
40 public List
<String
> getAccountNumbers() {
41 synchronized (managers
) {
42 return managers
.stream().map(Manager
::getSelfNumber
).collect(Collectors
.toList());
46 void addManager(final Manager m
) {
47 synchronized (managers
) {
48 if (managers
.contains(m
)) {
53 synchronized (onManagerAddedHandlers
) {
54 for (final var handler
: onManagerAddedHandlers
) {
61 public void addOnManagerAddedHandler(final Consumer
<Manager
> handler
) {
62 synchronized (onManagerAddedHandlers
) {
63 onManagerAddedHandlers
.add(handler
);
68 public void addOnManagerRemovedHandler(final Consumer
<Manager
> handler
) {
69 synchronized (onManagerRemovedHandlers
) {
70 onManagerRemovedHandlers
.add(handler
);
75 public Manager
getManager(final String account
) {
76 synchronized (managers
) {
77 return managers
.stream().filter(m
-> m
.getSelfNumber().equals(account
)).findFirst().orElse(null);
82 public ProvisioningManager
getNewProvisioningManager() {
83 return ProvisioningManager
.init(dataPath
, serviceEnvironment
, userAgent
, this::addManager
);
87 public RegistrationManager
getNewRegistrationManager(String account
) throws IOException
{
88 return RegistrationManager
.init(account
, dataPath
, serviceEnvironment
, userAgent
, this::addManager
);
93 synchronized (managers
) {
94 for (var m
: managers
) {
97 } catch (IOException e
) {
98 logger
.warn("Cleanup failed", e
);