Package org.openmeetings.app.conference.whiteboard

Examples of org.openmeetings.app.conference.whiteboard.RoomStatus


      Boolean becomeModerator, Boolean isSuperModerator, Long organization_id,
      String colorObj){
    try {
     
      //Return Object
      RoomStatus roomStatus = new RoomStatus();

      IConnection current = Red5.getConnectionLocal();
      String streamid = current.getClient().getId();
      RoomClient currentClient = this.clientListManager.getClientByStreamId(streamid);
      currentClient.setRoom_id(room_id);
      currentClient.setRoomEnter(new Date());
      currentClient.setOrganization_id(organization_id);
     
      currentClient.setUsercolor(colorObj);
     
      //Inject externalUserId if nothing is set yet
      if (currentClient.getExternalUserId() == null) {
        Users us = UsersDaoImpl.getInstance().getUser(currentClient.getUser_id());
        if (us != null) {
          currentClient.setExternalUserId(us.getExternalUserId());
          currentClient.setExternalUserType(us.getExternalUserType());
        }
      }
     
      //This can be set without checking for Moderation Flag
      currentClient.setIsSuperModerator(isSuperModerator);
     
      this.clientListManager.updateClientByStreamId(streamid, currentClient);
     
     
      //Log the User
      ConferenceLogDaoImpl.getInstance().addConferenceLog("roomEnter", currentClient.getUser_id(),
          streamid, room_id, currentClient.getUserip(), "",
          currentClient.getExternalUserId(), currentClient.getExternalUserType(),
          currentClient.getMail(),currentClient.getFirstname(),currentClient.getLastname()
          );
     
      log.debug("##### setRoomValues : " + currentClient.getUsername()+" "+currentClient.getStreamid()); // just a unique number

      //Check for Moderation
      //LogicalRoom ENTER
      HashMap<String,RoomClient> clientListRoom = this.getRoomClients(room_id);
     
     
      // appointed meeting or moderated Room?
      Rooms room = Roommanagement.getInstance().getRoomById(room_id);
     
      //Check Max Users first
      if (room.getNumberOfPartizipants() != null && clientListRoom.size() > room.getNumberOfPartizipants()) {
        roomStatus.setRoomFull(true);
        return roomStatus;
      }
     
      // not really - default logic
      if(room.getAppointment() == null || room.getAppointment() == false){
       
        if (room.getIsModeratedRoom()) {
         
          //if this is a Moderated Room then the Room can be only locked off by the Moderator Bit
          //List<RoomClient> clientModeratorListRoom = this.clientListManager.getCurrentModeratorByRoom(room_id);
         
          //If there is no Moderator yet we have to check if the current User has the Bit set to true to
          //become one, otherwise he won't get Moderation and has to wait
          if (becomeModerator) {
            currentClient.setIsMod(true);
           
            //There is a need to send an extra Event here, cause at this moment there could be
            //already somebody in the Room waiting
           
            //Update the Client List
            this.clientListManager.updateClientByStreamId(streamid, currentClient);
           
            List<RoomClient> modRoomList = this.clientListManager.getCurrentModeratorByRoom(currentClient.getRoom_id());
           
            //Notify all clients of the same scope (room)
            Collection<Set<IConnection>> conCollection = current.getScope().getConnections();
            for (Set<IConnection> conset : conCollection) {
              for (IConnection conn : conset) {
                if (conn != null) {
                  RoomClient rcl = this.clientListManager.getClientByStreamId(conn.getClient().getId());
                  if (rcl == null) {
                    //continue;
                  } else if (rcl.getIsScreenClient() != null && rcl.getIsScreenClient()) {
                      //continue;
                    } else {
                    if( !streamid.equals(rcl.getStreamid())){
                      //It is not needed to send back that event to the actuall Moderator
                      //as it will be already triggered in the result of this Function
                      //in the Client
                      if (conn instanceof IServiceCapableConnection) {
                        ((IServiceCapableConnection) conn).invoke("setNewModeratorByList",new Object[] { modRoomList }, this);
                        log.debug("sending setNewModeratorByList to " + conn);
                      }
                    }
                  }
                }
              } 
            }
           
          } else {
            //The current User is not a Teacher/Admin or whatever Role that should get the
            //Moderation
            currentClient.setIsMod(false);
          }
       
           
        } else {
         
          //If this is a normal Room Moderator rules : first come, first draw ;-)
          log.debug("setRoomValues : Room" + room_id + " not appointed! Moderator rules : first come, first draw ;-)" );
          if (clientListRoom.size()==1){
            log.debug("Room is empty so set this user to be moderation role");
            currentClient.setIsMod(true);
          } else {
            log.debug("Room is already somebody so set this user not to be moderation role");
           
            if (becomeModerator) {
              currentClient.setIsMod(true);
             
              //Update the Client List
              this.clientListManager.updateClientByStreamId(streamid, currentClient);
             
              List<RoomClient> modRoomList = this.clientListManager.getCurrentModeratorByRoom(currentClient.getRoom_id());
             
              //There is a need to send an extra Event here, cause at this moment there could be
              //already somebody in the Room waiting
             
              //Notify all clients of the same scope (room)
              Collection<Set<IConnection>> conCollection = current.getScope().getConnections();
              for (Set<IConnection> conset : conCollection) {
                for (IConnection conn : conset) {
                  if (conn != null) {
                    RoomClient rcl = this.clientListManager.getClientByStreamId(conn.getClient().getId());
                    if (rcl == null) {
                      //continue;
                    } else if (rcl.getIsScreenClient() != null && rcl.getIsScreenClient()) {
                        //continue;
                      } else {
                      if( !streamid.equals(rcl.getStreamid())){
                        //It is not needed to send back that event to the actual Moderator
                        //as it will be already triggered in the result of this Function
                        //in the Client
                        if (conn instanceof IServiceCapableConnection) {
                          ((IServiceCapableConnection) conn).invoke("setNewModeratorByList",new Object[] { modRoomList }, this);
                          log.debug("sending setNewModeratorByList to " + conn);
                        }
                      }
                    }
                  }
                } 
              }
             
            } else {
              //The current User is not a Teacher/Admin or whatever Role that should get the
              //Moderation
              currentClient.setIsMod(false);
            }
           
          }
         
        }
       
        //Update the Client List
        this.clientListManager.updateClientByStreamId(streamid, currentClient);
       
      } else{
       
        //If this is an Appointment then the Moderator will be set to the Invitor
       
        Appointment ment = AppointmentLogic.getInstance().getAppointmentByRoom(room_id);
       
        List<MeetingMember> members = MeetingMemberDaoImpl.getInstance().getMeetingMemberByAppointmentId(ment.getAppointmentId());
       
        Long userIdInRoomClient = currentClient.getUser_id();
       
        boolean found = false;
        boolean moderator_set = false;
       
        // Check if current user is set to moderator
        for(int i = 0; i< members.size(); i++)
        {
          MeetingMember member = members.get(i);         
         
          // only persistent users can schedule a meeting
          // userid is only set for registered users
          if(member.getUserid() != null )
          {
            log.debug("checking user " + member.getFirstname() + " for moderator role - ID : " + member.getUserid().getUser_id());
           
            if ( member.getUserid().getUser_id().equals(userIdInRoomClient) )
            {         
              found = true;
             
              if(member.getInvitor()){
                log.debug("User " + userIdInRoomClient + " is moderator due to flag in MeetingMember record");
                currentClient.setIsMod(true);
               
                //Update the Client List
                this.clientListManager.updateClientByStreamId(streamid, currentClient);
               
                List<RoomClient> modRoomList = this.clientListManager.getCurrentModeratorByRoom(currentClient.getRoom_id());
               
                //There is a need to send an extra Event here, cause at this moment there could be
                //already somebody in the Room waiting
               
                //Notify all clients of the same scope (room)
                Collection<Set<IConnection>> conCollection = current.getScope().getConnections();
                for (Set<IConnection> conset : conCollection) {
                  for (IConnection conn : conset) {
                    if (conn != null) {
                      RoomClient rcl = this.clientListManager.getClientByStreamId(conn.getClient().getId());
                      if (rcl == null) {
                        //continue;
                      } else if (rcl.getIsScreenClient() != null && rcl.getIsScreenClient()) {
                          //continue;
                        } else {
                        if( !streamid.equals(rcl.getStreamid())){
                          //It is not needed to send back that event to the actual Moderator
                          //as it will be already triggered in the result of this Function
                          //in the Client
                          if (conn instanceof IServiceCapableConnection) {
                            ((IServiceCapableConnection) conn).invoke("setNewModeratorByList",new Object[] { modRoomList }, this);
                            log.debug("sending setNewModeratorByList to " + conn);
                          }
                        }
                      }
                    }
                  } 
                }
               
                moderator_set = true;
                this.clientListManager.updateClientByStreamId(streamid, currentClient);
                break;
              }
              else
              {
                log.debug("User " + userIdInRoomClient + " is NOT moderator due to flag in MeetingMember record");
                currentClient.setIsMod(false);
                this.clientListManager.updateClientByStreamId(streamid, currentClient);
                break;
              }
            }
            else
            {
              if(member.getInvitor())
                moderator_set = true;
            }             
          }
          else
          {
            if(member.getInvitor())
              moderator_set = true;
          }
         
        }
       
        if(!found){
          log.debug("User " + userIdInRoomClient + " could not be found as MeetingMember -> definiteley no moderator");
          currentClient.setIsMod(false);
          this.clientListManager.updateClientByStreamId(streamid, currentClient);
        }
        else{
          // if current user is part of the memberlist, but moderator couldn't be retrieved : first come, first draw!
          if (clientListRoom.size()==1 && moderator_set == false){
            log.debug("");
            currentClient.setIsMod(true);
           
            //Update the Client List
            this.clientListManager.updateClientByStreamId(streamid, currentClient);
           
            List<RoomClient> modRoomList = this.clientListManager.getCurrentModeratorByRoom(currentClient.getRoom_id());
           
            //There is a need to send an extra Event here, cause at this moment there could be
            //already somebody in the Room waiting
           
            //Notify all clients of the same scope (room)
            Collection<Set<IConnection>> conCollection = current.getScope().getConnections();
            for (Set<IConnection> conset : conCollection) {
              for (IConnection conn : conset) {
                if (conn != null) {
                  RoomClient rcl = this.clientListManager.getClientByStreamId(conn.getClient().getId());
                  if (rcl == null) {
                    //continue;
                  } else if (rcl.getIsScreenClient() != null && rcl.getIsScreenClient()) {
                      //continue;
                    } else {
                    if( !streamid.equals(rcl.getStreamid())){
                      //It is not needed to send back that event to the actual Moderator
                      //as it will be already triggered in the result of this Function
                      //in the Client
                      if (conn instanceof IServiceCapableConnection) {
                        ((IServiceCapableConnection) conn).invoke("setNewModeratorByList",new Object[] { modRoomList }, this);
                        log.debug("sending setNewModeratorByList to " + conn);
                      }
                    }
                  }
                }
              } 
            }
           
            this.clientListManager.updateClientByStreamId(streamid, currentClient);
          }
        }
       
      }
     
     
      //Notify all clients of the same scope (room)
      Collection<Set<IConnection>> conCollection = current.getScope().getConnections();
      for (Set<IConnection> conset : conCollection) {
        for (IConnection conn : conset) {
          if (conn != null) {
            if (conn instanceof IServiceCapableConnection) {
              if (conn.equals(current)){
                continue;
              } else {       
                RoomClient rcl = this.clientListManager.getClientByStreamId(conn.getClient().getId());
                if (rcl == null) {
                  //continue;
                } else if (rcl.getIsScreenClient() != null && rcl.getIsScreenClient()) {
                    //continue;
                  } else {
                  //log.debug("*** setAudienceModus Found Client to " + conn);
                  //log.debug("*** setAudienceModus Found Client to " + conn.getClient());
                  if (conn instanceof IServiceCapableConnection) {
                    ((IServiceCapableConnection) conn).invoke("addNewUser",new Object[] { currentClient }, this);
                    log.debug("sending addNewUser to " + conn);
                  }
                }
              }
            }
          }
        }
      }
     
      BrowserStatus browserStatus = (BrowserStatus) current.getScope().getAttribute("browserStatus");
     
      if (browserStatus == null) {
        browserStatus = new BrowserStatus();
      }
     
      //RoomStatus roomStatus = new RoomStatus();
     
      //FIXME: Rework Client Object to DTOs
      roomStatus.setClientMap(clientListRoom);
      roomStatus.setBrowserStatus(browserStatus);
     
      return roomStatus;
    } catch (Exception err){
      log.error("[setRoomValues]",err);
    }
View Full Code Here


      Boolean becomeModerator, Boolean isSuperModerator,
      Long organization_id, String colorObj) {
    try {

      // Return Object
      RoomStatus roomStatus = new RoomStatus();

      IConnection current = Red5.getConnectionLocal();
      String streamid = current.getClient().getId();
      RoomClient currentClient = this.clientListManager
          .getClientByStreamId(streamid);
      currentClient.setRoom_id(room_id);
      currentClient.setIsAVClient(false);
      currentClient.setRoomEnter(new Date());
      currentClient.setOrganization_id(organization_id);

      currentClient.setUsercolor(colorObj);

      // Inject externalUserId if nothing is set yet
      if (currentClient.getExternalUserId() == null) {
        Users us = usersDao.getUser(currentClient.getUser_id());
        if (us != null) {
          currentClient.setExternalUserId(us.getExternalUserId());
          currentClient.setExternalUserType(us.getExternalUserType());
        }
      }

      // This can be set without checking for Moderation Flag
      currentClient.setIsSuperModerator(isSuperModerator);

      this.clientListManager.updateClientByStreamId(streamid,
          currentClient);

            Rooms room = roommanagement.getRoomById(room_id);
            if (room.getShowMicrophoneStatus()) {
              currentClient.setCanGiveAudio(true);
            }

      // Log the User
      conferenceLogDao.addConferenceLog("roomEnter",
          currentClient.getUser_id(), streamid, room_id,
          currentClient.getUserip(), "",
          currentClient.getExternalUserId(),
          currentClient.getExternalUserType(),
          currentClient.getMail(), currentClient.getFirstname(),
          currentClient.getLastname());

      log.debug("##### setRoomValues : " + currentClient);
     
      // Check for Moderation LogicalRoom ENTER
      HashMap<String, RoomClient> clientListRoom = this.clientListManager
          .getRoomClients(room_id);

      // appointed meeting or moderated Room? => Check Max Users first
      if (room.getNumberOfPartizipants() != null
          && clientListRoom.size() > room.getNumberOfPartizipants()) {
        roomStatus.setRoomFull(true);
        return roomStatus;
      }

      // default logic for non regular rooms
      if (room.getAppointment() == null || room.getAppointment() == false) {

        if (room.getIsModeratedRoom()) {

          // if this is a Moderated Room then the Room can be only
          // locked off by the Moderator Bit
          // List<RoomClient> clientModeratorListRoom =
          // this.clientListManager.getCurrentModeratorByRoom(room_id);

          // If there is no Moderator yet we have to check if the
          // current User has the Bit set to true to
          // become one, otherwise he won't get Moderation and has to
          // wait
          if (becomeModerator) {
            currentClient.setIsMod(true);

            // There is a need to send an extra Event here, cause at
            // this moment there could be
            // already somebody in the Room waiting

            // Update the Client List
            this.clientListManager.updateClientByStreamId(streamid,
                currentClient);

            List<RoomClient> modRoomList = this.clientListManager
                .getCurrentModeratorByRoom(currentClient.getRoom_id());
           
            //Sync message to everybody
            syncMessageToCurrentScope("setNewModeratorByList", modRoomList, false);

          } else {
            // The current User is not a Teacher/Admin or whatever
            // Role that should get the
            // Moderation
            currentClient.setIsMod(false);
          }

        } else {

          // If this is a normal Room Moderator rules : first come,
          // first draw ;-)
          log.debug("setRoomValues : Room"
              + room_id
              + " not appointed! Moderator rules : first come, first draw ;-)");
          if (clientListRoom.size() == 1) {
            log.debug("Room is empty so set this user to be moderation role");
            currentClient.setIsMod(true);
          } else {
            log.debug("Room is already somebody so set this user not to be moderation role");

            if (becomeModerator) {
              currentClient.setIsMod(true);

              // Update the Client List
              this.clientListManager.updateClientByStreamId(
                  streamid, currentClient);

              List<RoomClient> modRoomList = this.clientListManager
                  .getCurrentModeratorByRoom(currentClient
                      .getRoom_id());

              // There is a need to send an extra Event here,
              // cause at this moment there could be
              // already somebody in the Room waiting -swagner check this comment, 20.01.2012
             
              //Sync message to everybody
              syncMessageToCurrentScope("setNewModeratorByList", modRoomList, false);

            } else {
              // The current User is not a Teacher/Admin or
              // whatever Role that should get the Moderation
              currentClient.setIsMod(false);
            }

          }

        }

        // Update the Client List
        this.clientListManager.updateClientByStreamId(streamid,
            currentClient);

      } else {

        // If this is an Appointment then the Moderator will be set to
        // the Invitor

        Appointment ment = appointmentLogic
            .getAppointmentByRoom(room_id);

        List<MeetingMember> members = meetingMemberDao
            .getMeetingMemberByAppointmentId(ment
                .getAppointmentId());

        Long userIdInRoomClient = currentClient.getUser_id();

        boolean found = false;
        boolean moderator_set = false;

        // Check if current user is set to moderator
        for (int i = 0; i < members.size(); i++) {
          MeetingMember member = members.get(i);

          // only persistent users can schedule a meeting
          // user-id is only set for registered users
          if (member.getUserid() != null) {
            log.debug("checking user " + member.getFirstname()
                + " for moderator role - ID : "
                + member.getUserid().getUser_id());

            if (member.getUserid().getUser_id()
                .equals(userIdInRoomClient)) {
              found = true;

              if (member.getInvitor()) {
                log.debug("User "
                    + userIdInRoomClient
                    + " is moderator due to flag in MeetingMember record");
                currentClient.setIsMod(true);

                // Update the Client List
                this.clientListManager.updateClientByStreamId(
                    streamid, currentClient);

                List<RoomClient> modRoomList = this.clientListManager
                    .getCurrentModeratorByRoom(currentClient
                        .getRoom_id());

                // There is a need to send an extra Event here, cause at this moment
                // there could be already somebody in the Room waiting

                //Sync message to everybody
                syncMessageToCurrentScope("setNewModeratorByList", modRoomList, false);

                moderator_set = true;
                this.clientListManager.updateClientByStreamId(
                    streamid, currentClient);
                break;
              } else {
                log.debug("User "
                    + userIdInRoomClient
                    + " is NOT moderator due to flag in MeetingMember record");
                currentClient.setIsMod(false);
                this.clientListManager.updateClientByStreamId(
                    streamid, currentClient);
                break;
              }
            } else {
              if (member.getInvitor())
                moderator_set = true;
            }
          } else {
            if (member.getInvitor())
              moderator_set = true;
          }

        }

        if (!found) {
          log.debug("User "
              + userIdInRoomClient
              + " could not be found as MeetingMember -> definitely no moderator");
          currentClient.setIsMod(false);
          this.clientListManager.updateClientByStreamId(streamid,
              currentClient);
        } else {
          // if current user is part of the member list, but moderator
          // couldn't be retrieved : first come, first draw!
          if (clientListRoom.size() == 1 && moderator_set == false) {
            log.debug("");
            currentClient.setIsMod(true);

            // Update the Client List
            this.clientListManager.updateClientByStreamId(streamid,
                currentClient);

            List<RoomClient> modRoomList = this.clientListManager
                .getCurrentModeratorByRoom(currentClient
                    .getRoom_id());

            // There is a need to send an extra Event here, cause at
            // this moment there could be
            // already somebody in the Room waiting

            //Sync message to everybody
            syncMessageToCurrentScope("setNewModeratorByList", modRoomList, false);
           
            this.clientListManager.updateClientByStreamId(streamid,
                currentClient);
          }
        }

      }
     
     
      //Sync message to everybody
      syncMessageToCurrentScope("addNewUser", currentClient, false);

      //Status object for Shared Browsing
      BrowserStatus browserStatus = (BrowserStatus) current.getScope()
          .getAttribute("browserStatus");

      if (browserStatus == null) {
        browserStatus = new BrowserStatus();
      }

      // RoomStatus roomStatus = new RoomStatus();

      // FIXME: Rework Client Object to DTOs
      roomStatus.setClientMap(clientListRoom);
      roomStatus.setBrowserStatus(browserStatus);

      return roomStatus;
    } catch (Exception err) {
      log.error("[setRoomValues]", err);
    }
View Full Code Here

TOP

Related Classes of org.openmeetings.app.conference.whiteboard.RoomStatus

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.