ferentuske
Gebruiker
- Lid geworden
- 5 okt 2013
- Berichten
- 78
Hey
Als ik mijn Server start moet de gebruiker een naam kiezen.
Als er al een gebruiker met dezelfde naam aanwezig is moet je een melding krijgen dat deze naam al in gebruik is.
maar ik weet niet hoe ik dit moet doen ?
Dus in mijn server heb ik een lijst van connectiethreads dus voor elke gebruiker die conecteerd word er een nieuwe connectiethread aan de arraylist toegevoegd.
en in mijn thread gebruik een een switch om de verschillende commands van elkaar te scheiden.
Dus ik dacht om een controle in die switch van CONNECT te stoppen. heb al vanalles geprobeerd en het werd zo complex dat het helemaal niet meer werkte dus heb het dan ook maar verwijderd.
Ik denk dat er gemakkelijkere manieren bestaan maar vind hem spijtig genoeg niet.
Iemand enig idee ?
Connectie klasse
Server klasse
Als ik mijn Server start moet de gebruiker een naam kiezen.
Als er al een gebruiker met dezelfde naam aanwezig is moet je een melding krijgen dat deze naam al in gebruik is.
maar ik weet niet hoe ik dit moet doen ?
Dus in mijn server heb ik een lijst van connectiethreads dus voor elke gebruiker die conecteerd word er een nieuwe connectiethread aan de arraylist toegevoegd.
en in mijn thread gebruik een een switch om de verschillende commands van elkaar te scheiden.
Dus ik dacht om een controle in die switch van CONNECT te stoppen. heb al vanalles geprobeerd en het werd zo complex dat het helemaal niet meer werkte dus heb het dan ook maar verwijderd.
Ik denk dat er gemakkelijkere manieren bestaan maar vind hem spijtig genoeg niet.
Iemand enig idee ?
Connectie klasse
Code:
public class ConnectionThread extends Thread {
private Socket socket;
private Server server;
private BufferedReader in;
private PrintWriter out;
public String username = null;
public ConnectionThread(Socket socket,Server server) throws IOException {
this.socket = socket;
this.server = server;
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(),true);
}
@Override
public void run() {
String line = "";
try {
while (((line = in.readLine()) != null))
{
System.out.println("Client said " + line);
String split[] = line.split("\\|");
String command = split[0];
switch (command) {
case "CONNECT": {
username = split[1];
server.broadCastMessage(username + " has connected");
break;
}
case "CHAT": {
server.broadCastMessage(username + ": " + split[1]);
break;
}
case "POGING": {
server.raden(Integer.parseInt(split[1]), username);
break;
}
case "toon": {
System.out.println(server.getRandomNumber());
break;
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void sendMessage(String line)
{
out.println(line);
}
}
Server klasse
Code:
public class Server {
private ServerSocket serverSocket;
private Socket socket;
public List<ConnectionThread> connections;
private int randomNumber = 5;
public Server() throws IOException {
setRandomNumber();
serverSocket = new ServerSocket(6000);
connections = new ArrayList<>();
addConnection();
}
private void addConnection() throws IOException {
while(true)
{
socket = serverSocket.accept();
System.out.println("Client connected");
ConnectionThread clientConnect = new ConnectionThread(socket,this);
connections.add(clientConnect);
clientConnect.start();
}
}
public void setRandomNumber()
{
Random r = new Random();
randomNumber = r.nextInt(10);
}
public int getRandomNumber()
{
return randomNumber;
}
public void raden(int poging,String username)
{
if(poging == randomNumber)
{
broadCastMessage(username + " has the correct answer");
setRandomNumber();
}
}
public static void main(String[] args) throws IOException {
new Server();
}
public void broadCastMessage(String line) {
for (ConnectionThread connection : connections)
{
connection.sendMessage(line);
}
}
}