[+] 终端信令连接

This commit is contained in:
acgist
2022-11-13 12:14:10 +08:00
parent b8f243c64c
commit 8d1392a6da
21 changed files with 412 additions and 70 deletions

View File

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

View File

@@ -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);
// TODOip等等
// 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"));
}
}

View File

@@ -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()

View File

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

View File

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

View File

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

View File

@@ -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