return dispatchEvent(target,evt,getCommMode(),getEventTimeout());
}
public boolean dispatchEvent(EventTarget target,Event evt,int commMode,long eventTimeout) throws EventException
{
final ItsNatStfulDocumentImpl itsNatDoc = getItsNatStfulDocument();
if (Thread.holdsLock(itsNatDoc))
throw new ItsNatException("Document must be unlocked in this call",this);
if (this != itsNatDoc.getEventDispatcherClientDocByThread())
throw new ItsNatException("This thread is not an event dispatcher thread");
((EventInternal)evt).checkInitializedEvent();
((EventInternal)evt).setTarget(target);
final long evtDispMaxWait = itsNatDoc.getEventDispatcherMaxWait();
final boolean[] monitor = new boolean[1];
synchronized(itsNatDoc)
{
JSRenderNodeImpl.addCodeDispatchEvent(target,evt,"res",this);
EventListener listener = new EventListenerInternal()
{
public void handleEvent(Event evt)
{
ItsNatContinueEvent contEvt = (ItsNatContinueEvent)evt;
// El hilo que ejecuta este m�todo es un hilo request/response
monitor[0] = Boolean.getBoolean((String)contEvt.getExtraParam("itsnat_res"));
synchronized(monitor)
{
monitor.notifyAll(); // Desbloquea el hilo dispatcher de eventos
}
itsNatDoc.lockThread(evtDispMaxWait); // Bloquea el hilo del request/response para una posible siguiente llamada a dispatchEvent
}
};
CustomParamTransport param = new CustomParamTransport("itsnat_res","res");
addContinueEventListener(null,listener,commMode,new ParamTransport[]{param},null,eventTimeout);
itsNatDoc.notifyAll(); // Desbloquea el hilo del request/response para que se env�e el c�digo al browser
}
synchronized(monitor)
{
// Bloqueamos el hilo dispatcher de eventos esperando la respuesta del navegador