Initial commit

This commit is contained in:
2026-04-05 17:17:46 -03:00
commit 2293dc29fb
33 changed files with 1644 additions and 0 deletions

29
server/build.gradle Normal file
View File

@@ -0,0 +1,29 @@
plugins {
id 'java'
id 'application'
}
group = 'io.github.eldek0'
version = "$projectVersion"
repositories {
mavenCentral()
mavenLocal()
maven { url = 'https://jitpack.io' }
}
dependencies {
implementation project(':shared')
testImplementation platform('org.junit:junit-bom:5.10.0')
testImplementation 'org.junit.jupiter:junit-jupiter'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
application {
mainClass = 'io.github.eldek0.GameServer'
}
tasks.test {
useJUnitPlatform()
}

View 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();
}
}