Skip to content

Commit

Permalink
Merge pull request #6325 from ant-media/refactor-remove-conference-fr…
Browse files Browse the repository at this point in the history
…om-db

Remove conference room from database structure and add auto migration
  • Loading branch information
mekya committed May 14, 2024
2 parents 4bb9526 + 72057cf commit 96e8363
Show file tree
Hide file tree
Showing 13 changed files with 1,172 additions and 1,356 deletions.
2 changes: 2 additions & 0 deletions src/main/java/io/antmedia/AntMediaApplicationAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -651,6 +651,8 @@ public synchronized void updateMainBroadcast(Broadcast broadcast) {
else {
getDataStore().updateBroadcastFields(mainBroadcast.getStreamId(), mainBroadcast);
}
leftTheRoom(broadcast.getMainTrackStreamId(), broadcast.getStreamId());

}

public void resetHLSStats(String streamId) {
Expand Down
198 changes: 57 additions & 141 deletions src/main/java/io/antmedia/datastore/db/DataStore.java
Original file line number Diff line number Diff line change
Expand Up @@ -187,38 +187,6 @@ public long getBroadcastCount(Map<String,String> broadcastMap) {
*/
public abstract List<Broadcast> getBroadcastList(int offset, int size, String type, String sortBy, String orderBy, String search);

/**
* Returns the Conference Room List in order
*
* @param offset the number of items to skip
* @param size batch size
* @param sortBy can get "name" or "startDate" or "endDate" values
* @param orderBy can get "desc" or "asc"
* @param search is used for searching in RoomId
* @return
*/
public abstract List<ConferenceRoom> getConferenceRoomList(int offset, int size, String sortBy, String orderBy, String search);

public List<ConferenceRoom> getConferenceRoomList(Map<String, String> conferenceMap, int offset, int size, String sortBy, String orderBy,
String search, Gson gson) {
ArrayList<ConferenceRoom> list = new ArrayList<>();
synchronized (this) {
Collection<String> conferenceRooms = null;
conferenceRooms = conferenceMap.values();

for (String roomString : conferenceRooms) {
ConferenceRoom room = gson.fromJson(roomString, ConferenceRoom.class);
list.add(room);
}
}
if (search != null && !search.isEmpty()) {
search = search.replaceAll(REPLACE_CHARS_REGEX, "_");
logger.info("server side search called for Conference Room = {}", search);
list = searchOnServerConferenceRoom(list, search);
}
return sortAndCropConferenceRoomList(list, offset, size, sortBy, orderBy);
}


public abstract boolean removeEndpoint(String id, Endpoint endpoint, boolean checkRTMPUrl);

Expand Down Expand Up @@ -846,49 +814,6 @@ public void setWriteStatsToDatastore(boolean writeStatsToDatastore) {
this.writeStatsToDatastore = writeStatsToDatastore;
}

/**
* Creates a conference room with the parameters.
* The room name is key so if this is called with the same room name
* then new room is overwritten to old one.
* @param room - conference room
* @return true if successfully created, false if not
*/
public abstract boolean createConferenceRoom(ConferenceRoom room);

/**
* Edits previously saved conference room
* @param room - conference room
* @return true if successfully edited, false if not
*/
public abstract boolean editConferenceRoom(String roomId, ConferenceRoom room);

/**
* Deletes previously saved conference room
* @param roomName- name of the conference room
* @return true if successfully deleted, false if not
*/
public abstract boolean deleteConferenceRoom(String roomId);

/**
* Retrieves previously saved conference room
* @param roomName- name of the conference room
* @return room - conference room
*/
public abstract ConferenceRoom getConferenceRoom(String roomId);

public ConferenceRoom getConferenceRoom(Map<String, String> conferenceRoomMap, String roomId, Gson gson) {
synchronized (this) {
if (roomId != null) {

String jsonString = conferenceRoomMap.get(roomId);
if (jsonString != null) {
return gson.fromJson(jsonString, ConferenceRoom.class);
}
}
}
return null;
}

/**
* Updates the stream fields if it's not null
* @param broadcast
Expand Down Expand Up @@ -987,6 +912,10 @@ protected void updateStreamInfo(Broadcast broadcast, Broadcast newBroadcast)
broadcast.setMetaData(newBroadcast.getMetaData());
}

if (newBroadcast.getConferenceMode() != null) {
broadcast.setConferenceMode(newBroadcast.getConferenceMode());
}


broadcast.setPlannedStartDate(newBroadcast.getPlannedStartDate());
broadcast.setSeekTimeInMs(newBroadcast.getSeekTimeInMs());
Expand All @@ -1001,6 +930,7 @@ protected void updateStreamInfo(Broadcast broadcast, Broadcast newBroadcast)
broadcast.setSubTrackStreamIds(newBroadcast.getSubTrackStreamIds());
broadcast.setPlaylistLoopEnabled(newBroadcast.isPlaylistLoopEnabled());
broadcast.setAutoStartStopEnabled(newBroadcast.isAutoStartStopEnabled());

}


Expand Down Expand Up @@ -1171,72 +1101,6 @@ else if (sortBy.equals("status"))
}
}

protected ArrayList<ConferenceRoom> searchOnServerConferenceRoom(ArrayList<ConferenceRoom> roomList, String search){
if(search != null && !search.isEmpty()) {
for (Iterator<ConferenceRoom> i = roomList.iterator(); i.hasNext(); ) {
ConferenceRoom item = i.next();
if(item.getRoomId() != null) {
if (item.getRoomId().toLowerCase().contains(search.toLowerCase()))
continue;
else i.remove();
}
}
}
return roomList;
}

protected List<ConferenceRoom> sortAndCropConferenceRoomList(List<ConferenceRoom> roomList, int offset, int size, String sortBy, String orderBy) {
if("roomId".equals(sortBy) || "startDate".equals(sortBy) || "endDate".equals(sortBy))
{
Collections.sort(roomList, (room1, room2) -> {
Comparable c1 = null;
Comparable c2 = null;

if (sortBy.equals("roomId"))
{
c1 = room1.getRoomId().toLowerCase();
c2 = room2.getRoomId().toLowerCase();
}
else if (sortBy.equals("startDate")) {
c1 = Long.valueOf(room1.getStartDate());
c2 = Long.valueOf(room2.getStartDate());
}
else if (sortBy.equals("endDate")) {
c1 = Long.valueOf(room1.getEndDate());
c2 = Long.valueOf(room2.getEndDate());
}

int result = 0;
if (c1 != null && c2 != null)
{
if ("desc".equals(orderBy)) {
result = c2.compareTo(c1);
}
else {
result = c1.compareTo(c2);
}
}
return result;
});
}

if (size > MAX_ITEM_IN_ONE_LIST) {
size = MAX_ITEM_IN_ONE_LIST;
}
if (offset < 0 ) {
offset = 0;
}

int toIndex = Math.min(offset+size, roomList.size());
if (offset >= toIndex)
{
return new ArrayList<>();
}
else {
return roomList.subList(offset,toIndex);
}
}

/**
* Creates new P2PConnection
* @param conn - P2PConnection object
Expand Down Expand Up @@ -1426,6 +1290,58 @@ public List<WebRTCViewerInfo> getWebRTCViewerList(Map<String, String> webRTCView
* @return
*/
public abstract SubscriberMetadata getSubscriberMetaData(String subscriberId);

/**
* This is a helper method to remove the ConferenceRoom in later versions
*
* May 11, 2024 - mekya
*
* @param broadcast
* @return
*/
public static ConferenceRoom broadcastToConference(Broadcast broadcast) {

ConferenceRoom conferenceRoom = new ConferenceRoom();

conferenceRoom.setRoomId(broadcast.getStreamId());
conferenceRoom.setStartDate(broadcast.getPlannedStartDate());
conferenceRoom.setEndDate(broadcast.getPlannedEndDate());
conferenceRoom.setMode(broadcast.getConferenceMode());
conferenceRoom.setZombi(broadcast.isZombi());
conferenceRoom.setOriginAdress(broadcast.getOriginAdress());
conferenceRoom.setRoomStreamList(broadcast.getSubTrackStreamIds());


return conferenceRoom;
}

/**
* This is a helper method to remove the ConferenceRoom in later versions
*
* May 11, 2024 - mekya
*
* @param broadcast
* @return
*/
public static Broadcast conferenceToBroadcast(ConferenceRoom conferenceRoom) throws Exception {
Broadcast broadcast = new Broadcast();
broadcast.setStreamId(conferenceRoom.getRoomId());
broadcast.setPlannedStartDate(conferenceRoom.getStartDate());
broadcast.setPlannedEndDate(conferenceRoom.getEndDate());
broadcast.setZombi(conferenceRoom.isZombi());
broadcast.setOriginAdress(conferenceRoom.getOriginAdress());
broadcast.setConferenceMode(conferenceRoom.getMode());
broadcast.setSubTrackStreamIds(conferenceRoom.getRoomStreamList());


return broadcast;

}

/**
* Move ConferenceRoom to Broadcast
*/
public abstract void migrateConferenceRoomsToBroadcasts();

//**************************************
//ATTENTION: Write function descriptions while adding new functions
Expand Down
67 changes: 5 additions & 62 deletions src/main/java/io/antmedia/datastore/db/InMemoryDataStore.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@

import io.antmedia.AntMediaApplicationAdapter;
import io.antmedia.datastore.db.types.Broadcast;
import io.antmedia.datastore.db.types.ConferenceRoom;
import io.antmedia.datastore.db.types.Endpoint;
import io.antmedia.datastore.db.types.P2PConnection;
import io.antmedia.datastore.db.types.StreamInfo;
Expand All @@ -42,7 +41,6 @@ public class InMemoryDataStore extends DataStore {
private Map<String, Token> tokenMap = new LinkedHashMap<>();
private Map<String, Subscriber> subscriberMap = new LinkedHashMap<>();
private Map<String, SubscriberMetadata> subscriberMetadataMap = new LinkedHashMap<>();
private Map<String, ConferenceRoom> roomMap = new LinkedHashMap<>();
private Map<String, WebRTCViewerInfo> webRTCViewerMap = new LinkedHashMap<>();


Expand Down Expand Up @@ -882,66 +880,6 @@ public void saveStreamInfo(StreamInfo streamInfo) {
//no need to implement this method, it is used in cluster mode
}

@Override
public boolean createConferenceRoom(ConferenceRoom room) {

boolean result = false;

if (room != null && room.getRoomId() != null) {
roomMap.put(room.getRoomId(), room);
result = true;
}

return result;
}

@Override
public boolean editConferenceRoom(String roomId, ConferenceRoom room) {

boolean result = false;

if (room != null && room.getRoomId() != null) {
return roomMap.replace(roomId, room) != null;
}
return result;
}

@Override
public boolean deleteConferenceRoom(String roomName) {

boolean result = false;

if (roomName != null && roomName.length() > 0 ) {
roomMap.remove(roomName);
result = true;
}
return result;

}
@Override
public List<ConferenceRoom> getConferenceRoomList(int offset, int size, String sortBy, String orderBy, String search) {
Collection<ConferenceRoom> values = roomMap.values();

ArrayList<ConferenceRoom> list = new ArrayList<>();


for (ConferenceRoom room : values)
{
list.add(room);
}

if(search != null && !search.isEmpty()){
logger.info("server side search called for Conference Room = {}", search);
list = searchOnServerConferenceRoom(list, search);
}
return sortAndCropConferenceRoomList(list, offset, size, sortBy, orderBy);
}

@Override
public ConferenceRoom getConferenceRoom(String roomName) {
return roomMap.get(roomName);
}

@Override
public boolean deleteToken(String tokenId) {

Expand Down Expand Up @@ -1100,4 +1038,9 @@ public void putSubscriberMetaData(String subscriberId, SubscriberMetadata subscr
subscriberMetadata.setSubscriberId(subscriberId);
subscriberMetadataMap.put(subscriberId, subscriberMetadata);
}

@Override
public void migrateConferenceRoomsToBroadcasts() {
//no need to implement
}
}
Loading

0 comments on commit 96e8363

Please sign in to comment.