package com.example.mina.client.base; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.util.Assert; import java.util.Collections; import java.util.Map; import java.util.Set; @Component @Slf4j public class ClientManager { private Map clientFactories; private Map clients; public ClientManager() { this.clients = Collections.emptyMap(); } public void setClientFactories(Map clientFactories) { this.clientFactories = clientFactories; } public Set getSupportedMatrix() { return this.clientFactories.keySet(); } public T getClientFactory(String name) { return this.clientFactories.get(name); } public MatrixClient getOrCreateClient(MatrixConnectConfig connectConfig) { Assert.notNull(connectConfig, "matrix connect config is null"); Assert.hasLength(connectConfig.getDeviceId(), "deviceId can not be empty"); String deviceId = connectConfig.getDeviceId(); if(clients.containsKey(deviceId)) { return clients.get(deviceId); } String deviceType = connectConfig.getDeviceType(); //check the device type is supported by system T clientFactory = getClientFactory(deviceType); if(clientFactory == null) { log.error("the matrix type is not supported by the system! matrix type is: " + deviceType); throw new RuntimeException("the matrix type is not supported by the system! matrix type is: " + deviceType); } MatrixClient client = clientFactory.createClient(connectConfig); clients.put(deviceId, client); return client; } }