diff --git a/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/FreeswitchApplication.java b/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/FreeswitchApplication.java index 9b3f5b343394f37bf1bc092645f0c615bfec2149..f7ee81f3331d60a7c633b93e60dc016cbd03942d 100755 --- a/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/FreeswitchApplication.java +++ b/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/FreeswitchApplication.java @@ -162,43 +162,47 @@ public class FreeswitchApplication implements IDelayedCommandListener{ Runnable task = new Runnable() { public void run() { log.info("Sending message: " + command.getCommand() + " " + command.getCommandArgs()); - if (command instanceof GetAllUsersCommand) { - GetAllUsersCommand cmd = (GetAllUsersCommand) command; - manager.getUsers(cmd); - } else if (command instanceof MuteUserCommand) { - MuteUserCommand cmd = (MuteUserCommand) command; - manager.mute(cmd); - } else if (command instanceof EjectUserCommand) { - EjectUserCommand cmd = (EjectUserCommand) command; - manager.eject(cmd); - } else if (command instanceof EjectAllUsersCommand) { - EjectAllUsersCommand cmd = (EjectAllUsersCommand) command; - manager.ejectAll(cmd); - - CheckIfConfIsRunningCommand command = new CheckIfConfIsRunningCommand(cmd.getRoom(), - cmd.getRequesterId(), - delayedCommandSenderService, 0); - delayedCommandSenderService.handleMessage(command, 5000); - } else if (command instanceof TransferUserToMeetingCommand) { - TransferUserToMeetingCommand cmd = (TransferUserToMeetingCommand) command; - manager.tranfer(cmd); - } else if (command instanceof RecordConferenceCommand) { - manager.record((RecordConferenceCommand) command); - } else if (command instanceof ScreenshareBroadcastRTMPCommand) { - manager.broadcastRTMP((ScreenshareBroadcastRTMPCommand) command); - } else if (command instanceof ScreenshareHangUpCommand) { - ScreenshareHangUpCommand cmd = (ScreenshareHangUpCommand) command; - manager.hangUp(cmd); - } else if (command instanceof BroadcastConferenceCommand) { - manager.broadcast((BroadcastConferenceCommand) command); - } else if (command instanceof ConferenceCheckRecordCommand) { - manager.checkIfConferenceIsRecording((ConferenceCheckRecordCommand) command); - } else if (command instanceof CheckIfConfIsRunningCommand) { - manager.checkIfConfIsRunningCommand((CheckIfConfIsRunningCommand) command); - } else if (command instanceof ForceEjectUserCommand) { - manager.forceEjectUser((ForceEjectUserCommand) command); - } else if (command instanceof GetUsersStatusCommand) { - manager.getUsersStatus((GetUsersStatusCommand) command); + try { + if (command instanceof GetAllUsersCommand) { + GetAllUsersCommand cmd = (GetAllUsersCommand) command; + manager.getUsers(cmd); + } else if (command instanceof MuteUserCommand) { + MuteUserCommand cmd = (MuteUserCommand) command; + manager.mute(cmd); + } else if (command instanceof EjectUserCommand) { + EjectUserCommand cmd = (EjectUserCommand) command; + manager.eject(cmd); + } else if (command instanceof EjectAllUsersCommand) { + EjectAllUsersCommand cmd = (EjectAllUsersCommand) command; + manager.ejectAll(cmd); + + CheckIfConfIsRunningCommand command = new CheckIfConfIsRunningCommand(cmd.getRoom(), + cmd.getRequesterId(), + delayedCommandSenderService, 0); + delayedCommandSenderService.handleMessage(command, 5000); + } else if (command instanceof TransferUserToMeetingCommand) { + TransferUserToMeetingCommand cmd = (TransferUserToMeetingCommand) command; + manager.tranfer(cmd); + } else if (command instanceof RecordConferenceCommand) { + manager.record((RecordConferenceCommand) command); + } else if (command instanceof ScreenshareBroadcastRTMPCommand) { + manager.broadcastRTMP((ScreenshareBroadcastRTMPCommand) command); + } else if (command instanceof ScreenshareHangUpCommand) { + ScreenshareHangUpCommand cmd = (ScreenshareHangUpCommand) command; + manager.hangUp(cmd); + } else if (command instanceof BroadcastConferenceCommand) { + manager.broadcast((BroadcastConferenceCommand) command); + } else if (command instanceof ConferenceCheckRecordCommand) { + manager.checkIfConferenceIsRecording((ConferenceCheckRecordCommand) command); + } else if (command instanceof CheckIfConfIsRunningCommand) { + manager.checkIfConfIsRunningCommand((CheckIfConfIsRunningCommand) command); + } else if (command instanceof ForceEjectUserCommand) { + manager.forceEjectUser((ForceEjectUserCommand) command); + } else if (command instanceof GetUsersStatusCommand) { + manager.getUsersStatus((GetUsersStatusCommand) command); + } + } catch (RuntimeException e) { + log.warn(e.getMessage()); } } }; diff --git a/bbb-fsesl-client/src/main/java/org/freeswitch/esl/client/inbound/InboundClientHandler.java b/bbb-fsesl-client/src/main/java/org/freeswitch/esl/client/inbound/InboundClientHandler.java old mode 100644 new mode 100755 index 68c9f277e50345ad274f7e5713b2dd41538c0e0b..a77889d7ac0d29466ab9a93300ff35065151e929 --- a/bbb-fsesl-client/src/main/java/org/freeswitch/esl/client/inbound/InboundClientHandler.java +++ b/bbb-fsesl-client/src/main/java/org/freeswitch/esl/client/inbound/InboundClientHandler.java @@ -23,6 +23,7 @@ import org.freeswitch.esl.client.transport.message.EslHeaders.Value; import org.freeswitch.esl.client.transport.message.EslMessage; import org.jboss.netty.channel.ChannelHandlerContext; import org.jboss.netty.handler.execution.ExecutionHandler; +import org.jboss.netty.channel.ExceptionEvent; /** * End users of the inbound {@link Client} should not need to use this class. @@ -82,5 +83,15 @@ public class InboundClientHandler extends AbstractEslClientHandler log.debug( "Received disconnection notice" ); listener.disconnected(); } - + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception + { + if ("WAIT_FOR_ESL_RESPONSE_TIMEOUT".equals(e.getCause().getMessage())) { + throw new RuntimeException("WAIT_FOR_ESL_RESPONSE_TIMEOUT"); + } else { + log.warn(e.getCause().getMessage()); + } + + } } diff --git a/bbb-fsesl-client/src/main/java/org/freeswitch/esl/client/internal/AbstractEslClientHandler.java b/bbb-fsesl-client/src/main/java/org/freeswitch/esl/client/internal/AbstractEslClientHandler.java old mode 100644 new mode 100755 index 6c0131fc85eda715779eec990784ebb6eed94d54..81d974826ddd7114127cfee5b4d57e735995c700 --- a/bbb-fsesl-client/src/main/java/org/freeswitch/esl/client/internal/AbstractEslClientHandler.java +++ b/bbb-fsesl-client/src/main/java/org/freeswitch/esl/client/internal/AbstractEslClientHandler.java @@ -19,6 +19,7 @@ import java.util.List; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @@ -231,15 +232,18 @@ public abstract class AbstractEslClientHandler extends SimpleChannelUpstreamHand try { log.trace( "awaiting latch ... " ); - latch.await(); + if (latch.await(10, TimeUnit.SECONDS)) { + log.trace( "returning response [{}]", response ); + return response; + } else { + log.warn("Timeout waiting for response from ESL command."); + throw new RuntimeException("WAIT_FOR_ESL_RESPONSE_TIMEOUT"); + } } catch ( InterruptedException e ) { throw new RuntimeException( e ); } - - log.trace( "returning response [{}]", response ); - return response; } /**