@Override public void appDisconnect(IConnection conn) { String clientId = Red5.getConnectionLocal().getClient().getId(); String userid = getUserId(); String username = getUsername(); String remoteHost = Red5.getConnectionLocal().getRemoteAddress(); int remotePort = Red5.getConnectionLocal().getRemotePort(); log.info("[clientid={}] disconnnected from {}.", clientId, remoteHost + ":" + remotePort); log.debug( "{} [clientid={}] is leaving the voice conf app. Removing from ConnectionManager.", username + "[uid=" + userid + "]", clientId); clientConnManager.removeClient(clientId); String peerId = (String) Red5.getConnectionLocal().getAttribute("VOICE_CONF_PEER"); if (peerId != null) { try { log.debug( "Forcing hang up {} [clientid={}] in case the user is still in the conference.", username + "[uid=" + userid + "]", clientId); sipPeerManager.hangup(peerId, clientId); } catch (PeerNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
@Override public boolean appStart(IScope scope) { log.debug("VoiceConferenceApplication appStart[" + scope.getName() + "]"); callStreamFactory = new CallStreamFactory(); callStreamFactory.setScope(scope); sipPeerManager.setCallStreamFactory(callStreamFactory); sipPeerManager.setClientConnectionManager(clientConnManager); sipPeerManager.createSipPeer("default", sipServerHost, sipPort, startAudioPort, stopAudioPort); try { sipPeerManager.register("default", username, password); } catch (PeerNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return true; }