Ciao a tutti... sto realizzando un sistema per interrogare una pagina ASP attraverso un'applet (a dire il vero è un javascript che fa richieste all'applet la quale interroga l'asp) un po' come i remotescripting di microsoft.
Ora il codice l'ho scritto, e sembra funzionare... mi chiedevo se potevate aiutarmi ad ottimizzarlo, io non sono un utente esperto di java e sicuramente ho fatto degli errori. Posto il codice (445 righe):
codice:
/* Realizzata da AKKAttp S.n.c.
*
*
*/
import java.applet.Applet;
import java.awt.Graphics;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.*;
public class AKKAremote extends Applet{
private Dati d;
private Leggi leg;
private Scrivi scr;
public AKKAremote(){
d=new Dati();
}
public void init(){}
public void setDivisoreDati(String a){
d.setDivis(a);
}
public String getDivisoreDati(){
return d.getDivis();
}
public void inviaRichiesta(String a){
scr = new Scrivi(d);
scr.setIndirizzo(a);
scr.start();
}
public String riceviRichiesta(){
leg = new Leggi(d);
leg.start();
while(!d.isInviato()){ }
repaint();
scr=null;
leg=null;
return d.toString();
}
public void paint(Graphics g){
g.drawString("Letto da: "+d.getHost(),10,25 );
g.drawString("Nome richiesta: "+d.getNome() ,10,40 );
g.drawString("Stato dati: "+d.getStatoDati() ,10,55);
g.drawString("Tipo dati: "+d.getTipoDati() ,10,70 );
g.drawString("Separatore: "+d.getSeparatore(),10,85 );
g.drawString("Dati: "+ d.getValore(),10,100);
g.drawString("Flag Errore: "+ d.getFlagErrore(),10,115);
g.drawString("MSG Errore: "+ d.getMsgErrore(),10,130);
g.drawString("Str ricevuta: "+ d.getRicevuto(),10,145);
}
/*
public static void main(String[] args){
Dati d=new Dati();
Scrivi scr = new Scrivi(d);
scr.setIndirizzo("http://localhost/akkaremote/functions.asp");
Leggi leg = new Leggi(d);
scr.start();
leg.start();
while(!d.isInviato()){}
System.out.println("Leggo...: "+d.getValore());
}
*/
}
//***************************** Classe SCRIVI **********************************
class Scrivi extends Thread{
private Dati dati;
private BufferedReader in;
private InputStream inputstream;
private StringTokenizer st;
private int contaRichiesta=0;
private String ricevuto="";
private String indirizzo="";
public Scrivi(Dati v){
dati=v;
}
public void run(){
inserisci(indirizzo);
}
public void setIndirizzo(String a){
indirizzo=a;
}
public String getIndirizzo(){
return indirizzo;
}
public void inserisci(String a){
synchronized (dati){
//try{
if(!isInterrupted()){
dati.resetta();
dati.setHost(a);
contaRichiesta++;
dati.setNome("Richiesta n°" + contaRichiesta);
prendiDati(a);
}
//}catch(InterruptedException e){}
}
}
protected void prendiDati(String host){
URL url;
dati.setStato(1);
try{
url = new URL(host);
inputstream = (url).openStream();
dati.setMsgErrore(inputstream.toString());
in = new BufferedReader(new InputStreamReader(inputstream));
String line;
while ((line = riceviMessaggio())!=null){
if (line.equals("")) continue;
dati.setStato(2);
st = new StringTokenizer(line);
int count = st.countTokens();
if(count>=9) break;
}
ricevuto=line;
dati.setRicevuto(ricevuto);
try{
String cmd=st.nextToken();
if(cmd.equals("START")){
cmd=st.nextToken();
if(cmd.equals("TYPE")){
cmd=st.nextToken();
dati.setTipo(calcolaTipo(cmd));
cmd=st.nextToken();
if(cmd.equals("SEP")){
cmd=st.nextToken();
dati.setSeparatore(cmd);
cmd=st.nextToken();
if(cmd.equals("DATA")){
cmd=st.nextToken();
dati.setValore(cmd);
cmd=st.nextToken();
if(cmd.equals("ERROR")){
cmd=st.nextToken();
if(cmd.equals("0")){
dati.setFlagErrore(false);
dati.setMsgErrore("Nessun Errore!");
}else{
dati.setFlagErrore(true);
dati.setMsgErrore(cmd);
}
cmd=st.nextToken();
if(cmd.equals("END")){
dati.setStato(3);
}else{
dati.setFlagErrore(true);
dati.setMsgErrore("Stringa di ritorno senza terminazione END");
}
}else{
dati.setFlagErrore(true);
dati.setMsgErrore("Alla stringa di ritorno manca l'ERROR");
}
}else{
dati.setFlagErrore(true);
dati.setMsgErrore("Alla stringa di ritorno manca il DATA");
}
}else{
dati.setFlagErrore(true);
dati.setMsgErrore("Alla stringa di ritorno manca il SEP");
}
}else{
dati.setFlagErrore(true);
dati.setMsgErrore("Alla stringa di ritorno manca il TYPE");
}
}else{
dati.setFlagErrore(true);
dati.setMsgErrore("Alla stringa di ritorno manca lo START");
}
}catch(NoSuchElementException _e){
dati.setFlagErrore(true);
dati.setMsgErrore(_e.toString());
}
inputstream.close();
//thread.stop();
}catch(FileNotFoundException _e){
dati.setFlagErrore(true);
dati.setMsgErrore("File Not Found! Manca il file contenente le funzioni lato server.");
}catch(MalformedURLException _e){
dati.setFlagErrore(true);
dati.setMsgErrore("Errore! L'URL non è scritto correttamente.");
}catch(IOException _e){
dati.setFlagErrore(true);
dati.setMsgErrore("Errore di IO nella funzione prendiDati.");
dati.resetta();
}
}
private String riceviMessaggio() {
String line = null;
try {
line = in.readLine();
} catch (IOException e) {
dati.setFlagErrore(true);
dati.setMsgErrore("Errore di IO nella funzione riceviMessaggio.");
}
return line;
}
private int calcolaTipo(String a){
int val;
if(a.equals("0")) val=0; //null
else if(a.equals("1")) val=1; //boolean
else if(a.equals("2")) val=2; //byte
else if(a.equals("3")) val=3; //int
else if(a.equals("4")) val=4; //long
else if(a.equals("5")) val=5; //float
else if(a.equals("6")) val=6; //double
else if(a.equals("7")) val=7; //char
else if(a.equals("8")) val=8; //string
else if(a.equals("9")) val=9; //array
else if(a.equals("10")) val=10; //date
else val=-1; // non esistente
return val;
}
}
//***************************** Classe LEGGI ***********************************
class Leggi extends Thread{
Dati dati;
public Leggi(Dati v){
dati=v;
}
public void estrapola(){
synchronized (dati){
//System.out.println("Sto abilitando la lettura");
dati.setStato(4);
}
}
public void run(){
estrapola();
}
}
//***************************** Classe DATI ************************************
class Dati{
private String valore,nome,msgErrore,host,separatore,ricevuto,divis;
private int stato,tipo;
private boolean flagErrore;
public Dati(){
nome="Senza Nome";
stato=0;
tipo=8;
flagErrore=false;
msgErrore="Nessun Errore!";
valore="";
host="";
separatore="";
ricevuto="";
divis="[T]";
}
public void resetta(){
this.setNome("Senza nome");
this.setStato(0);
this.setTipo(8);
this.setFlagErrore(false);
this.setMsgErrore("Nessun Errore!");
this.setValore("");
this.setSeparatore("");
this.setRicevuto("");
}
public String getNome(){
return nome;
}
public String getDivis(){
return divis;
}
public String getSeparatore(){
return separatore;
}
public String getHost(){
return host;
}
public int getStato(){
return stato;
}
public int getTipo(){
return tipo;
}
public boolean getFlagErrore(){
return flagErrore;
}
public String getMsgErrore(){
return msgErrore;
}
public String getValore(){
return valore;
}
public String getTipoDati(){
String a;
switch (tipo){
case 0: a="null";
break;
case 1: a="boolean";
break;
case 2: a="byte";
break;
case 3: a="int";
break;
case 4: a="long";
break;
case 5: a="float";
break;
case 6: a="double";
break;
case 7: a="char";
break;
case 8: a="string";
break;
case 9: a="array";
break;
case 10: a="date";
break;
case -1: a="inesistente";
break;
default: a="Tipo non compatibile";
}
return a;
}
public String getStatoDati(){
String a;
switch (stato){
case 0: a="libero";
break;
case 1: a="inizio";
break;
case 2: a="incompleto";
break;
case 3: a="completo";
break;
case 4: a="inviato";
break;
default: a="Stato non precisato";
}
return a;
}
public void setDivis(String a){
divis=a;
}
public String getRicevuto(){
return ricevuto;
}
public void setNome(String a){
nome=a;
}
public void setSeparatore(String a){
separatore=a;
}
public void setHost(String a){
host=a;
}
public void setStato(int a){
stato=a;
}
public void setTipo(int a){
tipo=a;
}
public void setFlagErrore(boolean a){
flagErrore=a;
}
public void setMsgErrore(String a){
msgErrore=a;
}
public void setValore(String a){
valore=a;
}
public void setRicevuto(String a){
ricevuto=a;
}
public boolean isLibero(){
if(stato==0)
return true;
else
return false;
}
public boolean isInviato(){
if(stato==4)
return true;
else
return false;
}
public String toString(){
String str =this.getFlagErrore()+divis+this.getTipo()+divis+this.getValore()+divis+this.getSeparatore()+divis+this.getMsgErrore();
return str;
}
}
Spero che qualcuno colga il mio appello!
Grazie
Rino