Gameserver makes computer sweat

I’ve coded a gameserver which works very well. However, whenever it’s running, my computers fan goes crazy.
I’ve been looking through the code, and i can’t really figure out why.

The code is attached below, i hope someone can see what causes this! :slight_smile:


public class NFTServer {

    long timeNow = System.currentTimeMillis();
    Server server;
    //mySQL database;
    Board board;
    HashSet<Character> loggedIn = new HashSet();
    ArrayList<Player> playerList;

    public NFTServer() throws IOException {
        playerList = new ArrayList<Player>();
        
        board = new Board();
        
        server = new Server() {
            protected Connection newConnection() {
                return new CharacterConnection();
            }
        };

        Network.register(server);

        server.addListener(new Listener() {
            public void received(Connection c, Object object) {
                CharacterConnection connection = (CharacterConnection) c;

                if (object instanceof Login) {
                    
                    String name = ((Login) object).name;
                    int playerId = ((Login) object).playerId;

                    Message message = new Message();
                    message.message = "Welcome " + name + " id: " + playerId;
                    connection.sendTCP(message);
                    
                    LoginAnswer answer = new LoginAnswer();
                    answer.playerId = playerId;
                    connection.sendTCP(answer);
                    
                    Position randomPosition = board.getRandomPosition();
                    playerList.add(new Player(name, randomPosition.getPositionX(), randomPosition.getPositionY(), playerId));
                    connection.playerId = playerId;
                    connection.name = name;
                }
                
                if (object instanceof RequestMove) {
                    for (int i = 0; i < playerList.size(); i++) {
                        Player currentPlayer = playerList.get(i);
                        if (currentPlayer.getId() == connection.playerId) {
                            int positionX = ((RequestMove) object).positionX;
                            int positionY = ((RequestMove) object).positionY;
                            Position position = new Position(positionX, positionY);
                            currentPlayer.setPosition(board.convertCoord(position).getPositionX(), board.convertCoord(position).getPositionY());
                        }
                    }
                }
                
                if (object instanceof ChatMessage) {
                    String message = ((ChatMessage) object).message;
                    int playerId = connection.playerId;
                    for (int i = 0; i < playerList.size(); i++) {
                        Player currentPlayer = playerList.get(i);
                        if (currentPlayer.getId() == connection.playerId) {
                            BroadMessage broadMessage = new BroadMessage();
                            broadMessage.message = message;
                            broadMessage.playerId = playerId;
                            server.sendToAllTCP(broadMessage);
                        }
                    }
                }

            }

            public void disconnected(Connection c) {
                CharacterConnection connection = (CharacterConnection) c;
                if (connection.name != null) {
                    for (int i = 0; i < playerList.size(); i++) {
                        Player currentPlayer = playerList.get(i);
                        if (currentPlayer.getId() == connection.playerId) {
                            playerList.remove(i);
                        }
                    }
                }
            }
        });
        server.bind(Network.port);
        server.start();

        JFrame frame = new JFrame("NFTServer");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosed(WindowEvent evt) {
                server.stop();
            }
        });
        frame.getContentPane().add(new JLabel(" Servervindue"));
        frame.setSize(320, 200);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        
        while (true) {
            if (timeNow + 100 < System.currentTimeMillis()) {
                
                PlayerList toClient = new PlayerList();
                toClient.persons = new ArrayList<Map<String, String>>();
                
                for (int i = 0; i < playerList.size(); i++) {
                    Player currentPlayer = playerList.get(i);
                    Map<String, String> person = new HashMap<String, String>();
                    person.put("name", currentPlayer.getName());
                    person.put("playerId", "" + currentPlayer.getId());                    
                    person.put("posX", "" + currentPlayer.getX());
                    person.put("posY", "" + currentPlayer.getY());
                    toClient.persons.add(person);
                }
                
                server.sendToAllTCP(toClient);

                timeNow = System.currentTimeMillis();
            }
        }
    }

    static class CharacterConnection extends Connection {

        public String name;
        public int playerId;
    }

    public static void main(String[] args) throws IOException {
        Log.set(Log.LEVEL_DEBUG);
        new NFTServer();
    }
}

Let the server thread sleep a bit in the while loop.

I’m very new at Java.
How would i implement this? (Code examples please)! :slight_smile:

Thread.sleep(/* time in milliseconds */ 500); // sleep for 0.5 Seconds

It is ms right?

Yes. It’s milliseconds.