帆软报表设计器源代码。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

113 lines
4.0 KiB

package com.fr.design.login.socketio;
import com.fr.cbb.websocket.core.WebSocketAckRequest;
import com.fr.cbb.websocket.core.WebSocketClientProvider;
import com.fr.cbb.websocket.core.WebSocketConfiguration;
import com.fr.cbb.websocket.core.WebSocketServerProvider;
import com.fr.cbb.websocket.holder.EventHolder;
import com.fr.cbb.websocket.listener.AbstractDataListener;
import com.fr.cbb.websocket.core.WebSocketServerFactory;
import com.fr.concurrent.NamedThreadFactory;
import com.fr.design.DesignerEnvManager;
import com.fr.design.login.DesignerLoginType;
import com.fr.design.login.bean.BBSAccountLogin;
import com.fr.design.upm.event.CertificateEvent;
import com.fr.event.EventDispatcher;
import com.fr.log.FineLoggerFactory;
import java.net.URLDecoder;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* @author Lanlan
* @version 10.0
* Created by Lanlan on 2021/6/3
*/
public class LoginAuthServer {
private AtomicBoolean started = new AtomicBoolean(false);
private WebSocketServerProvider server;
private static final String HOSTNAME = "localhost";
private static final int PORT = 41925;
private static volatile LoginAuthServer instance = null;
public static LoginAuthServer getInstance() {
if (instance == null) {
synchronized (LoginAuthServer.class) {
if (instance == null) {
instance = new LoginAuthServer();
}
}
}
return instance;
}
private LoginAuthServer() {
WebSocketConfiguration config = new WebSocketConfiguration();
config.setHostname(HOSTNAME);
config.setPort(PORT);
server = WebSocketServerFactory.registerWebSocketServer(config);
initEventListener();
}
public void start() {
// 只运行一次,不在乎成不成功
if (started.compareAndSet(false, true)) {
asyncStart();
}
}
public void asyncStart() {
ExecutorService asyncService = Executors.newSingleThreadExecutor(new NamedThreadFactory(LoginAuthServer.class.getName(), true));
asyncService.submit(this::compatibleStart);
asyncService.shutdown();
}
@Deprecated
public void compatibleStart() {
try {
server.start();
} catch (Exception e) {
FineLoggerFactory.getLogger().warn(e.getMessage(), e);
}
}
public void stop() {
try {
server.stop();
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
}
private void initEventListener() {
server.addEventListener(EventHolder.build("bbsAccountLogin", BBSAccountLogin.class, new AbstractDataListener<BBSAccountLogin>() {
@Override
public void onData(WebSocketClientProvider client, BBSAccountLogin data, WebSocketAckRequest ackRequest) throws Exception {
// 保存登录信息到.FineReport100配置中
int uid = data.getUid();
if (uid > 0) {
String username = URLDecoder.decode(data.getUsername(), "UTF-8");
DesignerEnvManager manager = DesignerEnvManager.getEnvManager();
manager.setDesignerLoginUid(data.getUid());
manager.setDesignerLoginUsername(username);
manager.setDesignerLoginAppId(data.getAppId());
manager.setDesignerLoginRefreshToken(data.getRefreshToken());
manager.setDesignerLastLoginTime(System.currentTimeMillis());
manager.setLastLoginType(DesignerLoginType.NORMAL_LOGIN);
manager.setLastLoginAccount(username);
DesignerEnvManager.getEnvManager().saveXMLFile();
EventDispatcher.fire(CertificateEvent.LOGIN, username);
}
}
}));
}
}