public void run() {
		try {
			serverSocket = new ServerSocket(listenPort, backlog);
			this.done = false;
			while (!this.done) {
				if (maxConnections > 0 && arrayListOfObjectatConnection.size() >= maxConnections) {
					// TODO
					// Add code to wait for connection to leave
				} else {
					connection = serverSocket.accept();
									
					ObjectatConnection client = new ObjectatConnection(connection, events, logger, objectatEventJAXBContext);
					arrayListOfObjectatConnection.add(client);
					new Thread(client).start();
					
					// Check for dead connections
					for (int i = 0; i < arrayListOfObjectatConnection.size(); i++) {
						if (arrayListOfObjectatConnection.get(i).getClient().isClosed()) {
							arrayListOfObjectatConnection.remove(i);
						}
					}
				}
				
				try {
					// Prevent while loop from eating CPU
					Thread.sleep(1000);
				} catch (Exception e) {
					// Interrupted, leave loop
					this.done = true;
				}
			}
		} catch (IOException e) {
			
		}
	}