Package org.red5.server.adapter

Examples of org.red5.server.adapter.MultiThreadedApplicationAdapter


    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();
      }
     
View Full Code Here


   * @return
   */
  public synchronized RoomClient setUsername(Long userId, String username, String firstname, String lastname){
    try {
      log.debug("#*#*#*#*#*#*# setUsername userId: "+userId+" username: "+username+" firstname: "+firstname+" lastname: "+lastname);
      IConnection current = Red5.getConnectionLocal();     
      String streamid = current.getClient().getId();
      RoomClient currentClient = this.clientListManager.getClientByStreamId(streamid);
     
      log.debug("[setUsername] id: "+currentClient.getStreamid());
     
      currentClient.setUsername(username);
View Full Code Here

  public synchronized RoomClient setUsernameReconnect(String SID, Long userId,
          String username, String firstname, String lastname,
          String picture_uri){
    try {
      log.debug("#*#*#*#*#*#*# setUsername userId: "+userId+" username: "+username+" firstname: "+firstname+" lastname: "+lastname);
      IConnection current = Red5.getConnectionLocal();     
      String streamid = current.getClient().getId();
      RoomClient currentClient = this.clientListManager.getClientByStreamId(streamid);
     
      log.debug("[setUsername] id: "+currentClient.getStreamid());
     
      currentClient.setUsername(username);
View Full Code Here

          }
          String scopeName = "hibernate";
          if (rcl.getRoom_id() != null) {
            scopeName = rcl.getRoom_id().toString();
          }
          IScope currentScope = ScopeApplicationAdapter.getInstance()
              .getRoomScope(scopeName);
          ScopeApplicationAdapter.getInstance().roomLeaveByScope(rcl,
              currentScope);

          HashMap<Integer, String> messageObj = new HashMap<Integer, String>();
View Full Code Here

        String scopeName = "hibernate";
        if (rcl.getRoom_id() != null) {
          scopeName = rcl.getRoom_id().toString();
        }
        IScope currentScope = ScopeApplicationAdapter.getInstance()
            .getRoomScope(scopeName);
        ScopeApplicationAdapter.getInstance().roomLeaveByScope(rcl,
            currentScope);

        HashMap<Integer, String> messageObj = new HashMap<Integer, String>();
View Full Code Here

         }
         String scopeName = "hibernate";
         if (rcl.getRoom_id() != null) {
           scopeName = rcl.getRoom_id().toString();
         }
         IScope currentScope = this.scopeApplicationAdapter.getRoomScope(scopeName);
         this.scopeApplicationAdapter.roomLeaveByScope(rcl, currentScope);
        
        
         HashMap<Integer,String> messageObj = new HashMap<Integer,String>();
         messageObj.put(0, "kick");
View Full Code Here

          }
          String scopeName = "hibernate";
          if (rcl.getRoom_id() != null) {
            scopeName = rcl.getRoom_id().toString();
          }
          IScope currentScope = this.scopeApplicationAdapter.getRoomScope(scopeName);
         
          HashMap<Integer,String> messageObj = new HashMap<Integer,String>();
          messageObj.put(0, "kick");
         
          this.scopeApplicationAdapter.sendMessageById(messageObj, rcl.getStreamid(), currentScope);
View Full Code Here

    // ------------------------------------------------------------------------

    private void createPlayStream( IPendingServiceCallback callback ) {

        logger.debug( "create play stream" );
        IPendingServiceCallback wrapper = new CreatePlayStreamCallBack( callback );
        invoke( "createStream", null, wrapper );
    }
View Full Code Here

      if (stream.getStreamListeners() != null) {
       
        for (Iterator<IStreamListener> iter = stream.getStreamListeners().iterator();iter.hasNext();) {
         
          IStreamListener iStreamListener = iter.next();
         
          ListenerAdapter listenerAdapter = (ListenerAdapter) iStreamListener;
         
          log.debug("Stream Closing ?? "+listenerAdapter.getFlvRecordingMetaDataId()+ " " +flvRecordingMetaDataId);
         
View Full Code Here

            if ( !( event instanceof IRTMPEvent ) ) {
                logger.debug( "skipping non rtmp event: " + event );
                return;
            }

            IRTMPEvent rtmpEvent = (IRTMPEvent) event;

            if ( logger.isDebugEnabled() ) {
                // logger.debug("rtmp event: " + rtmpEvent.getHeader() + ", " +
                // rtmpEvent.getClass().getSimpleName());
            }

            if ( !( rtmpEvent instanceof IStreamData ) ) {
                logger.debug( "skipping non stream data" );
                return;
            }

            if ( rtmpEvent.getHeader().getSize() == 0 ) {
                logger.debug( "skipping event where size == 0" );
                return;
            }

            if ( rtmpEvent instanceof VideoData ) {
View Full Code Here

TOP

Related Classes of org.red5.server.adapter.MultiThreadedApplicationAdapter

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.