Звездочка Ява Ами 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 ){
//
}
}
но, к сожалению, это переопределяет другие специфические события метода, и я не хочу перемещать их все сюда.