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
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); |
|
} |
|
} |
|
})); |
|
} |
|
}
|
|
|