Some more logic updates for server management.
This commit is contained in:
parent
20295596fa
commit
9aeb5cd048
|
@ -55,7 +55,7 @@ public class CommunicationHandler {
|
|||
socket.setSoTimeout(1000);
|
||||
in = Net.getInputStream(socket.getInputStream());
|
||||
out = Net.getOutputStream(socket.getOutputStream());
|
||||
Net.write(new ConnectRequestMessage(username), out);
|
||||
Net.write(new ConnectRequestMessage(username, true), out);
|
||||
Message response = Net.read(in);
|
||||
socket.setSoTimeout(0);
|
||||
if (response instanceof ConnectRejectMessage rejectMessage) {
|
||||
|
|
|
@ -2,4 +2,10 @@ package nl.andrewl.aos_core.net.connect;
|
|||
|
||||
import nl.andrewl.record_net.Message;
|
||||
|
||||
public record ConnectRequestMessage(String username) implements Message {}
|
||||
/**
|
||||
* The first message that a client sends via TCP to the server, to indicate
|
||||
* that they'd like to join.
|
||||
* @param username The player's chosen username.
|
||||
* @param spectator Whether the player wants to be a spectator.
|
||||
*/
|
||||
public record ConnectRequestMessage(String username, boolean spectator) implements Message {}
|
||||
|
|
|
@ -111,8 +111,7 @@ public class ClientCommunicationHandler {
|
|||
// Try to set the TCP timeout back to 0 now that we've got the correct request.
|
||||
socket.setSoTimeout(0);
|
||||
this.clientAddress = socket.getInetAddress();
|
||||
connectionEstablished = true;
|
||||
this.player = server.getPlayerManager().register(this, connectMsg.username());
|
||||
this.player = server.getPlayerManager().register(this, connectMsg.username(), connectMsg.spectator());
|
||||
Net.write(new ConnectAcceptMessage(player.getId()), out);
|
||||
sendInitialData();
|
||||
sendTcpMessage(ChatMessage.privateMessage("Welcome to the server, " + player.getUsername() + "."));
|
||||
|
@ -123,6 +122,7 @@ public class ClientCommunicationHandler {
|
|||
TcpReceiver tcpReceiver = new TcpReceiver(in, this::handleTcpMessage)
|
||||
.withShutdownHook(() -> server.getPlayerManager().deregister(this.player));
|
||||
new Thread(tcpReceiver).start();
|
||||
connectionEstablished = true;
|
||||
}
|
||||
} catch (SocketTimeoutException e) {
|
||||
// Ignore this one, since this will happen if the client doesn't send data properly.
|
||||
|
@ -231,7 +231,7 @@ public class ClientCommunicationHandler {
|
|||
out.writeFloat(player.getOrientation().y());
|
||||
|
||||
out.writeBoolean(player.isCrouching());
|
||||
out.writeInt(player.getInventory().getSelectedItemStack().getType().getId());
|
||||
out.writeInt(player.getInventory().getSelectedItemStack() == null ? -1 : player.getInventory().getSelectedItemStack().getType().getId());
|
||||
out.writeByte(player.getInventory().getSelectedBlockValue());
|
||||
out.writeInt(player.getMode().ordinal());
|
||||
}
|
||||
|
|
|
@ -29,15 +29,18 @@ public class PlayerManager {
|
|||
this.server = server;
|
||||
}
|
||||
|
||||
public synchronized ServerPlayer register(ClientCommunicationHandler handler, String username) {
|
||||
Team team = findBestTeamForNewPlayer();
|
||||
ServerPlayer player = new ServerPlayer(nextClientId++, username, team, PlayerMode.NORMAL);
|
||||
public synchronized ServerPlayer register(ClientCommunicationHandler handler, String username, boolean spectator) {
|
||||
PlayerMode mode = spectator ? PlayerMode.SPECTATOR : PlayerMode.NORMAL;
|
||||
Team team = mode != PlayerMode.NORMAL ? null : findBestTeamForNewPlayer();
|
||||
ServerPlayer player = new ServerPlayer(nextClientId++, username, team, mode);
|
||||
if (player.getMode() == PlayerMode.NORMAL || player.getMode() == PlayerMode.CREATIVE) {
|
||||
var inv = player.getInventory();
|
||||
inv.getItemStacks().add(new GunItemStack(ItemTypes.RIFLE));
|
||||
inv.getItemStacks().add(new GunItemStack(ItemTypes.AK_47));
|
||||
inv.getItemStacks().add(new GunItemStack(ItemTypes.WINCHESTER));
|
||||
inv.getItemStacks().add(new BlockItemStack(ItemTypes.BLOCK, 50, (byte) 1));
|
||||
inv.setSelectedIndex(0);
|
||||
}
|
||||
|
||||
System.out.printf("Registered player \"%s\" with id %d.%n", player.getUsername(), player.getId());
|
||||
players.put(player.getId(), player);
|
||||
|
@ -57,11 +60,13 @@ public class PlayerManager {
|
|||
player.getVelocity().x(), player.getVelocity().y(), player.getVelocity().z(),
|
||||
player.getOrientation().x(), player.getOrientation().y(),
|
||||
player.isCrouching(),
|
||||
player.getInventory().getSelectedItemStack().getType().getId(),
|
||||
player.getInventory().getSelectedItemStack() == null ? -1 : player.getInventory().getSelectedItemStack().getType().getId(),
|
||||
player.getInventory().getSelectedBlockValue(),
|
||||
player.getMode()
|
||||
), player);
|
||||
if (player.getMode() != PlayerMode.SPECTATOR) {
|
||||
broadcastTcpMessageToAllBut(ChatMessage.announce(joinMessage), player);
|
||||
}
|
||||
return player;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue