Search in sources :

Example 6 with StreamClient

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;
}
Also used : User(org.apache.openmeetings.db.entity.user.User) RoomMessage(org.apache.openmeetings.db.util.ws.RoomMessage) Sessiondata(org.apache.openmeetings.db.entity.server.Sessiondata) IClient(org.apache.openmeetings.db.entity.basic.IClient) StreamClient(org.apache.openmeetings.db.entity.room.StreamClient) Client(org.apache.openmeetings.db.entity.basic.Client)

Aggregations

StreamClient (org.apache.openmeetings.db.entity.room.StreamClient)6 Sessiondata (org.apache.openmeetings.db.entity.server.Sessiondata)2 JSONArray (com.github.openjson.JSONArray)1 JSONObject (com.github.openjson.JSONObject)1 Client (org.apache.openmeetings.db.entity.basic.Client)1 IClient (org.apache.openmeetings.db.entity.basic.IClient)1 User (org.apache.openmeetings.db.entity.user.User)1 RoomMessage (org.apache.openmeetings.db.util.ws.RoomMessage)1 ClientManager (org.apache.openmeetings.web.app.ClientManager)1 StreamClientManager (org.apache.openmeetings.web.app.StreamClientManager)1