//code by DigitalD
import java.net.*;
import java.io.*;
import java.util.*;
//import javagently.*;
public class CServer {
boolean ok = true;
int port = 23;
public static int clientNR = 0;
CServer() {
try {
ServerSocket listener = new ServerSocket(port);
System.out.println("ServerSocket auf Port 23");
System.out.println("Socket horcht nach Clients...");
//Erstellt ein Socket auf Port 23
while(ok) { //Client-Sammel-Stelle
Socket socket = listener.accept();
//Erstellt ein Socket, der darauf wartet das ein Client
//versucht sich mit dem Server zu verbinden
new ClientHandler(socket).start();
//jeder Client der sich verbindet wird in einem eigenen Thread verwaltet
System.out.println("a Client logged in");
}
} catch (IOException A) {
System.err.println(A.toString()+" problem mit Socket");
System.out.println("Socket wurde geschlossen");
System.exit(1);
//bei fehlern --> EXIT
}
}
public static void main(String [] args) {
new CServer();
}
} /* END OF CLASS SERVER */
/* FÜR JEDEN CLIENT WIRD EIN THREAD VERWENDET */
class ClientHandler extends Thread {
//für jeden Client wird ein eigener Thread gestartet
static LinkedList clientList = new LinkedList();
//LinkedList erstellt eine Verkettete Liste
private Socket socket;
private int clientID;
private BufferedReader fromClient;
private PrintWriter toClient;
private String nic, chat;
ClientHandler (Socket S) {
this.socket = S;
this.clientID = CServer.clientNR;
ClientHandler.clientList.add(socket);
CServer.clientNR ++;
}
public void run() {
try {//Server-Client-Start-Sequenz
fromClient = new BufferedReader(new InputStreamReader(socket.getInputStream()));
toClient = new PrintWriter(socket.getOutputStream(),true);
toClient.println("Willkommen auf Alex´s Chat-Server (u r client nr:"+clientID+")");
toClient.println("gib CU ein um den Chat zu verlassen");
toClient.println("Bitte geben Sie einen Nic-Name ein:");
nic = fromClient.readLine();
int check = nic.compareTo(" ");
System.out.println(check);
if ( (check < 1) | (nic == null) ) {
toClient.println("SIE MÜSSEN EIN NIC-NAME EINGEBEN!!!!!!");
toClient.println("PROBIERS NOCHMAL !!!!!");
nic = fromClient.readLine();
}
check = nic.compareTo(" ");
System.out.println(check);
if ( (check < 1) | (nic == null) ) { try {
System.out.println(nic+" wurde gekickt, weil er zu blöd is ein nic einzugeben!!!lol");
ClientHandler.remove(this.socket, nic);
} catch (IOException D) {System.out.println(D.toString()+" line 74");}}
toClient.println("SERVERBOT: HALLO "+nic+", viel spass beim Chatten");
System.out.println(nic+" hat den Chat betreten");
broadcast(nic+" hat den Chat betreten", "SERVERBOT");
} catch (IOException B) { System.err.println(B.toString()+" line 78"); }
//Chat-Sequenz
while (true) {
try {
chat = fromClient.readLine();
int check = chat.compareTo(" ");
System.out.println(check);
if (chat.equals("CU")) break;
if ( (check < 1) | (chat == null) ) {
do {
chat = fromClient.readLine();
check = chat.compareTo(" ");
if (chat == null) break;
System.out.println(check+" line 92");
}while( (check < 1) | (chat == null) );
}
} catch (Exception C) {System.out.println(C.toString()+" line 95"); break;}
try {
if (chat == null) break;
broadcast(chat, nic);
System.out.println(nic+": "+chat);
} catch (IOException E) {System.out.println(E.toString()+" line 100");}
}
try {
ClientHandler.remove(this.socket, nic);
} catch (IOException D) {System.out.println(D.toString()+" line 104");}
}
synchronized static void broadcast (String msgAll, String from) throws IOException {
Socket bc;
PrintWriter pw;
for (ListIterator list = clientList.listIterator(); list.hasNext();) {
bc = (Socket) list.next();
pw = new PrintWriter(bc.getOutputStream(), true);
pw.println(from+": "+msgAll);
}
}
synchronized static void remove (Socket cl, String nic) throws IOException {
broadcast(nic+" hat den Chat verlassen!!","SERVERBOT");
try { Thread.sleep(1000); } catch (InterruptedException X) {System.out.println(X.toString()+" line 120");}
ClientHandler.clientList.remove(cl);
cl.close();
System.out.println(nic+" hat den Chat verlassen!!");
}
}