From 441bc9eb7783568d01a996f02981386c71ba8230 Mon Sep 17 00:00:00 2001 From: Major- Date: Thu, 26 Feb 2015 21:03:59 +0000 Subject: [PATCH 1/2] Fix IdAssignment issue. --- src/org/apollo/game/GameService.java | 15 ++++++++--- src/org/apollo/net/session/LoginSession.java | 28 +++++++++----------- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/org/apollo/game/GameService.java b/src/org/apollo/game/GameService.java index 31cc3730..3f647950 100644 --- a/src/org/apollo/game/GameService.java +++ b/src/org/apollo/game/GameService.java @@ -148,14 +148,21 @@ public final class GameService extends Service { } /** - * Registers a player (may block!). + * Registers a {@link Player} (may block!). * - * @param player The player. + * @param player The Player. + * @param session The {@link GameSession} of the Player. + * @param reconnecting The reconnecting flag. * @return A {@link RegistrationStatus}. */ - public RegistrationStatus registerPlayer(Player player) { + public RegistrationStatus registerPlayer(Player player, GameSession session, boolean reconnecting) { synchronized (this) { - return World.getWorld().register(player); + RegistrationStatus status = World.getWorld().register(player); + if (status == RegistrationStatus.OK) { + player.setSession(session, reconnecting); + } + + return status; } } diff --git a/src/org/apollo/net/session/LoginSession.java b/src/org/apollo/net/session/LoginSession.java index 1d0712aa..827249d0 100644 --- a/src/org/apollo/net/session/LoginSession.java +++ b/src/org/apollo/net/session/LoginSession.java @@ -85,37 +85,33 @@ public final class LoginSession extends Session { * @param response The response. */ public void handlePlayerLoaderResponse(LoginRequest request, PlayerLoaderResponse response) { - GameService gameService = serverContext.getService(GameService.class); + GameService service = serverContext.getService(GameService.class); Channel channel = getChannel(); - Optional responsePlayer = response.getPlayer(); + Optional optional = response.getPlayer(); int status = response.getStatus(), rights = 0; boolean flagged = false; - if (responsePlayer.isPresent()) { - Player player = responsePlayer.get(); + if (optional.isPresent()) { + Player player = optional.get(); rights = player.getPrivilegeLevel().toInteger(); GameSession session = new GameSession(channel, serverContext, player); - player.setSession(session, false /* TODO */); + RegistrationStatus registration = service.registerPlayer(player, session, request.isReconnecting()); - RegistrationStatus registrationStatus = gameService.registerPlayer(player); - - if (registrationStatus != RegistrationStatus.OK) { - responsePlayer = Optional.empty(); + if (registration != RegistrationStatus.OK) { + optional = Optional.empty(); rights = 0; - if (registrationStatus == RegistrationStatus.ALREADY_ONLINE) { - status = LoginConstants.STATUS_ACCOUNT_ONLINE; - } else { - status = LoginConstants.STATUS_SERVER_FULL; - } + + status = (registration == RegistrationStatus.ALREADY_ONLINE) ? LoginConstants.STATUS_ACCOUNT_ONLINE + : LoginConstants.STATUS_SERVER_FULL; } } ChannelFuture future = channel.writeAndFlush(new LoginResponse(status, rights, flagged)); destroy(); - if (responsePlayer.isPresent()) { + if (optional.isPresent()) { IsaacRandomPair randomPair = request.getRandomPair(); Release release = serverContext.getRelease(); @@ -129,7 +125,7 @@ public final class LoginSession extends Session { channel.pipeline().remove("loginDecoder"); channel.pipeline().remove("loginEncoder"); - channelContext.attr(NetworkConstants.SESSION_KEY).set(responsePlayer.get().getSession()); + channelContext.attr(NetworkConstants.SESSION_KEY).set(optional.get().getSession()); } else { future.addListener(ChannelFutureListener.CLOSE); } From 5fe5aa394096606f95ceeee5936d254d0b6e1c14 Mon Sep 17 00:00:00 2001 From: Major- Date: Thu, 26 Feb 2015 21:23:37 +0000 Subject: [PATCH 2/2] Add support for simple overlay interfaces. --- ....java => OpenInterfaceOverlayMessage.java} | 24 ++++++------- .../game/message/impl/OpenOverlayMessage.java | 35 +++++++++++++++++++ .../apollo/game/model/inter/InterfaceSet.java | 32 +++++++++++++++-- ...> OpenInterfaceOverlayMessageEncoder.java} | 10 +++--- .../r317/OpenOverlayMessageEncoder.java | 24 +++++++++++++ .../apollo/net/release/r317/Release317.java | 6 ++-- ...> OpenInterfaceOverlayMessageEncoder.java} | 10 +++--- .../r377/OpenOverlayMessageEncoder.java | 25 +++++++++++++ .../apollo/net/release/r377/Release377.java | 7 ++-- 9 files changed, 144 insertions(+), 29 deletions(-) rename src/org/apollo/game/message/impl/{OpenInterfaceSidebarMessage.java => OpenInterfaceOverlayMessage.java} (54%) create mode 100644 src/org/apollo/game/message/impl/OpenOverlayMessage.java rename src/org/apollo/net/release/r317/{OpenInterfaceSidebarMessageEncoder.java => OpenInterfaceOverlayMessageEncoder.java} (58%) create mode 100644 src/org/apollo/net/release/r317/OpenOverlayMessageEncoder.java rename src/org/apollo/net/release/r377/{OpenInterfaceSidebarMessageEncoder.java => OpenInterfaceOverlayMessageEncoder.java} (64%) create mode 100644 src/org/apollo/net/release/r377/OpenOverlayMessageEncoder.java diff --git a/src/org/apollo/game/message/impl/OpenInterfaceSidebarMessage.java b/src/org/apollo/game/message/impl/OpenInterfaceOverlayMessage.java similarity index 54% rename from src/org/apollo/game/message/impl/OpenInterfaceSidebarMessage.java rename to src/org/apollo/game/message/impl/OpenInterfaceOverlayMessage.java index 276047e6..1d34521d 100644 --- a/src/org/apollo/game/message/impl/OpenInterfaceSidebarMessage.java +++ b/src/org/apollo/game/message/impl/OpenInterfaceOverlayMessage.java @@ -3,11 +3,11 @@ package org.apollo.game.message.impl; import org.apollo.game.message.Message; /** - * A {@link Message} sent to the client to open an interface and temporary sidebar overlay. + * A {@link Message} sent to the client to open an interface and temporary overlay. * * @author Graham */ -public final class OpenInterfaceSidebarMessage extends Message { +public final class OpenInterfaceOverlayMessage extends Message { /** * The interface id. @@ -15,19 +15,19 @@ public final class OpenInterfaceSidebarMessage extends Message { private final int interfaceId; /** - * The sidebar id. + * The overlay id. */ - private final int sidebarId; + private final int overlayId; /** - * Creates the open interface sidebar message. + * Creates the open interface overlay message. * * @param interfaceId The interface id. - * @param sidebarId The sidebar id. + * @param overlayId The overlay id. */ - public OpenInterfaceSidebarMessage(int interfaceId, int sidebarId) { + public OpenInterfaceOverlayMessage(int interfaceId, int overlayId) { this.interfaceId = interfaceId; - this.sidebarId = sidebarId; + this.overlayId = overlayId; } /** @@ -40,12 +40,12 @@ public final class OpenInterfaceSidebarMessage extends Message { } /** - * Gets the sidebar id. + * Gets the overlay id. * - * @return The sidebar id. + * @return The overlay id. */ - public int getSidebarId() { - return sidebarId; + public int getOverlayId() { + return overlayId; } } \ No newline at end of file diff --git a/src/org/apollo/game/message/impl/OpenOverlayMessage.java b/src/org/apollo/game/message/impl/OpenOverlayMessage.java new file mode 100644 index 00000000..90ad7dbc --- /dev/null +++ b/src/org/apollo/game/message/impl/OpenOverlayMessage.java @@ -0,0 +1,35 @@ +package org.apollo.game.message.impl; + +import org.apollo.game.message.Message; + +/** + * A {@link Message} sent to the client to open an overlay interface. + * + * @author Major + */ +public final class OpenOverlayMessage extends Message { + + /** + * The overlay id. + */ + private final int overlayId; + + /** + * Creates the open interface overlay message. + * + * @param overlayId The overlay id. + */ + public OpenOverlayMessage(int overlayId) { + this.overlayId = overlayId; + } + + /** + * Gets the overlay id. + * + * @return The overlay id. + */ + public int getOverlayId() { + return overlayId; + } + +} \ No newline at end of file diff --git a/src/org/apollo/game/model/inter/InterfaceSet.java b/src/org/apollo/game/model/inter/InterfaceSet.java index 72835dac..b2178eac 100644 --- a/src/org/apollo/game/model/inter/InterfaceSet.java +++ b/src/org/apollo/game/model/inter/InterfaceSet.java @@ -8,9 +8,11 @@ import org.apollo.game.message.impl.CloseInterfaceMessage; import org.apollo.game.message.impl.EnterAmountMessage; import org.apollo.game.message.impl.OpenDialogueInterfaceMessage; import org.apollo.game.message.impl.OpenInterfaceMessage; -import org.apollo.game.message.impl.OpenInterfaceSidebarMessage; +import org.apollo.game.message.impl.OpenInterfaceOverlayMessage; +import org.apollo.game.message.impl.OpenOverlayMessage; import org.apollo.game.model.entity.Player; import org.apollo.game.model.inter.dialogue.DialogueListener; +import org.apollo.game.model.inv.InventoryListener; /** * Represents the set of interfaces the player has open. @@ -217,7 +219,33 @@ public final class InterfaceSet { interfaces.put(InterfaceType.WINDOW, windowId); interfaces.put(InterfaceType.SIDEBAR, sidebarId); - player.send(new OpenInterfaceSidebarMessage(windowId, sidebarId)); + player.send(new OpenInterfaceOverlayMessage(windowId, sidebarId)); + } + + /** + * Opens an overlay interface. + * + * @param overlay The overlay id. + */ + public void openOverlay(int overlay) { + closeAndNotify(); + interfaces.put(InterfaceType.OVERLAY, overlay); + + player.send(new OpenOverlayMessage(overlay)); + } + + /** + * Opens an overlay interface with the specified {@link InventoryListener}. + * + * @param listener The listener. + * @param overlay The overlay id. + */ + public void openOverlay(InterfaceListener listener, int overlay) { + closeAndNotify(); + this.listener = Optional.ofNullable(listener); + interfaces.put(InterfaceType.OVERLAY, overlay); + + player.send(new OpenOverlayMessage(overlay)); } /** diff --git a/src/org/apollo/net/release/r317/OpenInterfaceSidebarMessageEncoder.java b/src/org/apollo/net/release/r317/OpenInterfaceOverlayMessageEncoder.java similarity index 58% rename from src/org/apollo/net/release/r317/OpenInterfaceSidebarMessageEncoder.java rename to src/org/apollo/net/release/r317/OpenInterfaceOverlayMessageEncoder.java index a13edd65..1a1d18c9 100644 --- a/src/org/apollo/net/release/r317/OpenInterfaceSidebarMessageEncoder.java +++ b/src/org/apollo/net/release/r317/OpenInterfaceOverlayMessageEncoder.java @@ -1,6 +1,6 @@ package org.apollo.net.release.r317; -import org.apollo.game.message.impl.OpenInterfaceSidebarMessage; +import org.apollo.game.message.impl.OpenInterfaceOverlayMessage; import org.apollo.net.codec.game.DataTransformation; import org.apollo.net.codec.game.DataType; import org.apollo.net.codec.game.GamePacket; @@ -8,17 +8,17 @@ import org.apollo.net.codec.game.GamePacketBuilder; import org.apollo.net.release.MessageEncoder; /** - * A {@link MessageEncoder} for the {@link OpenInterfaceSidebarMessage}. + * A {@link MessageEncoder} for the {@link OpenInterfaceOverlayMessage}. * * @author Graham */ -public final class OpenInterfaceSidebarMessageEncoder extends MessageEncoder { +public final class OpenInterfaceOverlayMessageEncoder extends MessageEncoder { @Override - public GamePacket encode(OpenInterfaceSidebarMessage message) { + public GamePacket encode(OpenInterfaceOverlayMessage message) { GamePacketBuilder builder = new GamePacketBuilder(248); builder.put(DataType.SHORT, DataTransformation.ADD, message.getInterfaceId()); - builder.put(DataType.SHORT, message.getSidebarId()); + builder.put(DataType.SHORT, message.getOverlayId()); return builder.toGamePacket(); } diff --git a/src/org/apollo/net/release/r317/OpenOverlayMessageEncoder.java b/src/org/apollo/net/release/r317/OpenOverlayMessageEncoder.java new file mode 100644 index 00000000..f9ff4a8c --- /dev/null +++ b/src/org/apollo/net/release/r317/OpenOverlayMessageEncoder.java @@ -0,0 +1,24 @@ +package org.apollo.net.release.r317; + +import org.apollo.game.message.impl.OpenOverlayMessage; +import org.apollo.net.codec.game.DataOrder; +import org.apollo.net.codec.game.DataType; +import org.apollo.net.codec.game.GamePacket; +import org.apollo.net.codec.game.GamePacketBuilder; +import org.apollo.net.release.MessageEncoder; + +/** + * A {@link MessageEncoder} for the {@link OpenOverlayMessage}. + * + * @author Major + */ +public final class OpenOverlayMessageEncoder extends MessageEncoder { + + @Override + public GamePacket encode(OpenOverlayMessage message) { + GamePacketBuilder builder = new GamePacketBuilder(142); + builder.put(DataType.SHORT, DataOrder.LITTLE, message.getOverlayId()); + return builder.toGamePacket(); + } + +} \ No newline at end of file diff --git a/src/org/apollo/net/release/r317/Release317.java b/src/org/apollo/net/release/r317/Release317.java index e011e1d8..e57d1d9e 100644 --- a/src/org/apollo/net/release/r317/Release317.java +++ b/src/org/apollo/net/release/r317/Release317.java @@ -17,7 +17,8 @@ import org.apollo.game.message.impl.LogoutMessage; import org.apollo.game.message.impl.NpcSynchronizationMessage; import org.apollo.game.message.impl.OpenDialogueInterfaceMessage; import org.apollo.game.message.impl.OpenInterfaceMessage; -import org.apollo.game.message.impl.OpenInterfaceSidebarMessage; +import org.apollo.game.message.impl.OpenInterfaceOverlayMessage; +import org.apollo.game.message.impl.OpenOverlayMessage; import org.apollo.game.message.impl.PlayerSynchronizationMessage; import org.apollo.game.message.impl.PositionMessage; import org.apollo.game.message.impl.PrivacyOptionMessage; @@ -178,7 +179,7 @@ public final class Release317 extends Release { register(UpdateItemsMessage.class, new UpdateItemsMessageEncoder()); register(UpdateSlottedItemsMessage.class, new UpdateSlottedItemsMessageEncoder()); register(UpdateSkillMessage.class, new UpdateSkillMessageEncoder()); - register(OpenInterfaceSidebarMessage.class, new OpenInterfaceSidebarMessageEncoder()); + register(OpenInterfaceOverlayMessage.class, new OpenInterfaceOverlayMessageEncoder()); register(EnterAmountMessage.class, new EnterAmountMessageEncoder()); register(SetWidgetTextMessage.class, new SetWidgetTextMessageEncoder()); register(NpcSynchronizationMessage.class, new NpcSynchronizationMessageEncoder()); @@ -209,5 +210,6 @@ public final class Release317 extends Release { register(SendFriendMessage.class, new SendFriendMessageEncoder()); register(HintIconMessage.class, new HintIconMessageEncoder()); register(FlashTabInterfaceMessage.class, new FlashTabInterfaceMessageEncoder()); + register(OpenOverlayMessage.class, new OpenOverlayMessageEncoder()); } } \ No newline at end of file diff --git a/src/org/apollo/net/release/r377/OpenInterfaceSidebarMessageEncoder.java b/src/org/apollo/net/release/r377/OpenInterfaceOverlayMessageEncoder.java similarity index 64% rename from src/org/apollo/net/release/r377/OpenInterfaceSidebarMessageEncoder.java rename to src/org/apollo/net/release/r377/OpenInterfaceOverlayMessageEncoder.java index 543c509a..2a83cc8c 100644 --- a/src/org/apollo/net/release/r377/OpenInterfaceSidebarMessageEncoder.java +++ b/src/org/apollo/net/release/r377/OpenInterfaceOverlayMessageEncoder.java @@ -1,6 +1,6 @@ package org.apollo.net.release.r377; -import org.apollo.game.message.impl.OpenInterfaceSidebarMessage; +import org.apollo.game.message.impl.OpenInterfaceOverlayMessage; import org.apollo.net.codec.game.DataOrder; import org.apollo.net.codec.game.DataTransformation; import org.apollo.net.codec.game.DataType; @@ -9,17 +9,17 @@ import org.apollo.net.codec.game.GamePacketBuilder; import org.apollo.net.release.MessageEncoder; /** - * A {@link MessageEncoder} for the {@link OpenInterfaceSidebarMessage}. + * A {@link MessageEncoder} for the {@link OpenInterfaceOverlayMessage}. * * @author Graham */ -public final class OpenInterfaceSidebarMessageEncoder extends MessageEncoder { +public final class OpenInterfaceOverlayMessageEncoder extends MessageEncoder { @Override - public GamePacket encode(OpenInterfaceSidebarMessage message) { + public GamePacket encode(OpenInterfaceOverlayMessage message) { GamePacketBuilder builder = new GamePacketBuilder(128); builder.put(DataType.SHORT, DataTransformation.ADD, message.getInterfaceId()); - builder.put(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD, message.getSidebarId()); + builder.put(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD, message.getOverlayId()); return builder.toGamePacket(); } diff --git a/src/org/apollo/net/release/r377/OpenOverlayMessageEncoder.java b/src/org/apollo/net/release/r377/OpenOverlayMessageEncoder.java new file mode 100644 index 00000000..e3364138 --- /dev/null +++ b/src/org/apollo/net/release/r377/OpenOverlayMessageEncoder.java @@ -0,0 +1,25 @@ +package org.apollo.net.release.r377; + +import org.apollo.game.message.impl.OpenOverlayMessage; +import org.apollo.net.codec.game.DataOrder; +import org.apollo.net.codec.game.DataTransformation; +import org.apollo.net.codec.game.DataType; +import org.apollo.net.codec.game.GamePacket; +import org.apollo.net.codec.game.GamePacketBuilder; +import org.apollo.net.release.MessageEncoder; + +/** + * A {@link MessageEncoder} for the {@link OpenOverlayMessage}. + * + * @author Major + */ +public final class OpenOverlayMessageEncoder extends MessageEncoder { + + @Override + public GamePacket encode(OpenOverlayMessage message) { + GamePacketBuilder builder = new GamePacketBuilder(246); + builder.put(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD, message.getOverlayId()); + return builder.toGamePacket(); + } + +} \ No newline at end of file diff --git a/src/org/apollo/net/release/r377/Release377.java b/src/org/apollo/net/release/r377/Release377.java index d943f6bd..9cee1c14 100644 --- a/src/org/apollo/net/release/r377/Release377.java +++ b/src/org/apollo/net/release/r377/Release377.java @@ -17,7 +17,8 @@ import org.apollo.game.message.impl.LogoutMessage; import org.apollo.game.message.impl.NpcSynchronizationMessage; import org.apollo.game.message.impl.OpenDialogueInterfaceMessage; import org.apollo.game.message.impl.OpenInterfaceMessage; -import org.apollo.game.message.impl.OpenInterfaceSidebarMessage; +import org.apollo.game.message.impl.OpenInterfaceOverlayMessage; +import org.apollo.game.message.impl.OpenOverlayMessage; import org.apollo.game.message.impl.PlayerSynchronizationMessage; import org.apollo.game.message.impl.PositionMessage; import org.apollo.game.message.impl.PrivacyOptionMessage; @@ -42,7 +43,6 @@ import org.apollo.game.message.impl.UpdateTileItemMessage; import org.apollo.game.message.impl.UpdateWeightMessage; import org.apollo.net.meta.PacketMetaDataGroup; import org.apollo.net.release.Release; -import org.apollo.net.release.r317.FlashTabInterfaceMessageEncoder; /** * A {@link Release} implementation for the 377 protocol. @@ -175,7 +175,7 @@ public final class Release377 extends Release { register(UpdateItemsMessage.class, new UpdateItemsMessageEncoder()); register(UpdateSlottedItemsMessage.class, new UpdateSlottedItemsMessageEncoder()); register(UpdateSkillMessage.class, new UpdateSkillMessageEncoder()); - register(OpenInterfaceSidebarMessage.class, new OpenInterfaceSidebarMessageEncoder()); + register(OpenInterfaceOverlayMessage.class, new OpenInterfaceOverlayMessageEncoder()); register(EnterAmountMessage.class, new EnterAmountMessageEncoder()); register(SetWidgetTextMessage.class, new SetWidgetTexMessageEncoder()); register(NpcSynchronizationMessage.class, new NpcSynchronizationMessageEncoder()); @@ -206,6 +206,7 @@ public final class Release377 extends Release { register(SendFriendMessage.class, new SendFriendMessageEncoder()); register(HintIconMessage.class, new HintIconMessageEncoder()); register(FlashTabInterfaceMessage.class, new FlashTabInterfaceMessageEncoder()); + register(OpenOverlayMessage.class, new OpenOverlayMessageEncoder()); } } \ No newline at end of file