[*] 流程
This commit is contained in:
@@ -27,11 +27,26 @@ public class Session implements Closeable {
|
||||
* 接收者
|
||||
*/
|
||||
private final Client target;
|
||||
/**
|
||||
* P2P会话管理器
|
||||
*/
|
||||
private final SessionManager sessionManager;
|
||||
|
||||
public Session(String id, Client source, Client target) {
|
||||
public Session(String id, Client source, Client target, SessionManager sessionManager) {
|
||||
this.id = id;
|
||||
this.source = source;
|
||||
this.target = target;
|
||||
this.sessionManager = sessionManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* 推送消息
|
||||
*
|
||||
* @param message 消息
|
||||
*/
|
||||
public void push(Message message) {
|
||||
this.source.push(message);
|
||||
this.target.push(message);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -40,7 +55,7 @@ public class Session implements Closeable {
|
||||
* @param clientId 当前终端ID
|
||||
* @param message 消息
|
||||
*/
|
||||
public void pushRemote(String clientId, Message message) {
|
||||
public void pushOther(String clientId, Message message) {
|
||||
if(this.source.clientId().equals(clientId)) {
|
||||
this.target.push(message);
|
||||
} else {
|
||||
@@ -50,7 +65,7 @@ public class Session implements Closeable {
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
|
||||
this.sessionManager.remove(this.id);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ public class SessionManager {
|
||||
* @return 会话
|
||||
*/
|
||||
public Session call(Client source, Client target) {
|
||||
final Session session = new Session(this.idService.buildUuid(), source, target);
|
||||
final Session session = new Session(this.idService.buildUuid(), source, target, this);
|
||||
this.sessions.put(session.getId(), session);
|
||||
return session;
|
||||
}
|
||||
@@ -44,4 +44,13 @@ public class SessionManager {
|
||||
return this.sessions.get(sessionId);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param sessionId 会话ID
|
||||
*
|
||||
* @return 会话
|
||||
*/
|
||||
public Session remove(String sessionId) {
|
||||
return this.sessions.remove(sessionId);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -45,7 +45,10 @@ public class RoomLeaveProtocol extends ProtocolRoomAdapter implements Applicatio
|
||||
public void onApplicationEvent(RoomLeaveEvent event) {
|
||||
final Room room = event.getRoom();
|
||||
final Client client = event.getClient();
|
||||
final Map<String, String> body = Map.of(Constant.CLIENT_ID, client.clientId());
|
||||
final Map<String, String> body = Map.of(
|
||||
Constant.ROOM_ID, room.getRoomId(),
|
||||
Constant.CLIENT_ID, client.clientId()
|
||||
);
|
||||
room.broadcast(client, this.build(body));
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ import com.acgist.taoyao.signal.protocol.ProtocolSessionAdapter;
|
||||
{
|
||||
}
|
||||
""",
|
||||
flow = "终端->信令服务->终端"
|
||||
flow = "终端->信令服务+)终端"
|
||||
)
|
||||
public class SessionCloseProtocol extends ProtocolSessionAdapter {
|
||||
|
||||
@@ -33,6 +33,8 @@ public class SessionCloseProtocol extends ProtocolSessionAdapter {
|
||||
|
||||
@Override
|
||||
public void execute(String clientId, ClientType clientType, Session session, Client client, Message message, Map<String, Object> body) {
|
||||
session.push(message);
|
||||
session.close();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ public class SessionExchangeProtocol extends ProtocolSessionAdapter {
|
||||
|
||||
@Override
|
||||
public void execute(String clientId, ClientType clientType, Session session, Client client, Message message, Map<String, Object> body) {
|
||||
session.pushRemote(clientId, message);
|
||||
session.pushOther(clientId, message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ public class SessionPauseProtocol extends ProtocolSessionAdapter {
|
||||
|
||||
@Override
|
||||
public void execute(String clientId, ClientType clientType, Session session, Client client, Message message, Map<String, Object> body) {
|
||||
session.pushRemote(clientId, message);
|
||||
session.pushOther(clientId, message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ public class SessionResumeProtocol extends ProtocolSessionAdapter {
|
||||
|
||||
@Override
|
||||
public void execute(String clientId, ClientType clientType, Session session, Client client, Message message, Map<String, Object> body) {
|
||||
session.pushRemote(clientId, message);
|
||||
session.pushOther(clientId, message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user