Initial commit
This commit is contained in:
29
server/build.gradle
Normal file
29
server/build.gradle
Normal 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()
|
||||
}
|
||||
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