[Java lista] java program folyamatok
Muskovics Gábor
m..g at freemail.hu
2007. Jún. 15., P, 22:07:19 CEST
Annyit csinálna ez a kód, hogy ha kapcsolódik egy kliens, létrehoz neki egy ChatHandler objektumot, közben meg a háttérben szinkronizál az adatbázissal. Meg az sem néz ki jól, hogy ha netbeans profiler-ben futtatom, a memóriafoglalás egyre nő...
/*
* Adatbazis.java
*/
public class Adatbazis extends Thread {
ChatServer szerver;
Statement st1;
private Connection conn;
private ResultSet rs1;
private HallgatoObj hallgato;
private Statement st2;
private ResultSet rs2;
private SzobaObj szoba;
private boolean fakeDb = false;
/** Creates a new instance of Adatbazis */
public Adatbazis(ChatServer _szerver) {
szerver = _szerver;
}
public void run() {
while(true) {
System.out.println("Adatbázis...");
/**
* Nincs a közelben elérhető adatbázis, de tesztelni viszont kell?
*/
fakeDb = true;
if(fakeDb) {
hallgato = new HallgatoObj();
szerver.lehetsegesHallgatokZarolva = true;
szerver.lehetsegesHallgatok.clear();
/**
* Egy fake gynagy hozzáadása
*/
hallgato.beallitAdatok("1", "Nagy", "György", "", "nnnnn", "", "061234356478", "gynagy", "0630485738495", "nagygyorgy at freemail.hu", "t", "t", "t", "t", "t", "t", "t", "t");
szerver.lehetsegesHallgatok.addElement(hallgato);
/**
* Egy fake szoba hozzáadása
*/
szerver.lehetsegesSzobakZarolva = true;
szerver.lehetsegesSzobak.clear();
/**
* Lehetséges szobák hozzáadása a szerverhez
*/
szoba = new SzobaObj();
szoba.beallitAdatok("1", "Próba tanfolyam", "Ez egy próba tanfolyam bla bla...", "1");
szerver.lehetsegesSzobak.addElement(szoba);
szoba = null;
} else {ugyanez, csak adatbázisból}
try {
System.out.println("Adatbázis vége...");
sleep(10000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
}
/**
* ChatHandler.java
*/
public class ChatHandler extends Thread {
static Vector handlers = new Vector( 10 );
private Socket socket;
private BufferedReader in;
private PrintWriter out;
private ChatServer szerver;
public String sajatNev = "";
private String elvalaszto;
private DataOutputStream dout;
public ChatHandler(Socket socket, ChatServer _szerver) throws IOException {
elvalaszto = _szerver.elvalaszto;
szerver = _szerver;
System.out.println("Új kapcsolat...");
this.socket = socket;
dout = new DataOutputStream( socket.getOutputStream() );
in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(
new OutputStreamWriter(socket.getOutputStream()));
}
public int ping() {
return 1;
}
public void run() {
String uzenet;
synchronized(handlers) {
handlers.addElement(this);
}
try {
while((uzenet = in.readLine())!=null) {
System.out.println("->" + uzenet);
if(uzenet.startsWith("/ittvagyok: ")) {
sajatNev = uzenet.substring(12);
//TODO: ellenőrzés
String tmp = "";
SzobaObj tmpSzoba = new SzobaObj();
for(int i=0; i<szerver.lehetsegesSzobak.size(); i++) {
tmpSzoba = (SzobaObj) szerver.lehetsegesSzobak.get(i);
System.out.println(tmpSzoba.tanfolyamNev);
tmp += tmpSzoba.tanfolyamNev + elvalaszto;
}
dout.writeUTF("/szobalista: " + tmp);
System.out.println(" -szobalista elküldve");
tmp = null;
}
if(uzenet.equals("/kilepes")) {
return;
}
}
} catch(IOException ioe) {
/**
* Ha hiba van az azért történik, mert elvágta egy markoló a hálózati kábelt. KHM!
*/
System.out.println("Megszakadt a kapcsolata...");
} finally {
try {
/**
* Rendes kilépés, vagy hiba esetén lezárjuk a kapcsolatot...
*/
System.out.println("Kapcsolat lezárása...");
in.close();
out.close();
socket.close();
szerver.objektumok.remove(this);
} catch(IOException ioe) {
} finally {
synchronized(handlers) {
handlers.removeElement(this);
}
}
}
}
}
/**
* ChatServer.java
*/
public class ChatServer {
/**
* A ChatHandler objektumok vannak benne
*/
public Vector objektumok = new Vector();
/**
* A lehetséges hallgatók (HallgatoObj)
*/
public Vector lehetsegesHallgatok = new Vector();
public boolean lehetsegesHallgatokZarolva = false;
/**
* A lehetséges szobák (SzobaObj)
*/
public Vector lehetsegesSzobak = new Vector();
public boolean lehetsegesSzobakZarolva = false;
String elvalaszto = "###";
public ChatServer() {
int port = 2000;
ServerSocket serverSocket = null;
Socket socket = null;
new Ping(this).start();
new Adatbazis(this).start();
try {
/**
* Végtelen ciklusban figyel, és ha valaki kapcsolódik, nyit egy új
* ChatHandler-t
*/
serverSocket = new ServerSocket(port);
while(true) {
socket = serverSocket.accept();
ChatHandler handler = new ChatHandler(socket, this);
handler.start();
objektumok.addElement(handler);
}
} catch(IOException ioe) {
ioe.printStackTrace();
} finally {
try {
serverSocket.close();
} catch(IOException ioe) {
ioe.printStackTrace();
}
}
}
public static void main(String[] args) {
new ChatServer();
}
}
Köszönettel:
Muskovics Gábor
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: http://javagrund.hu/pipermail/javalist/attachments/20070615/838c4885/attachment-0001.html
További információk a(z) Javalist levelezőlistáról