use of org.apache.openmeetings.db.entity.room.StreamClient in project openmeetings by apache.
the class StreamClientManager method update.
@Override
public StreamClient update(StreamClient rcl, boolean forceSize) {
if (rcl == null) {
return null;
}
Client client = clientManager.getBySid(rcl.getSid());
if (client == null) {
if (Client.Type.mobile == rcl.getType()) {
Sessiondata sd = sessionDao.check(rcl.getSid());
User u = userDao.get(sd.getUserId());
rcl = mobileService.create(rcl, u);
// Mobile client enters the room
client = new Client(rcl, userDao.get(rcl.getUserId()));
clientManager.add(client);
if (rcl.getRoomId() != null) {
client.setCam(0);
client.setMic(0);
client.setRoom(roomDao.get(rcl.getRoomId()));
clientManager.add(client);
WebSocketHelper.sendRoom(new RoomMessage(client.getRoom().getId(), client, RoomMessage.Type.roomEnter));
}
} else if (client == null && Client.Type.sip == rcl.getType()) {
rcl.setLogin(SIP_USER_NAME);
rcl.setUserId(SIP_USER_ID);
// SipTransport enters the room
User u = new User();
u.setId(SIP_USER_ID);
u.setLogin(SIP_USER_NAME);
u.setFirstname(SIP_FIRST_NAME);
client = new Client(rcl, u);
clientManager.add(client);
client.setCam(0);
client.setMic(0);
client.allow(Room.Right.audio, Room.Right.video);
client.set(Activity.broadcastA);
clientManager.addToRoom(client);
WebSocketHelper.sendRoom(new RoomMessage(client.getRoom().getId(), client, RoomMessage.Type.roomEnter));
} else {
return null;
}
}
if (rcl.getRoomId() == null || !rcl.getRoomId().equals(client.getRoom().getId())) {
return null;
}
User u = client.getUser();
rcl.setUserId(u.getId());
rcl.setLogin(u.getLogin());
rcl.setFirstname(u.getFirstname());
rcl.setLastname(u.getLastname());
rcl.setEmail(u.getAddress() == null ? null : u.getAddress().getEmail());
rcl.setSuperMod(client.hasRight(Right.superModerator));
rcl.setMod(client.hasRight(Right.moderator));
if (client.hasActivity(Activity.broadcastA) && !client.isMicEnabled()) {
client.remove(Activity.broadcastA);
}
if (client.hasActivity(Activity.broadcastV) && !client.isCamEnabled()) {
client.remove(Activity.broadcastV);
}
if (client.hasActivity(Activity.broadcastA) || client.hasActivity(Activity.broadcastV)) {
if (forceSize || rcl.getWidth() == 0 || rcl.getHeight() == 0) {
rcl.setWidth(client.getWidth());
rcl.setHeight(client.getHeight());
}
if (client.getPod() != Pod.none) {
rcl.setInterviewPodId(client.getPod() == Pod.left ? 1 : 2);
}
StringBuilder sb = new StringBuilder();
if (client.hasActivity(Activity.broadcastA)) {
sb.append('a');
}
if (client.hasActivity(Activity.broadcastV)) {
sb.append('v');
}
if (!rcl.isBroadcasting() || hasVideo(rcl) != hasVideo(client)) {
rcl.setBroadcasting(true);
}
rcl.setAvsettings(sb.toString());
} else {
rcl.setAvsettings("n");
rcl.setBroadcasting(false);
}
clientManager.update(client);
streamClientManager.update(rcl);
return rcl;
}
Aggregations