import java.net.*;
import java.util.*;
public class Server {
private HashMap <String, ServerDraad>clients;
private TreeMap <String, Bericht>berichten;
public Server() {
clients = new HashMap<String, ServerDraad>();
berichten = new TreeMap<String, Bericht>();
}
private void startServerListener() {
ServerSocket ss ;
try {
ss = new ServerSocket(4444);
System.out.println("Server gestartet...");
while (true) {
new ServerDraad(ss.accept(), this, berichten).start();
}
} catch (Exception e) {
// e.printStackTrace();
}
}
public TreeMap geefBerichten(){
return berichten;
}
public void voegGebruikerToe(String naam, ServerDraad draad) {
clients.put(naam, draad);
}
public void removeClient(String naam) {
clients.remove(naam);
}
public String geefGebruikers() {
String gebruikers = "\n==>Aangemeldde gebruiker: ";
for (String gebruikernaam : clients.keySet()){
if(!gebruikers.equals("\n==>Aangemeldde gebruiker: ")) {
gebruikers += ", ";
}
gebruikers += gebruikernaam;
}
return gebruikers;
}
public void broadcast(String name, String msg) throws Exception {
for (ServerDraad client : clients.values()) {
client.send(name + msg);
}
}
public void send(String timeStemp, String naam, String ontvanger, String msg) throws Exception {
if(bestaanOfflineberichtenVoorClient(ontvanger)) {
clients.get(ontvanger).send("\n<" + timeStemp + "> ==>Ingang van " + naam + ": " + msg);
}
else {
clients.get(ontvanger).send("\n<" + timeStemp + "> ==>Ingang van " + naam + ": " + msg + "\n\nOntvangernaam ingeven: ");
}
}
public boolean isClient(String name) {
return clients.containsKey(name);
}
public void verstuurOfflineBerichten(String clientNaam) {
for(Bericht bericht : berichten.values()) {
if(bericht.getOntvanger().equalsIgnoreCase(clientNaam)) {
try {
send(bericht.getDatumEnTijd(), bericht.getEigenNaam(), bericht.getOntvanger(), bericht.getTekst());
System.out.println("Offlinebericht:<" + bericht.getDatumEnTijd() + "> Gebruiker " + bericht.getEigenNaam() + " schrijft aan " + bericht.getOntvanger() + ": " + bericht.getTekst());
berichten.remove(bericht);
}
catch(Exception e) {}
}
}
}
public boolean bestaanOfflineberichtenVoorClient(String naam) {
boolean bestaat = false;
for(Bericht bericht : berichten.values()) {
if(bericht.getOntvanger().equalsIgnoreCase(naam)) {
bestaat = true;
}
}
return bestaat;
}
public static void main(String[] x) {
new Server().startServerListener();
}
}