|
@@ -0,0 +1,58 @@
|
|
|
|
|
+package server;
|
|
|
|
|
+
|
|
|
|
|
+import java.io.DataInputStream;
|
|
|
|
|
+import java.io.IOException;
|
|
|
|
|
+import java.net.ServerSocket;
|
|
|
|
|
+import java.net.Socket;
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
|
+import java.util.Iterator;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+public class Server {
|
|
|
|
|
+ private ArrayList<NetworkUser> matchMakingUsers;
|
|
|
|
|
+
|
|
|
|
|
+ public Server(final int port)
|
|
|
|
|
+ {
|
|
|
|
|
+ matchMakingUsers = new ArrayList<NetworkUser>();
|
|
|
|
|
+
|
|
|
|
|
+ Thread clientconnect = new Thread(new Runnable() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void run() {
|
|
|
|
|
+ try {
|
|
|
|
|
+ ServerSocket server = new ServerSocket(port);
|
|
|
|
|
+ while(true){
|
|
|
|
|
+ System.out.println("Waiting for clients...");
|
|
|
|
|
+ try {
|
|
|
|
|
+ Socket client = server.accept();
|
|
|
|
|
+
|
|
|
|
|
+ //Wait until user has send his username (timeout of 5 seconds)
|
|
|
|
|
+ DataInputStream input= new DataInputStream(client.getInputStream());
|
|
|
|
|
+ client.setSoTimeout(5000);
|
|
|
|
|
+ matchMakingUsers.add(new NetworkUser(input.readUTF(), client));
|
|
|
|
|
+
|
|
|
|
|
+ //Check if all users in the matchMakingList are still connected
|
|
|
|
|
+ Iterator<NetworkUser> i = matchMakingUsers.iterator();
|
|
|
|
|
+ while(i.hasNext()){
|
|
|
|
|
+ if(!i.next().checkConnection()){
|
|
|
|
|
+ i.remove();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //Check if there are enough players to make a match
|
|
|
|
|
+ if(matchMakingUsers.size() >= 2){
|
|
|
|
|
+ new Match(matchMakingUsers.get(0), matchMakingUsers.get(1));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ System.out.println("New client connected: " + client.getRemoteSocketAddress());
|
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ clientconnect.start();
|
|
|
|
|
+ }
|
|
|
|
|
+}
|