si il codice funziona.. per provarlo invece di utilizzare le istruzioni per i metodi della applet ho provato con una semplice sostituzione del colore dello sfondo della pagina web e funziona.
codice:
function setup() {
window.onfocus = riceveFocus;
window.onblur = perdeFocus;
}
function riceveFocus() {
document.bgColor = '#0000FF';
}
function perdeFocus() {
document.bgColor = '#00FF00';
}
se invece utilizzo i medoti della applet, la pagina web si blocca e si impalla..
codice javascript:
codice:
function setup() {
window.onfocus = riceveFocus;
window.onblur = perdeFocus;
}
function riceveFocus() {
document.applets[0].riceveFocus();
}
function perdeFocus() {
document.applets[0].perdeFocus();
}
Lo scopo della applet è quella di aprire un socket e rimanere in ascolto.. Quando arriva un messaggio ("ref") fa il refresh della pagina web in cui si trova. Questo refresh lo si vuole solo se la pagina non ha il focus (da qui l'esigenza delle funzioni javascript che facciano il test se il browser è in primo piano, dato che con la applet non ci riesco a verificare questa condizione)
Quindi l'idea è che le funzioni javascript aggiornino l'attributo "focus" della applet continuamente in modo che quando il messaggio "ref" arriva l'applet vede se "focus" è true o false.
Il problema è come detto che il tutto si impalla.. e la pagina web si blocca. (forse perche l'applet è bloccata nell'attesa del messaggio? e non puo eseguire altre istruzioni?)
posto il codice della applet, il codice di interesse è in grassetto:
codice:
<applet code="ClassApplet.class" width=0 height=0> </applet>
import java.io.*;
import java.net.*;
import java.util.*;
import java.applet.Applet;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.Socket;
import java.net.URL;
import java.applet.*;
import java.awt.*;
import java.*;
import java.lang.Object;
public class ClassApplet extends Applet{
private URL url = null;
private String pageURL="http://localhost:8080/SM4ALL/index.jsp";
private MulticastSocket socket;
private boolean focus = false;
public void riceveFocus() {
focus = true;
System.out.println("focus: " + focus);
}
public void perdeFocus() {
focus = false;
System.out.println("focus: " + focus);
}
public boolean getFocus() {
return focus;
}
public void init() {
super.init();
System.out.println("init()");
try {
socket = new MulticastSocket(5009);
}
catch (IOException e) {
e.printStackTrace();
}
try {
InetAddress group = InetAddress.getByName("230.0.0.9");
System.out.println("Eseguito inet");
socket.joinGroup(group);
System.out.println("joingroup");
byte[] buf = new byte[255];
DatagramPacket packet;
System.out.println("datagram");
packet = new DatagramPacket(buf, buf.length);
System.out.println("getdocument: " + getDocumentBase());
System.out.println("");
System.out.println("");
System.out.println("while");
System.out.println("Attesa dal server");
socket.receive(packet);
String received = new String(packet.getData());
String messaggio = received.substring(0,3);
if(messaggio.equals("ref") ) {
System.out.println("ref ricevuto");
// refresh tramite comando applet
if(!getFocus()) {
System.out.println("refres");
this.getAppletContext().showDocument(getDocumentBase());
socket.close();
System.out.println("Uscita ref");
}
}
}
catch (Exception e) {
e.printStackTrace();
socket.close();
}
}// metod
public void stop() {
super.stop();
System.out.println("Uscita stop");
socket.close();
}
public void destroy() {
super.destroy();
System.out.println("Uscita des");
socket.close();
}
}