package com.game.framework.net; import java.net.InetAddress; import java.util.ArrayList; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Net.Protocol; import com.badlogic.gdx.net.ServerSocket; import com.badlogic.gdx.net.ServerSocketHints; import com.badlogic.gdx.net.Socket; import com.badlogic.gdx.net.SocketHints; import com.badlogic.gdx.utils.Disposable; import com.game.framework.utils.L; public class NetworkServer implements Runnable,Disposable{ public static final int DEFAULT_PORT = 11589; private Thread thread; private ServerSocket serverSocket; private int port; private boolean isAcceptingClient; private ServerCallback serverCallback; public NetworkServer(ServerCallback serverCallback) { this.serverCallback = serverCallback; port = DEFAULT_PORT; isAcceptingClient = false; } public void startServer() { if(thread==null) { thread = new Thread(this); thread.start(); } } @Override public void run() { try{ L.wtf("Starting a new Server..."); ServerSocketHints hints = new ServerSocketHints(); hints.acceptTimeout = 0; serverSocket = Gdx.net.newServerSocket(Protocol.TCP, port, hints); isAcceptingClient = true; L.wtf("Server start.."); L.wtf("port: "+port); L.wtf("host: "+InetAddress.getLocalHost().getHostAddress()); while(isAcceptingClient) { Socket socket = serverSocket.accept(null); ClientConnection client = new ClientConnection(socket); serverCallback.onConnect(client); L.wtf("Client connected: "); } } catch (Exception e){ e.printStackTrace(); L.e("Error while server is running..."); } } @Override public void dispose() { if(serverSocket!=null){ serverSocket.dispose(); } } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public void close() { isAcceptingClient = false; dispose(); } }