[+] 终端信令连接
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
package com.acgist.taoyao.signal.event.client;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.context.ApplicationEvent;
|
||||
|
||||
import com.acgist.taoyao.signal.session.ClientSession;
|
||||
@@ -22,10 +24,15 @@ public class RegisterEvent extends ApplicationEvent {
|
||||
* 会话
|
||||
*/
|
||||
private ClientSession session;
|
||||
/**
|
||||
* 参数
|
||||
*/
|
||||
private Map<?, ?> data;
|
||||
|
||||
public RegisterEvent(ClientSession session) {
|
||||
public RegisterEvent(ClientSession session, Map<?, ?> data) {
|
||||
super(session);
|
||||
this.session = session;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import com.acgist.taoyao.signal.event.client.RegisterEvent;
|
||||
import com.acgist.taoyao.signal.listener.ApplicationListenerAdapter;
|
||||
import com.acgist.taoyao.signal.protocol.client.OnlineProtocol;
|
||||
import com.acgist.taoyao.signal.session.ClientSession;
|
||||
import com.acgist.taoyao.signal.session.ClientSessionStatus;
|
||||
|
||||
/**
|
||||
* 终端注册监听
|
||||
@@ -33,8 +34,13 @@ public class RegisterListener extends ApplicationListenerAdapter<RegisterEvent>
|
||||
final Message message = this.onlineProtocol.build();
|
||||
message.setBody(Map.of("sn", session.sn()));
|
||||
this.clientSessionManager.broadcast(session.sn(), message);
|
||||
// TODO:ip等等
|
||||
// TODO:重新注册上来需要掉线重连
|
||||
final Map<?, ?> data = event.getData();
|
||||
final ClientSessionStatus status = session.status();
|
||||
status.setSn(session.sn());
|
||||
status.setIp((String) data.get("ip"));
|
||||
status.setMac((String) data.get("mac"));
|
||||
status.setSignal((Integer) data.get("signal"));
|
||||
status.setBattery((Integer) data.get("battery"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ public abstract class ProtocolAdapter implements Protocol {
|
||||
public Message build() {
|
||||
final Header header = Header.builder()
|
||||
.v(this.taoyaoProperties.getVersion())
|
||||
.id(this.idService.id())
|
||||
.id(this.idService.buildIdToString())
|
||||
.pid(this.protocol)
|
||||
.build();
|
||||
final Message message = Message.builder()
|
||||
|
||||
@@ -86,7 +86,7 @@ public class ProtocolManager {
|
||||
final ClientSession session = this.clientSessionManager.session(instance);
|
||||
if(session != null && protocol instanceof RegisterProtocol) {
|
||||
event = protocol.execute(sn, value, session);
|
||||
} else if(session != null) {
|
||||
} else if(session != null && session.authorized()) {
|
||||
event = protocol.execute(sn, value, session);
|
||||
} else {
|
||||
log.warn("会话没有权限:{}", message);
|
||||
|
||||
@@ -48,7 +48,7 @@ public class RegisterProtocol extends ProtocolBodyMapAdapter {
|
||||
message.setCode(MessageCode.CODE_3401);
|
||||
}
|
||||
session.push(message);
|
||||
return new RegisterEvent(session);
|
||||
return new RegisterEvent(session, body);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.acgist.taoyao.signal.protocol.system;
|
||||
|
||||
import org.springframework.context.ApplicationEvent;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.acgist.taoyao.boot.model.Message;
|
||||
import com.acgist.taoyao.signal.protocol.ProtocolAdapter;
|
||||
import com.acgist.taoyao.signal.session.ClientSession;
|
||||
|
||||
/**
|
||||
* 心跳信令协议
|
||||
*
|
||||
* @author acgist
|
||||
*/
|
||||
@Component
|
||||
public class HeartbeatProtocol extends ProtocolAdapter {
|
||||
|
||||
/**
|
||||
* 信令协议标识
|
||||
*/
|
||||
public static final Integer PID = 1000;
|
||||
|
||||
public HeartbeatProtocol() {
|
||||
super(PID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApplicationEvent execute(String sn, Message message, ClientSession session) {
|
||||
session.push(message);
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -72,7 +72,7 @@ public abstract class ClientSessionAdapter<T extends AutoCloseable> implements C
|
||||
|
||||
@Override
|
||||
public boolean timeout(long timeout) {
|
||||
return !(this.authorized && System.currentTimeMillis() - this.time <= timeout);
|
||||
return !this.authorized && System.currentTimeMillis() - this.time > timeout;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user