Реализация событий ROOM_DELETE и PEER_DISCONNECTED
This commit is contained in:
@@ -12,6 +12,7 @@ import java.util.function.Consumer;
|
||||
|
||||
import io.g365sfu.exception.SFUException;
|
||||
import io.g365sfu.exception.SFUHandshakeException;
|
||||
import io.g365sfu.net.DisconnectedPeer;
|
||||
import io.g365sfu.net.Incoming;
|
||||
import io.g365sfu.net.Outgoing;
|
||||
import io.g365sfu.net.SfuSock;
|
||||
@@ -49,6 +50,18 @@ public class SFU {
|
||||
|
||||
private Consumer<SDPOffer> onSdpOffer;
|
||||
|
||||
/**
|
||||
* Потребитель для обработки сообщений от сервера SFU о том, что комната была удалена.
|
||||
* Передает ID удаленной комнаты, чтобы клиент мог удалить ее из своего списка комнат и прекратить попытки взаимодействия с ней.
|
||||
*/
|
||||
private Consumer<String> onDeleteRoom;
|
||||
|
||||
/**
|
||||
* Потребитель для обработки сообщений от сервера SFU о том, что участник отключился от комнаты.
|
||||
* Передает объект DisconnectedPeer, который содержит информацию об отключившемся участнике и комнате, от которой он отключился
|
||||
*/
|
||||
private Consumer<DisconnectedPeer> onPeerDisconnected;
|
||||
|
||||
/**
|
||||
* Конструктор для создания объекта SFU, который будет использоваться для установления соединения с SFU сервером.
|
||||
* @param serverAddress адрес SFU сервера в формате "host:port", например "sfu.example.com:8080"
|
||||
@@ -171,6 +184,37 @@ public class SFU {
|
||||
}
|
||||
return;
|
||||
}
|
||||
if(packetId == Incoming.ROOM_DELETE) {
|
||||
int roomIdLength = message.getInt();
|
||||
byte[] roomIdBytes = new byte[roomIdLength];
|
||||
message.get(roomIdBytes);
|
||||
String roomId = new String(roomIdBytes).trim();
|
||||
this.rooms.remove(roomId);
|
||||
if(this.onDeleteRoom != null) {
|
||||
this.onDeleteRoom.accept(roomId);
|
||||
}
|
||||
}
|
||||
if(packetId == Incoming.PEER_DISCONNECTED) {
|
||||
int roomIdLength = message.getInt();
|
||||
byte[] roomIdBytes = new byte[roomIdLength];
|
||||
message.get(roomIdBytes);
|
||||
String roomId = new String(roomIdBytes).trim();
|
||||
int peerIdLength = message.getInt();
|
||||
byte[] peerIdBytes = new byte[peerIdLength];
|
||||
message.get(peerIdBytes);
|
||||
String peerId = new String(peerIdBytes).trim();
|
||||
Room room = this.rooms.get(roomId);
|
||||
DisconnectedPeer disconnectedPeer = new DisconnectedPeer(peerId, roomId, room);
|
||||
if(room != null) {
|
||||
/**
|
||||
* Если такая комната существует то удаляем оттуда участника
|
||||
*/
|
||||
room.removeParticipant(peerId);
|
||||
}
|
||||
if(this.onPeerDisconnected != null) {
|
||||
this.onPeerDisconnected.accept(disconnectedPeer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -301,4 +345,14 @@ public class SFU {
|
||||
public void setOfferConsumer(Consumer<SDPOffer> onSdpOffer) {
|
||||
this.onSdpOffer = onSdpOffer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Устанавливает потребителя для обработки сообщений от сервера SFU о том, что комната была удалена.
|
||||
* @param onDeleteRoom потребитель, который будет вызываться при получении сообщения от сервера SFU с кодом 0x10,
|
||||
* содержащим информацию о том, что комната была удалена. Параметром будет строка, содержащая ID удаленной комнаты,
|
||||
* чтобы клиент мог удалить ее из своего списка комнат и прекратить попытки взаимодействия с ней.
|
||||
*/
|
||||
public void setDeleteRoomConsumer(Consumer<String> onDeleteRoom) {
|
||||
this.onDeleteRoom = onDeleteRoom;
|
||||
}
|
||||
}
|
||||
|
||||
28
src/main/java/io/g365sfu/net/DisconnectedPeer.java
Normal file
28
src/main/java/io/g365sfu/net/DisconnectedPeer.java
Normal file
@@ -0,0 +1,28 @@
|
||||
package io.g365sfu.net;
|
||||
|
||||
import io.g365sfu.Room;
|
||||
|
||||
public class DisconnectedPeer {
|
||||
|
||||
private String peerId;
|
||||
private Room room;
|
||||
private String roomId;
|
||||
|
||||
public DisconnectedPeer(String peerId, String roomId, Room room) {
|
||||
this.peerId = peerId;
|
||||
this.room = room;
|
||||
this.roomId = roomId;
|
||||
}
|
||||
|
||||
public String getPeerId() {
|
||||
return peerId;
|
||||
}
|
||||
|
||||
public Room getRoom() {
|
||||
return room;
|
||||
}
|
||||
|
||||
public String getRoomId() {
|
||||
return roomId;
|
||||
}
|
||||
}
|
||||
@@ -16,4 +16,8 @@ public class Incoming {
|
||||
|
||||
public static final byte ROOM_CREATE= (byte) 0x02;
|
||||
|
||||
public static final byte ROOM_DELETE = (byte) 0x10;
|
||||
|
||||
public static final byte PEER_DISCONNECTED = (byte) 0x11;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user