Звездочка Ява Ами CelEvent

Мне нужно слушать CelEvent от звездочки в моем приложении. У меня есть некоторые события (dial, Hangup и т. Д.) От AbstractManagerEventListener, который работает хорошо.

public class AsteriskServerListener implements org.asteriskjava.live.AsteriskServerListener, PropertyChangeListener{

public AsteriskServerListener(String host, String user, String pass) {
    asteriskServer = new DefaultAsteriskServer(host, user, pass);
}

public void run() {
    asteriskServer.addAsteriskServerListener(this);
    asteriskServer.addChainListener(new AbstractManagerEventListener() {




        @Override
        protected void handleEvent(HangupEvent event) {
            super.handleEvent(event);

            if (calls.containsKey(event.getUniqueId())) {
                Call call = calls.get(event.getUniqueId());
                if(call.getTimeStop()==null)
                    call.setTimeStop(event.getDateReceived());

                if(call.getIdChain()==null){
                    if(call.getChainType().getId()==1){
                        call.setIdChain(UUID.randomUUID());
                        call.setChainType(new CallChainType((short)3, "пропущенный"));
                        callService.addConnection(call);
                    }
                }else{
                    if(call.getLinkIds()==null || call.getLinkIds().size()<=1){
                        callService.updateCommutation(call);
                    }else{
                        boolean isSmaller = true;
                        for(String str: call.getLinkIds()){
                            if(str.compareTo(event.getUniqueId()) > 0 ){
                                isSmaller = false;
                                break;
                            }
                        }
                        if(isSmaller){
                            callService.combineCommutationsToCall(call.getIdChain(), call.getLinkIds());
                        }
                    }
                }
                calls.remove(event.getUniqueId());
            }
            fileService.writeAsteriskEventInFile(event.getUniqueId(), event.getClass().getSimpleName(), event.toString());
        }

        @Override
        protected void handleEvent(AgentsEvent event) {
            super.handleEvent(event);
        }

        @Override
        protected void handleEvent(AgentsCompleteEvent event) {
            super.handleEvent(event);
        }

        @Override
        @Transactional
        protected void handleEvent(NewStateEvent event) {
//                if(event.getConnectedLineName()!=null){
//                    callService.joinCallsToChain(event.getUniqueId(),     event.getLinkedId());
//                }

            fileService.writeAsteriskEventInFile(event.getUniqueId(), event.getClass().getSimpleName(), event.toString());

            if (event.getChannel() != null) {
                if (callerCheck(event.getChannel()).matches("\\d{2,4}")) {
                    if ("Ringing".equalsIgnoreCase(event.getChannelStateDesc())) {
                        for (User u : (List<User>) userDao.getManangers(false)) {
                            if (u.getTech() != null && u.getPrefix() != null && event.getChannel().toLowerCase().contains(u.getTech().toLowerCase() + "/" + u.getPrefix())) {
                                callPanelService.incommingCall(event.getConnectedLineNum(), u.getPrefix(), event.getUniqueId());
                            }
                        }
                    }
                }
            }
        }

        @Override
        protected void handleEvent(CoreShowChannelsCompleteEvent event) {
            super.handleEvent(event);
        }

        @Override
        protected void handleEvent(CoreShowChannelEvent event) {
            super.handleEvent(event);
        }

        @Override
        protected void handleEvent(PeerStatusEvent event) {
            //super.handleEvent(event);
        }

        @Override
        protected void handleEvent(ExtensionStatusEvent event) {
            fileService.writeAsteriskEventInFile(event.getCallerId(), event.getClass().getSimpleName(), event.toString());
            if ("Idle".equalsIgnoreCase(event.getStatustext())) {
                if (event.getExten() != null && event.getStatus() == 0) {
                    callPanelService.hangupCall(event.getExten());
                }
            }
        }

        @Override
        protected void handleEvent(HangupRequestEvent event) {
            //super.handleEvent(event);
            fileService.writeAsteriskEventInFile(event.getUniqueId(), event.getClass().getSimpleName(), event.toString());
        }

        @Override
        protected void handleEvent(CdrEvent event) {
            super.handleEvent(event);
            fileService.writeAsteriskEventInFile(event.getUniqueId(), event.getClass().getSimpleName(), event.toString());
        }
    });
}
}

Но теперь мне нужен CelEven (AbstractManagerEventListener не содержит его). Как решить эту проблему? Конечно, я могу сделать что-то подобное

@Override
        public void onManagerEvent(ManagerEvent event) {
            if(event instanceof CelEvent ){
                       //
              }
 }

но, к сожалению, это переопределяет другие специфические события метода, и я не хочу перемещать их все сюда.

0 ответов

Другие вопросы по тегам