Serveren import java.util.*; /* * Created on 23-08-2006 * @author rling public class Aktivitet implements Global Object[] boff; String[] buff; //ArrayList aktiviteter; //ArrayList egenskaber; Model model; String navn; Objekt objekt; Beskrivelse beskrivelse; * public Aktivitet(String navn, String krop, Objekt objekt, Model model) if(funk.od) System.out.println(" - " + navn + " : " + krop); this.model = model; this.navn = navn; this.objekt = objekt; String temp = krop; // Under aktiviteter int antal = funk.tal((boff = funk.tal(temp, model.log10_max))[0]); temp = (String)boff[1]; if(antal > 0) if(objekt.aktiviteter == null) objekt.aktiviteter = new ArrayList();
for(int tal = 0; tal < antal; tal ++) String a = (buff = funk.tex(temp, model.log10_max))[0]; temp = buff[1]; objekt.aktiviteter.add(new Aktivitet((buff = funk.tex(a, model.log10_max))[0], buff[1], objekt, model)); // Egenskaber antal = funk.tal((boff = funk.tal(temp, model.log10_max))[0]); temp = (String)boff[1]; if(antal > 0) if(objekt.egenskaber == null) objekt.egenskaber = new ArrayList(); for(int tal = 0; tal < antal; tal ++) String e = (buff = funk.tex(temp, model.log10_max))[0]; temp = buff[1]; objekt.egenskaber.add(new Egenskab((buff = funk.tex(e, model.log10_max))[0], (buff = funk.tex(buff[1], model.log10_max))[0], model)); // Beskrivelse temp = (buff = funk.tex(temp, model.log10_max))[0]; beskrivelse = new Beskrivelse((buff = funk.tex(temp, model.log10_max))[0], buff[1], objekt, model, 1); import java.util.*; /*
* Created on 23-08-2006 * @author rling public class Beskrivelse implements Global Model model; ArrayList beskrivelser; String tilknytning, navn, type; Object[] boff; String[] buff; Objekt objekt; // TODO Kun til debug, skla fjernes igen!! int level; public Beskrivelse(String type, String krop, Objekt objekt, Model model, int level) this.model = model; this.type = type; this.objekt = objekt; this.level = level; String temp = krop; // navn navn = (buff = funk.tex(krop, model.log10_max))[0]; temp = buff[1]; System.out.println("type = " + type + ", navn = " + navn); // Tilknytning tilknytning = (buff = funk.tex(temp, model.log10_max))[0]; temp = buff[1]; if(funk.od) System.out.println(" - " + level + ". "+ navn + " (" + tilknytning + ")"); // Under beskrivelser int antal = funk.tal((boff = funk.tal(temp, model.log10_max))[0]); temp = (String)boff[1]; if(antal > 0)
beskrivelser = new ArrayList(); for(int tal = 0; tal < antal; tal ++) String b = (buff = funk.tex(temp, model.log10_max))[0]; temp = buff[1]; beskrivelser.add(new Beskrivelse((buff = funk.tex(b, model.log10_max))[0], buff[1], objekt, model, level + 1)); import java.net.*; import java.io.*; import java.util.*; import com.sun.tools.javac.*; /* * Created on 21-08-2006 * @author rling public class Bruger extends Thread implements Global Socket stik = null; static int nummer = 1; int id = 0; String navn = "Anomym"; boolean logind = false; boolean afbyd = false; public PrintWriter ud; public BufferedReader ind; * public Bruger(Socket forbindelse)
super(); // TODO Auto-generated constructor stub stik = forbindelse; id = nummer++; /* (non-javadoc) * @see java.lang.runnable#run() public void run() // TODO Auto-generated method stub try ud = new PrintWriter(stik.getOutputStream(), true); ind = new BufferedReader(new InputStreamReader(stik.getInputStream())); lytter(); catch(exception e) public void lytter() String besked = ""; while(!besked.equals("f")) try besked = ind.readline(); if(besked == null) break; funk.log(funk.log + "net.log", funk.hent_tid() + " : Modtog " + besked + " fra " + navn); char pro = besked.charat(0); if(!besked.equals("f")) besked = besked.substring(1); switch(pro) case 'O': // Opret forbindelse logind(besked); break; case 'S': // Modtager model fra klient // oversaet modellen til java og gem den! // HUSK at opdater
modellisten! model(besked); break; case 'K': // Koer modellen //oversaet javafilen til class-fil og koer start metoden kor(besked); break; //case 'B': navn = besked; default : // Fejl!!! //System.out.println("D: modtog '" + besked + "'"); catch(exception e)e.printstacktrace(); luk(); public void kor(string m) // Gem psi som java filer Model model = (Model)Start.model.get(m); ArrayList a = gemjava(model); if(a.isempty()) // Oversaet fra java til Class filer! ArrayList b = over(model); if(b.isempty()) // Start simuleringen! //System.out.println("D: Alt oversat ok! :-)"); run(model); else String til = "EJava objekterne : "; for(iterator i = b.iterator(); i.hasnext();) til += i.next(); if(i.hasnext()) til += ", "; send(til + " kunne ikke oversaettes til class filer :-("); return;
else String til = "EJava-programmet kunne ikke gemme objekterne : "; for(iterator i = a.iterator(); i.hasnext();) til += i.next(); if(i.hasnext()) til += ", "; send(til + " paa serveren :-("); return; public void run(model model) Grund g = new Grund(this, model); g.start(); // uden parametrer! /*public void kor_java_program(string filnavn, String metodenavn) if(debug) System.out.println("### ---> nu starter jeg korselen!"); k = new Kor(this, start); k.kor(filnavn, metodenavn); k = null; // public ArrayList over(model model) ArrayList b = new ArrayList(); for(iterator i = model.objektliste.iterator(); i.hasnext();) Objekt o = (Objekt)i.next(); if(!overobjekt(o)) b.add(o.navn); return b; public ArrayList gemjava(model model)
ArrayList a = new ArrayList(); for(iterator i = model.objektliste.iterator(); i.hasnext();) Objekt o = (Objekt)i.next(); if(!gemobjekt(o)) a.add(o.navn); return a; public boolean gemobjekt(objekt o) try funk.gem_data(funk.dir + P(o.navn, o.model) + ".java", o.java); catch(exception e)return false; return true; public boolean overobjekt(objekt o) if(main.compile(new String[]funk.dir + P(o.navn, o.model) + ".java")!= 0) return false; return true; public void luk() try //System.out.println("D: Forsoeger at lukke for " + navn); send("efarvel " + navn + "!"); send("f"); ud.close(); ind.close(); stik.close(); Start.bruger.remove(navn); funk.log(funk.log + "bruger.log", funk.hent_tid() + " : " + navn + " logget af uden problemer :-)"); catch(exception e) funk.log(funk.log + "bruger.log",
funk.hent_tid() + " : " + navn + " logget af med problemet : " + e); public void logind(string data) navn = data; if(start.bruger.containskey(navn)) send("eder er en anden bruger paa nettet lige nu, som bruger navnet " + navn); send("e" + navn + " fik IKKE forbindelse til serveren :-("); luk(); //send("f"); else Start.bruger.put(navn, this); logind = true; send("evelkommen til server version " + version); send("edu vil blive kaldt " + navn + "(" + id + ")"); send(funk.liste()); public void model(string data) Model temp = new Model(data, this); if(temp.krop == null) Model m = (Model)Start.model.get(temp.navn); if(!m.hvem.equals(navn)) send("e" + navn + " er ikke ejer af " + temp.navn + " (kun ejeren maa overskrive sin model)."); send("emodellen blev IKKE gemt!"); return; if(overset(temp)) Start.model.put(temp.navn, temp); send("e" + temp.navn + " gemt!"); send(funk.liste()); else send("e" + temp.navn + " kunne ikke oversaettes til java!");
public boolean overset(model model) if(model == null) send("eder er ingen model!"); return false; if(model.objektliste == null) send("emodellen er tom!"); return false; for(iterator i = model.objektliste.iterator(); i.hasnext();) overset(((objekt)i.next())); return true; public void overset(objekt objekt) String k = "public class " + P(objekt.navn, objekt.model) + "\n"; // Egenskaber k += "\n public static Grund grund;"; if(objekt.egenskaber!= null) for(iterator i = objekt.egenskaber.iterator(); i.hasnext();) k += egenskab((egenskab)i.next()); /* Den tome Konstruktoer!! k += "\n\n public " + P(objekt.navn, objekt.model) + "()\n "; k += "";// // Konstruktoer k += "\n\n public " + P(objekt.navn, objekt.model) + "(Grund grund)\n "; k += "\n this.grund = grund;\n "; // Aktiviteter
if(objekt.aktiviteter!= null) for(iterator i = objekt.aktiviteter.iterator(); i.hasnext();) k += aktivitet((aktivitet)i.next()); k += "\n\n"; System.out.println("D:\n" + k); objekt.java = k; public String egenskab(egenskab e) if(funk.kommatal(e.verdi)) return "\n public static double " + e.navn + " = Double.valueOf(\"" + e.verdi + "\").doublevalue();"; if(funk.heltal(e.verdi)) return "\n public static long " + e.navn + " = Long.valueOf(\"" + e.verdi + "\").longvalue();"; System.out.println("vaerdi = " + e.verdi); return "\n public static String " + e.navn + " = \"" + e.verdi + "\";"; public String aktivitet(aktivitet a) String retur = "\n\n public static void "; retur += /*P() + a.navn + "()\n \n"; retur += " " + beskrivelse(a.beskrivelse); retur += "\n "; public String beskrivelse(beskrivelse b) //String retur = "/n "; return overset_k(b); //retur += // public String overset_k(beskrivelse g) String retur = ""; System.out.println("D: type = " + g.type);
if(g.type.equals("a") g.type.equals("x")) g.navn = g.navn.substring(1); if(g.navn.equals("udskriv V")) retur += "grund.send("; retur += overset_v(g.beskrivelser.get(0)); retur += ");"; if(g.navn.equals("e bliver til V")) retur += overset_e(g.beskrivelser.get(0)); retur += " = " + overset_v(g.beskrivelser.get(1)) + ";"; if(g.navn.equals("e vokser med V")) retur += overset_e(g.beskrivelser.get(0)); retur += " += " + overset_v(g.beskrivelser.get(1)) + ";"; if(g.navn.equals("e aftager med V")) retur += overset_e(g.beskrivelser.get(0)); retur += " -= " + overset_v(g.beskrivelser.get(1)) + ";"; if(g.navn.equals("e bliver V gange st rre")) retur += overset_e(g.beskrivelser.get(0)); retur += " *= " + overset_v(g.beskrivelser.get(1)) + ";"; if(g.navn.equals("e bliver V gange mindre")) retur += overset_e(g.beskrivelser.get(0)); retur += " /= " + overset_v(g.beskrivelser.get(1)) + ";";
if(g.navn.equals("hvis B sâ A")) retur += "if(" + overset_b(g.beskrivelser.get(0)) + ")"; retur += "" + g_check() + overset_a(g.beskrivelser.get(1)) + ""; if(g.navn.equals("gentag A indtil B")) retur += "while(!(" + overset_b(g.beskrivelser.get(1)) + "))"; retur += "" + overset_a(g.beskrivelser.get(0)) + ""; if(g.navn.equals("udf r A")) retur += overset_a(g.beskrivelser.get(0)); if(g.navn.equals("a, samt X")) retur += overset_a(g.beskrivelser.get(0)) + "\n "; retur += overset_a(g.beskrivelser.get(1)); if(g.navn.equals("a")) retur += overset_a(g.beskrivelser.get(0)); //System.out.println("Type = " + type); // En aktivitet! if(g.tilknytning!= null) retur += g_check() + P(g.tilknytning, g.model) + "."; retur += g.navn + "();";
public String g_check() return "if(grund.check()) return; "; public String overset_a(object o) return beskrivelse((beskrivelse)o); // bare K /* String retur = ""; retur += "Navn = " + b.navn; if(b.beskrivelser!= null) retur += ", storrelse" + b.beskrivelser.size(); public String overset_b(object o) Beskrivelse b = (Beskrivelse)o; String retur = ""; String s = b.navn.substring(1); if(s.equals("e lig med V")) retur += overset_e(b.beskrivelser.get(0)); retur += " == " + overset_v(b.beskrivelser.get(1)); if(s.equals("e st rre end V")) retur += overset_e(b.beskrivelser.get(0)); retur += " > " + overset_v(b.beskrivelser.get(1)); if(s.equals("e mindre end V")) retur += overset_e(b.beskrivelser.get(0)); retur += " < " + overset_v(b.beskrivelser.get(1));
if(s.equals("b og B")) retur += "(" + overset_b(b.beskrivelser.get(0)); retur += " && " + overset_b(b.beskrivelser.get(1)) + ")"; if(s.equals("b eller B")) retur += "(" + overset_b(b.beskrivelser.get(0)); retur += " " + overset_b(b.beskrivelser.get(1)) +")"; if(s.equals("ikke B")) retur += "!(" + overset_b(b.beskrivelser.get(0)) + ")"; //??? public String overset_e(object o) Beskrivelse b = (Beskrivelse)o; String retur = ""; if(!b.tilknytning.equals("")) retur += P(b.tilknytning, b.model) + "."; retur += b.navn; public String overset_v(object o) Beskrivelse b = (Beskrivelse)o; String retur =""; if(b.tilknytning!= null)
if(!b.tilknytning.equals("")) retur += P(b.tilknytning, b.model) + "." + b.navn; else if(funk.kommatal(b.navn) funk.heltal(b.navn)) retur += b.navn; else retur += "\"" + b.navn + "\""; else if(funk.kommatal(b.navn) funk.heltal(b.navn)) retur += b.navn; else retur += "\"" + b.navn + "\""; public boolean find(arraylist liste, String navn) if(liste == null) return false; for(iterator i = liste.iterator(); i.hasnext();) Object o = i.next(); if(o instanceof Egenskab && ((Egenskab)o).navn.equals(navn)) return true; return false; // Tillaeg til navn, saa filerne bliver naemmere at finde, rette og slette. public String P(String navn, Model model) String r = model.navn.substring(0, 1).toUpperCase() + model.navn.substring(1); return r + "_" + navn; public String p(string navn, Model model) String r = model.navn.substring(0, 1).toLowerCase() + model.navn.substring(1); return r + "_" + navn; public void send(string tekst)
ud.println(tekst); funk.log(funk.log + "net.log", funk.hent_tid() + " : sende " + tekst + " til " + navn); import java.net.*; import java.io.*; import java.util.*; import com.sun.tools.javac.*; /* * Created on 21-08-2006 * @author rling public class Bruger extends Thread implements Global Socket stik = null; static int nummer = 1; int id = 0; String navn = "Anomym"; boolean logind = false; boolean afbyd = false; public PrintWriter ud; public BufferedReader ind; * public Bruger(Socket forbindelse) super(); // TODO Auto-generated constructor stub stik = forbindelse; id = nummer++; /* (non-javadoc)
* @see java.lang.runnable#run() public void run() // TODO Auto-generated method stub try ud = new PrintWriter(stik.getOutputStream(), true); ind = new BufferedReader(new InputStreamReader(stik.getInputStream())); lytter(); catch(exception e) public void lytter() String besked = ""; while(!besked.equals("f")) try besked = ind.readline(); if(besked == null) break; funk.log(funk.log + "net.log", funk.hent_tid() + " : Modtog " + besked + " fra " + navn); char pro = besked.charat(0); if(!besked.equals("f")) besked = besked.substring(1); switch(pro) case 'O': // Opret forbindelse logind(besked); break; case 'S': // Modtager model fra klient // oversaet modellen til java og gem den! // HUSK at opdater modellisten! model(besked); break; case 'K': // Koer modellen //oversaet javafilen til class-fil og koer start metoden kor(besked);
break; //case 'B': navn = besked; default : // Fejl!!! //System.out.println("D: modtog '" + besked + "'"); catch(exception e)e.printstacktrace(); luk(); public void kor(string m) // Gem psi som java filer Model model = (Model)Start.model.get(m); ArrayList a = gemjava(model); if(a.isempty()) // Oversaet fra java til Class filer! ArrayList b = over(model); if(b.isempty()) // Start simuleringen! //System.out.println("D: Alt oversat ok! :-)"); run(model); else String til = "EJava objekterne : "; for(iterator i = b.iterator(); i.hasnext();) til += i.next(); if(i.hasnext()) til += ", "; send(til + " kunne ikke oversaettes til class filer :-("); return; else String til = "EJava-programmet kunne ikke gemme objekterne : "; for(iterator i = a.iterator(); i.hasnext();)
til += i.next(); if(i.hasnext()) til += ", "; send(til + " paa serveren :-("); return; public void run(model model) Grund g = new Grund(this, model); g.start(); // uden parametrer! /*public void kor_java_program(string filnavn, String metodenavn) if(debug) System.out.println("### ---> nu starter jeg korselen!"); k = new Kor(this, start); k.kor(filnavn, metodenavn); k = null; // public ArrayList over(model model) ArrayList b = new ArrayList(); for(iterator i = model.objektliste.iterator(); i.hasnext();) Objekt o = (Objekt)i.next(); if(!overobjekt(o)) b.add(o.navn); return b; public ArrayList gemjava(model model) ArrayList a = new ArrayList(); for(iterator i = model.objektliste.iterator(); i.hasnext();) Objekt o = (Objekt)i.next(); if(!gemobjekt(o)) a.add(o.navn);
return a; public boolean gemobjekt(objekt o) try funk.gem_data(funk.dir + P(o.navn, o.model) + ".java", o.java); catch(exception e)return false; return true; public boolean overobjekt(objekt o) if(main.compile(new String[]funk.dir + P(o.navn, o.model) + ".java")!= 0) return false; return true; public void luk() try //System.out.println("D: Forsoeger at lukke for " + navn); send("efarvel " + navn + "!"); send("f"); ud.close(); ind.close(); stik.close(); Start.bruger.remove(navn); funk.log(funk.log + "bruger.log", funk.hent_tid() + " : " + navn + " logget af uden problemer :-)"); catch(exception e) funk.log(funk.log + "bruger.log", funk.hent_tid() + " : " + navn + " logget af med problemet : " + e); public void logind(string data)
navn = data; if(start.bruger.containskey(navn)) send("eder er en anden bruger paa nettet lige nu, som bruger navnet " + navn); send("e" + navn + " fik IKKE forbindelse til serveren :-("); luk(); //send("f"); else Start.bruger.put(navn, this); logind = true; send("evelkommen til server version " + version); send("edu vil blive kaldt " + navn + "(" + id + ")"); send(funk.liste()); public void model(string data) Model temp = new Model(data, this); if(temp.krop == null) Model m = (Model)Start.model.get(temp.navn); if(!m.hvem.equals(navn)) send("e" + navn + " er ikke ejer af " + temp.navn + " (kun ejeren maa overskrive sin model)."); send("emodellen blev IKKE gemt!"); return; if(overset(temp)) Start.model.put(temp.navn, temp); send("e" + temp.navn + " gemt!"); send(funk.liste()); else send("e" + temp.navn + " kunne ikke oversaettes til java!"); public boolean overset(model model) if(model == null) send("eder er ingen model!"); return false;
if(model.objektliste == null) send("emodellen er tom!"); return false; for(iterator i = model.objektliste.iterator(); i.hasnext();) overset(((objekt)i.next())); return true; public void overset(objekt objekt) String k = "public class " + P(objekt.navn, objekt.model) + "\n"; // Egenskaber k += "\n public static Grund grund;"; if(objekt.egenskaber!= null) for(iterator i = objekt.egenskaber.iterator(); i.hasnext();) k += egenskab((egenskab)i.next()); /* Den tome Konstruktoer!! k += "\n\n public " + P(objekt.navn, objekt.model) + "()\n "; k += "";// // Konstruktoer k += "\n\n public " + P(objekt.navn, objekt.model) + "(Grund grund)\n "; k += "\n this.grund = grund;\n "; // Aktiviteter if(objekt.aktiviteter!= null) for(iterator i = objekt.aktiviteter.iterator(); i.hasnext();) k += aktivitet((aktivitet)i.next());
k += "\n\n"; System.out.println("D:\n" + k); objekt.java = k; public String egenskab(egenskab e) if(funk.kommatal(e.verdi)) return "\n public static double " + e.navn + " = Double.valueOf(\"" + e.verdi + "\").doublevalue();"; if(funk.heltal(e.verdi)) return "\n public static long " + e.navn + " = Long.valueOf(\"" + e.verdi + "\").longvalue();"; System.out.println("vaerdi = " + e.verdi); return "\n public static String " + e.navn + " = \"" + e.verdi + "\";"; public String aktivitet(aktivitet a) String retur = "\n\n public static void "; retur += /*P() + a.navn + "()\n \n"; retur += " " + beskrivelse(a.beskrivelse); retur += "\n "; public String beskrivelse(beskrivelse b) //String retur = "/n "; return overset_k(b); //retur += // public String overset_k(beskrivelse g) String retur = ""; System.out.println("D: type = " + g.type); if(g.type.equals("a") g.type.equals("x")) g.navn = g.navn.substring(1); if(g.navn.equals("udskriv V")) retur += "grund.send("; retur += overset_v(g.beskrivelser.get(0)); retur += ");";
if(g.navn.equals("e bliver til V")) retur += overset_e(g.beskrivelser.get(0)); retur += " = " + overset_v(g.beskrivelser.get(1)) + ";"; if(g.navn.equals("e vokser med V")) retur += overset_e(g.beskrivelser.get(0)); retur += " += " + overset_v(g.beskrivelser.get(1)) + ";"; if(g.navn.equals("e aftager med V")) retur += overset_e(g.beskrivelser.get(0)); retur += " -= " + overset_v(g.beskrivelser.get(1)) + ";"; if(g.navn.equals("e bliver V gange st rre")) retur += overset_e(g.beskrivelser.get(0)); retur += " *= " + overset_v(g.beskrivelser.get(1)) + ";"; if(g.navn.equals("e bliver V gange mindre")) retur += overset_e(g.beskrivelser.get(0)); retur += " /= " + overset_v(g.beskrivelser.get(1)) + ";"; if(g.navn.equals("hvis B sâ A")) retur += "if(" + overset_b(g.beskrivelser.get(0)) + ")";
retur += "" + g_check() + overset_a(g.beskrivelser.get(1)) + ""; if(g.navn.equals("gentag A indtil B")) retur += "while(!(" + overset_b(g.beskrivelser.get(1)) + "))"; retur += "" + overset_a(g.beskrivelser.get(0)) + ""; if(g.navn.equals("udf r A")) retur += overset_a(g.beskrivelser.get(0)); if(g.navn.equals("a, samt X")) retur += overset_a(g.beskrivelser.get(0)) + "\n "; retur += overset_a(g.beskrivelser.get(1)); if(g.navn.equals("a")) retur += overset_a(g.beskrivelser.get(0)); //System.out.println("Type = " + type); // En aktivitet! if(g.tilknytning!= null) retur += g_check() + P(g.tilknytning, g.model) + "."; retur += g.navn + "();"; public String g_check() return "if(grund.check()) return; ";
public String overset_a(object o) return beskrivelse((beskrivelse)o); // bare K /* String retur = ""; retur += "Navn = " + b.navn; if(b.beskrivelser!= null) retur += ", storrelse" + b.beskrivelser.size(); public String overset_b(object o) Beskrivelse b = (Beskrivelse)o; String retur = ""; String s = b.navn.substring(1); if(s.equals("e lig med V")) retur += overset_e(b.beskrivelser.get(0)); retur += " == " + overset_v(b.beskrivelser.get(1)); if(s.equals("e st rre end V")) retur += overset_e(b.beskrivelser.get(0)); retur += " > " + overset_v(b.beskrivelser.get(1)); if(s.equals("e mindre end V")) retur += overset_e(b.beskrivelser.get(0)); retur += " < " + overset_v(b.beskrivelser.get(1)); if(s.equals("b og B")) retur += "(" + overset_b(b.beskrivelser.get(0));
retur += " && " + overset_b(b.beskrivelser.get(1)) + ")"; if(s.equals("b eller B")) retur += "(" + overset_b(b.beskrivelser.get(0)); retur += " " + overset_b(b.beskrivelser.get(1)) +")"; if(s.equals("ikke B")) retur += "!(" + overset_b(b.beskrivelser.get(0)) + ")"; //??? public String overset_e(object o) Beskrivelse b = (Beskrivelse)o; String retur = ""; if(!b.tilknytning.equals("")) retur += P(b.tilknytning, b.model) + "."; retur += b.navn; public String overset_v(object o) Beskrivelse b = (Beskrivelse)o; String retur =""; if(b.tilknytning!= null) if(!b.tilknytning.equals("")) retur += P(b.tilknytning, b.model) + "." + b.navn; else if(funk.kommatal(b.navn) funk.heltal(b.navn)) retur += b.navn; else retur += "\"" + b.navn + "\"";
else if(funk.kommatal(b.navn) funk.heltal(b.navn)) retur += b.navn; else retur += "\"" + b.navn + "\""; public boolean find(arraylist liste, String navn) if(liste == null) return false; for(iterator i = liste.iterator(); i.hasnext();) Object o = i.next(); if(o instanceof Egenskab && ((Egenskab)o).navn.equals(navn)) return true; return false; // Tillaeg til navn, saa filerne bliver naemmere at finde, rette og slette. public String P(String navn, Model model) String r = model.navn.substring(0, 1).toUpperCase() + model.navn.substring(1); return r + "_" + navn; public String p(string navn, Model model) String r = model.navn.substring(0, 1).toLowerCase() + model.navn.substring(1); return r + "_" + navn; public void send(string tekst) ud.println(tekst); funk.log(funk.log + "net.log", funk.hent_tid() + " : sende " + tekst + " til " + navn);
/* * Created on 23-08-2006 * @author rling public class Egenskab implements Global Model model; String navn; String verdi; public Egenskab(String navn, String verdi, Model model) if(funk.od) System.out.println(" - " + navn + " : " + verdi); this.model = model; this.navn = navn; this.verdi = verdi; import java.util.*; import java.io.*; import java.text.*; /* * Created on 21-08-2006 * @author rling public class Funktion Start start; int log10_max = 4; String ser = "server/";
String dir = ""; //ser + "klasser/"; String log = ser + "logbog/"; boolean od = false; // Oversaettelses debuging! * public Funktion() super(); // TODO Auto-generated constructor stub * Oversaetter specielt formateret tekst til tekst! * F.eks. bliver "05Model" til "Model" * @param tekst * @return public String tex(string tekst) int tal = tal(tekst.substring(0, 2)); return tekst.substring(2, tal + 2); * Oversaetter formateret tekst til "normal" tekst og afkorter teksten, saa den passer igen! * F.eks. bliver "0006ObjektBlaBlaBla", 4 til "Objekt", "BlaBlaBla" * @param tekst * @param size * @return public String[] tex(string tekst, int size) int tal = tal(tekst.substring(0, size)); String[] retur = tekst.substring(size, tal + size), tekst.substring(tal + size); * Oversaetter tekst til tal. * F.eks. bliver "0000567" til 567 * @param tal
* @return public int tal(string tal) try return Integer.decode(nulfri(tal)).intValue(); catch(exception e)e.printstacktrace(); return -1; * Oversaetter tal... * F.eks. bliver "0008Objekt 1BlaBlaBla", 4 til 8, "Objekt 1BlaBlaBla" * @param tal * @param size * @return public Object[] tal(string tal, int size) Object[] o = new Integer(tal(tal.substring(0, size))), tal.substring(size); return o; public int tal(object tal) return ((Integer)tal).intValue(); * Fjerner nuller fra tekster. * F.eks. bliver "0000567" til "567" * @param tekst * @return public String nulfri(string tekst) while(tekst.startswith("0") && tekst.length() > 1) tekst = tekst.substring(1); return tekst;
* Klargoere model listen til at blive sendt til brugeren. * @return public String liste() String temp = "L" + fyld(log10_max, 2) + fyld(start.model.size(), log10_max); for(iterator i = Start.model.keySet().iterator(); i.hasnext();) temp += format((string)i.next()); return temp; * Formater teksten. * F.eks. bliver "Objekt 1" til "0008Objekt 1" * @param tekst * @return public String format(string tekst) return fyld(tekst.length(), log10_max) + tekst; * Laver formaterede tal. * F.eks. bliver 567, 8 til "00000567" * @param tal * @param size * @return public String fyld(int tal, int size) String temp = tal + ""; while(temp.length() < size) temp = "0" + temp; return temp;
* Sender tekst til alle bruger * @param tekst public void send_all(string tekst) for(iterator i = Start.bruger.keySet().iterator(); i.hasnext();) ((Bruger)i.next()).send(tekst); public boolean heltal(string tekst) try Long.valueOf(tekst); return true; catch(exception e)return false; public boolean kommatal(string tekst) try Double.valueOf(tekst); if(tekst.indexof(".") == -1) return false; return true; catch(exception e)return false; public void gem_data(string navn, String data) throws Exception FileWriter skriver = new FileWriter(navn); skriver.write(data); skriver.close(); public String hent_data(string navn) try String s, r = ""; BufferedReader leser = new
BufferedReader(new InputStreamReader(new FileInputStream(navn))); trywhile((s = leser.readline())!= null)r+="\n" + s; catch(eofexception e) leser.close(); return r; leser.close(); return r; catch(exception e) return "FEJL!"; public boolean log(string navn, String data) try String g = ""; String dir = ""; // Speciel mappe til logboeger if(new File(dir + navn).exists()) g = hent_data(navn); //if(debugt) System.out.println("Henter data! " +g); g += (data + "\n "); gem_data(navn, g); //if(debugt) System.out.println("gemte " + g); catch(exception e)return false; return true; public String hent_tid() DateFormat format = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.GERMAN); return format.format(new Date());
/* * Created on 21-08-2006 * @author rling public interface Global Funktion funk = new Funktion(); String version = "0,003 Beta"; import java.lang.reflect.*; import java.io.*; import java.security.*; /* * Created on 25-08-2006 * @author rling public class Grund extends Thread implements Global Bruger bruger; Model model; public Grund(Bruger bruger, Model model) this.bruger = bruger; this.model = model; // classload til at lave klasserne med :-) public void run() try funk.log(funk.log + "overset.log", "");
RlingsLoader hent = new RlingsLoader(); Class klasse = hent.load(funk.dir + bruger.p(model.starttil, model)); Class[] klasseparameter_1 = this.getclass(); Object[] objektparameter_1 = this; Constructor konstruktoer = klasse.getconstructor(klasseparameter_1); Object instans = konstruktoer.newinstance(objektparameter_1); Class[] klasseparameter_2 = ; Object[] objektparameter_2 = ; funk.log(funk.log + "overset.log", "\nklassen hedder " + instans.getclass().getname()); Method metode = klasse.getdeclaredmethod(model.startaktivitet, klasseparameter_2); funk.log(funk.log + "overset.log", "\nmetoden hedder " + metode); // Gogo metode.invoke(instans, objektparameter_2); catch(exception e)e.printstacktrace(); public void send(string tekst) bruger.send("e" + tekst); // Skallaves om til DB public void send(double tal) bruger.send("e" + tal); // Skallaves om til DB public void send(int tal) bruger.send("e" + tal); public boolean check()
return bruger.afbyd; import java.util.*; /* * Created on 21-08-2006 * @author rling public class Model implements Global String navn, psi, krop, hvem, starttil; String startaktivitet = ""; int size; String[] buff; Object[] boff; ArrayList objektliste; Bruger ejer; int log10_max = 0; * public Model(String psi, Bruger ejer) // Simple data this.psi = psi; this.ejer = ejer; hvem = ejer.navn; log10_max = funk.tal(psi.substring(0, 2)); String temp = psi.substring(2); startaktivitet = (buff = funk.tex(temp, log10_max))[0]; temp = buff[1]; //* starttil = (buff = funk.tex(temp, log10_max))[0]; temp = buff[1];
// size = ((buff = funk.tex(temp, log10_max))[0]).length(); temp = temp.substring(log10_max); navn = (buff = funk.tex(temp, log10_max))[0]; // Findes iforvejen? if(start.model.containskey(navn)) if(!((model)start.model.get(navn)).ejer.navn.equals(hvem)) return; // Objekterne! krop = buff[1]; if(!krop.equals("0000") && krop.length() > 4) objektliste = new ArrayList(); int antal = funk.tal((boff = funk.tal(krop, log10_max))[0]); temp = (String)boff[1]; for(int tal = 0; tal < antal; tal ++) objektliste.add(new Objekt((buff = funk.tex(temp, log10_max))[0], this)); temp = buff[1]; import java.util.*; /* * Created on 22-08-2006 * @author rling public class Objekt implements Global
String navn, temp, krop, java; String[] buff; Object[] boff; Model model; // ArrayList objekter; ArrayList aktiviteter; ArrayList egenskaber; * public Objekt(String krop, Model model) this.model = model; // De simple data navn = (buff = funk.tex(krop, model.log10_max))[0]; krop = (temp = buff[1]); if(funk.od) System.out.println(navn); // Under objekter int antal = funk.tal((boff = funk.tal(temp, model.log10_max))[0]); temp = (String)boff[1]; if(antal > 0) for(int tal = 0; tal < antal; tal ++) model.objektliste.add(new Objekt((buff = funk.tex(temp, model.log10_max))[0], model)); temp = buff[1]; // Aktiviteter antal = funk.tal((boff = funk.tal(temp, model.log10_max))[0]); temp = (String)boff[1]; if(antal > 0) aktiviteter = new ArrayList(); for(int tal = 0; tal < antal; tal ++) String a = (buff = funk.tex(temp, model.log10_max))[0]; temp = buff[1];
aktiviteter.add(new Aktivitet((buff = funk.tex(a, model.log10_max))[0], buff[1], this, model)); // Egenskaber antal = funk.tal((boff = funk.tal(temp, model.log10_max))[0]); temp = (String)boff[1]; if(antal > 0) egenskaber = new ArrayList(); for(int tal = 0; tal < antal; tal ++) String e = (buff = funk.tex(temp, model.log10_max))[0]; temp = buff[1]; egenskaber.add(new Egenskab((buff = funk.tex(e, model.log10_max))[0], (buff = funk.tex(buff[1], model.log10_max))[0], model)); import java.util.*; /* * Created on 22-08-2006 * @author rling public class Objekt implements Global String navn, temp, krop, java; String[] buff; Object[] boff; Model model; // ArrayList objekter; ArrayList aktiviteter;
ArrayList egenskaber; * public Objekt(String krop, Model model) this.model = model; // De simple data navn = (buff = funk.tex(krop, model.log10_max))[0]; krop = (temp = buff[1]); if(funk.od) System.out.println(navn); // Under objekter int antal = funk.tal((boff = funk.tal(temp, model.log10_max))[0]); temp = (String)boff[1]; if(antal > 0) for(int tal = 0; tal < antal; tal ++) model.objektliste.add(new Objekt((buff = funk.tex(temp, model.log10_max))[0], model)); temp = buff[1]; // Aktiviteter antal = funk.tal((boff = funk.tal(temp, model.log10_max))[0]); temp = (String)boff[1]; if(antal > 0) aktiviteter = new ArrayList(); for(int tal = 0; tal < antal; tal ++) String a = (buff = funk.tex(temp, model.log10_max))[0]; temp = buff[1]; aktiviteter.add(new Aktivitet((buff = funk.tex(a, model.log10_max))[0], buff[1], this, model)); // Egenskaber
antal = funk.tal((boff = funk.tal(temp, model.log10_max))[0]); temp = (String)boff[1]; if(antal > 0) egenskaber = new ArrayList(); for(int tal = 0; tal < antal; tal ++) String e = (buff = funk.tex(temp, model.log10_max))[0]; temp = buff[1]; egenskaber.add(new Egenskab((buff = funk.tex(e, model.log10_max))[0], (buff = funk.tex(buff[1], model.log10_max))[0], model)); import java.io.*; /* * Created on 27-08-2006 * @author rling public class RlingsLoader extends ClassLoader * @param arg0 public RlingsLoader(ClassLoader arg0) super(arg0); // TODO Auto-generated constructor stub *
public RlingsLoader() super(); // TODO Auto-generated constructor stub public Class load(string navn) try byte[] buf = byteforclass(navn); return defineclass(navn, buf, 0, buf.length); catch(exception e)return null; public byte[] byteforclass(string name) throws IOException, ClassNotFoundException FileInputStream in = streamfor(name + ".class"); int length = in.available(); if(length == 0) throw new ClassNotFoundException(name); byte[] buf = new byte[length]; in.read(buf); return buf; public FileInputStream streamfor(string name) FileInputStream r = null; tryr = new FileInputStream(name); catch(exception e) return r; import java.net.*; import java.util.*; /* * Created on 21-08-2006
* @author rling public class Start implements Global static HashMap bruger = new HashMap(); static HashMap model = new HashMap(); * public Start() super(); // TODO Auto-generated constructor stub funk.start = this; public static void main(string[] args) // set args! if(!funk.log(funk.log + "server.log", funk.hent_tid() + " : Server startet")) System.err.println("Serveren kan ikke lave log fil!"); ServerSocket stik; try stik = new ServerSocket(4444); System.out.println("Lytter nu!"); while(true) Bruger b = new Bruger(stik.accept()); b.start(); bruger.put(b.navn, b); funk.log(funk.log + "server.log", funk.hent_tid() + " : Bruger " + b.navn + " har logget paa med id-nummer " + b.id + " fra " + b.stik.getinetaddress() + "(" + b.stik.getlocaladdress() + ")"); catch(exception e) funk.log(funk.log + "server.log", funk.hent_tid() + " : Server i udu :-("); e.printstacktrace();
\endverbartim