use of io.xol.chunkstories.net.PacketDefinitionImplementation in project chunkstories by Hugobros3.
the class TCPServerConnection method handleDatagram.
@Override
public void handleDatagram(LogicalPacketDatagram datagram) throws IOException, PacketProcessingException, IllegalPacketException {
// (PacketDefinitionImpl) getPacketsContext().getContentTranslator().getPacketForId(datagram.packetTypeId);
PacketDefinitionImplementation definition = (PacketDefinitionImplementation) datagram.packetDefinition;
if (definition.getGenre() == PacketGenre.GENERAL_PURPOSE) {
Packet packet = definition.createNew(true, null);
packet.process(getRemoteServer(), datagram.getData(), getPacketsContext());
datagram.dispose();
} else if (definition.getGenre() == PacketGenre.SYSTEM) {
Packet packet = definition.createNew(true, null);
packet.process(getRemoteServer(), datagram.getData(), getPacketsContext());
if (packet instanceof PacketText) {
handleSystemRequest(((PacketText) packet).text);
}
datagram.dispose();
} else if (definition.getGenre() == PacketGenre.WORLD) {
WorldClientRemote world = getPacketsContext().getWorld();
world.queueDatagram(datagram);
} else if (definition.getGenre() == PacketGenre.WORLD_STREAMING) {
WorldClientRemote world = getPacketsContext().getWorld();
PacketWorldStreaming packet = (PacketWorldStreaming) definition.createNew(true, world);
packet.process(getRemoteServer(), datagram.getData(), getPacketsContext());
world.ioHandler().handlePacketWorldStreaming(packet);
datagram.dispose();
} else {
throw new RuntimeException("whut");
}
}
use of io.xol.chunkstories.net.PacketDefinitionImplementation in project chunkstories by Hugobros3.
the class AbstractContentTranslator method assignPacketIds.
public void assignPacketIds(boolean overwrite) {
if (overwrite)
packetMappings = new HashMap<>();
content.packets().all().forEachRemaining(def -> {
PacketDefinitionImplementation definition = (PacketDefinitionImplementation) def;
if (overwrite || packetMappings.get(definition) == null) {
int packetId = definition.getFixedId();
if (packetId != -1) {
packetMappings.put(definition, packetId);
logger.debug("Using pre-Assignated id " + packetId + " to " + definition.getName());
}
}
});
content.packets().all().forEachRemaining(def -> {
PacketDefinitionImplementation definition = (PacketDefinitionImplementation) def;
if (overwrite || packetMappings.get(definition) == null) {
int packetId = definition.getFixedId();
if (packetId == -1) {
packetId = findNextFreeId(0, packetMappings.values());
packetMappings.put(definition, packetId);
logger.debug("Assignated id " + packetId + " to " + definition.getName());
}
}
});
}
use of io.xol.chunkstories.net.PacketDefinitionImplementation in project chunkstories by Hugobros3.
the class SocketedClientConnection method handleDatagram.
@Override
public void handleDatagram(LogicalPacketDatagram datagram) throws IOException, PacketProcessingException, IllegalPacketException {
// getPacketsContext().getContentTranslator().getPacketForId(datagram.packetTypeId);
PacketDefinitionImplementation definition = (PacketDefinitionImplementation) datagram.packetDefinition;
if (definition.getGenre() == PacketGenre.GENERAL_PURPOSE) {
Packet packet = definition.createNew(true, null);
packet.process(packetsProcessor.getInterlocutor(), datagram.getData(), getPacketsContext());
datagram.dispose();
} else if (definition.getGenre() == PacketGenre.SYSTEM) {
Packet packet = definition.createNew(true, null);
packet.process(packetsProcessor.getInterlocutor(), datagram.getData(), getPacketsContext());
if (packet instanceof PacketText) {
handleSystemRequest(((PacketText) packet).text);
}
datagram.dispose();
} else if (definition.getGenre() == PacketGenre.WORLD) {
// Queue packets for a specific world
if (player != null) {
WorldServer world = player.getWorld();
if (world != null) {
world.queueDatagram(datagram, player);
}
}
} else if (definition.getGenre() == PacketGenre.WORLD_STREAMING) {
// Server doesn't expect world streaming updates from the client
// it does, however, listen to world_user_requests packets to keep
// track of the client's world data
WorldServer world = getPacketsContext().getWorld();
PacketWorldStreaming packet = (PacketWorldStreaming) definition.createNew(false, world);
packet.process(packetsProcessor.getInterlocutor(), datagram.getData(), getPacketsContext());
datagram.dispose();
} else {
throw new RuntimeException("whut");
}
}
use of io.xol.chunkstories.net.PacketDefinitionImplementation in project chunkstories by Hugobros3.
the class WorldServer method processIncommingPackets.
public void processIncommingPackets() {
try {
entitiesLock.writeLock().lock();
Iterator<PendingPlayerDatagram> iterator = packetsQueue.iterator();
while (iterator.hasNext()) {
PendingPlayerDatagram incomming = iterator.next();
iterator.remove();
ServerPlayer player = incomming.player;
LogicalPacketDatagram datagram = incomming.datagram;
try {
// this.getContentTranslator().getPacketForId(datagram.packetTypeId);
PacketDefinitionImplementation definition = (PacketDefinitionImplementation) datagram.packetDefinition;
Packet packet = definition.createNew(false, this);
if (definition.getGenre() != PacketGenre.WORLD || !(packet instanceof PacketWorld)) {
logger().error(definition + " isn't a PacketWorld");
} else {
PacketWorld packetWorld = (PacketWorld) packet;
// packetsProcessor.getSender() is equivalent to player here
packetWorld.process(player, datagram.getData(), player.getPlayerConnection().getPacketsContext());
}
} catch (IOException | PacketProcessingException e) {
logger().warn("Networking Exception while processing datagram: " + e.getMessage());
} catch (Exception e) {
logger().warn("Exception while processing datagram: " + e.getMessage());
}
datagram.dispose();
}
} finally {
entitiesLock.writeLock().unlock();
}
}
use of io.xol.chunkstories.net.PacketDefinitionImplementation in project chunkstories by Hugobros3.
the class WorldClientRemote method processIncommingPackets.
// Accepts and processes synched packets
public void processIncommingPackets() {
try {
entitiesLock.writeLock().lock();
@SuppressWarnings("unused") int packetsThisTick = 0;
Iterator<LogicalPacketDatagram> i = incommingDatagrams.iterator();
while (i.hasNext()) {
LogicalPacketDatagram datagram = i.next();
try {
// this.getContentTranslator().getPacketForId(datagram.packetTypeId);
PacketDefinitionImplementation definition = (PacketDefinitionImplementation) datagram.packetDefinition;
Packet packet = definition.createNew(true, this);
if (definition.getGenre() != PacketGenre.WORLD || !(packet instanceof PacketWorld)) {
logger().error(definition + " isn't a PacketWorld");
} else {
PacketWorld packetWorld = (PacketWorld) packet;
// packetsProcessor.getSender() is equivalent to getRemoteServer() here
packetWorld.process(packetsProcessor.getInterlocutor(), datagram.getData(), packetsProcessor);
}
} catch (IOException | PacketProcessingException e) {
logger().warn("Networking Exception while processing datagram: " + e.getMessage());
} catch (Exception e) {
logger().warn("Exception while processing datagram: " + e.getMessage());
}
datagram.dispose();
i.remove();
packetsThisTick++;
}
} finally {
entitiesLock.writeLock().unlock();
}
}
Aggregations