Initial commit
This commit is contained in:
103
server/src/main/java/io/github/eldek0/GameServer.java
Normal file
103
server/src/main/java/io/github/eldek0/GameServer.java
Normal file
@@ -0,0 +1,103 @@
|
||||
package io.github.eldek0;
|
||||
|
||||
import com.esotericsoftware.kryonet.Connection;
|
||||
import com.esotericsoftware.kryonet.Listener;
|
||||
import com.esotericsoftware.kryonet.Server;
|
||||
import io.github.eldek0.network.Network;
|
||||
import io.github.eldek0.network.NetworkPackets;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
public class GameServer {
|
||||
|
||||
private final Server server;
|
||||
private final Map<Integer, NetworkPackets.PlayerState> players = new ConcurrentHashMap<>();
|
||||
|
||||
public GameServer() {
|
||||
server = new Server();
|
||||
Network.register(server);
|
||||
|
||||
server.addListener(new Listener() {
|
||||
@Override
|
||||
public void connected(Connection connection) {
|
||||
System.out.println("Cliente conectado: " + connection.getID());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disconnected(Connection connection) {
|
||||
int id = connection.getID();
|
||||
players.remove(id);
|
||||
|
||||
NetworkPackets.PlayerDisconnected packet = new NetworkPackets.PlayerDisconnected();
|
||||
packet.id = id;
|
||||
server.sendToAllTCP(packet);
|
||||
|
||||
System.out.println("Cliente desconectado: " + id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void received(Connection connection, Object object) {
|
||||
if (object instanceof NetworkPackets.Login login) {
|
||||
handleLogin(connection, login);
|
||||
}
|
||||
|
||||
if (object instanceof NetworkPackets.PlayerMove move) {
|
||||
handleMove(connection, move);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void handleLogin(Connection connection, NetworkPackets.Login login) {
|
||||
NetworkPackets.PlayerState player = new NetworkPackets.PlayerState();
|
||||
player.id = connection.getID();
|
||||
player.name = login.name;
|
||||
player.x = 100;
|
||||
player.y = 100;
|
||||
|
||||
players.put(player.id, player);
|
||||
|
||||
NetworkPackets.PlayerConnected joined = new NetworkPackets.PlayerConnected();
|
||||
joined.id = player.id;
|
||||
joined.name = player.name;
|
||||
joined.x = player.x;
|
||||
joined.y = player.y;
|
||||
|
||||
server.sendToAllTCP(joined);
|
||||
|
||||
sendFullState(connection);
|
||||
}
|
||||
|
||||
private void handleMove(Connection connection, NetworkPackets.PlayerMove move) {
|
||||
NetworkPackets.PlayerState player = players.get(connection.getID());
|
||||
if (player == null) return;
|
||||
|
||||
player.x = move.x;
|
||||
player.y = move.y;
|
||||
|
||||
NetworkPackets.PlayerMove update = new NetworkPackets.PlayerMove();
|
||||
update.id = player.id;
|
||||
update.x = player.x;
|
||||
update.y = player.y;
|
||||
|
||||
server.sendToAllUDP(update);
|
||||
}
|
||||
|
||||
private void sendFullState(Connection connection) {
|
||||
NetworkPackets.WorldState worldState = new NetworkPackets.WorldState();
|
||||
worldState.players.addAll(players.values());
|
||||
connection.sendTCP(worldState);
|
||||
}
|
||||
|
||||
public void start() throws IOException {
|
||||
server.start();
|
||||
server.bind(Network.TCP_PORT, Network.UDP_PORT);
|
||||
System.out.println("Servidor iniciado.");
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
new GameServer().start();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user