From 5ed7bfb4862742c99949ebf7f35576c6b1080bd0 Mon Sep 17 00:00:00 2001 From: Chris Kearney <chris@kearneymail.com> Date: Sat, 13 May 2017 18:48:10 -0700 Subject: [PATCH] load merchant --- .../commands/admin/LoadItemCommand.java | 2 +- .../commands/admin/LoadMerchantCommand.java | 98 +++++++++++++++++++ .../commands/admin/LoadNpcCommand.java | 2 +- .../configuration/ConfigureCommands.java | 1 + 4 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/comandante/creeper/command/commands/admin/LoadMerchantCommand.java diff --git a/src/main/java/com/comandante/creeper/command/commands/admin/LoadItemCommand.java b/src/main/java/com/comandante/creeper/command/commands/admin/LoadItemCommand.java index 7597911d..8a4e1719 100644 --- a/src/main/java/com/comandante/creeper/command/commands/admin/LoadItemCommand.java +++ b/src/main/java/com/comandante/creeper/command/commands/admin/LoadItemCommand.java @@ -45,7 +45,7 @@ public class LoadItemCommand extends Command { String itemJsonUrl = originalMessageParts.get(0); if (!isValidURL(itemJsonUrl)) { - write("Inavlid HTTP address." + "\r\n"); + write("Invalid HTTP address." + "\r\n"); return; } diff --git a/src/main/java/com/comandante/creeper/command/commands/admin/LoadMerchantCommand.java b/src/main/java/com/comandante/creeper/command/commands/admin/LoadMerchantCommand.java new file mode 100644 index 00000000..a3cb14f9 --- /dev/null +++ b/src/main/java/com/comandante/creeper/command/commands/admin/LoadMerchantCommand.java @@ -0,0 +1,98 @@ +package com.comandante.creeper.command.commands.admin; + +import com.comandante.creeper.command.commands.Command; +import com.comandante.creeper.core_game.GameManager; +import com.comandante.creeper.merchant.MerchantMetadata; +import com.comandante.creeper.player.PlayerRole; +import com.google.common.collect.Sets; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.util.EntityUtils; +import org.jboss.netty.channel.ChannelHandlerContext; +import org.jboss.netty.channel.MessageEvent; + +import java.net.MalformedURLException; +import java.net.URISyntaxException; +import java.net.URL; +import java.util.Arrays; +import java.util.List; +import java.util.Set; + +public class LoadMerchantCommand extends Command { + + final static List<String> validTriggers = Arrays.asList("loadmerchant"); + final static String description = "Load a Merchant using JSON over http"; + final static String correctUsage = "loadmerchant <http url with json for npc>"; + final static Set<PlayerRole> roles = Sets.newHashSet(PlayerRole.ADMIN); + + public LoadMerchantCommand(GameManager gameManager) { + super(gameManager, validTriggers, description, correctUsage, roles); + } + + @Override + public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { + execCommand(ctx, e, () -> { + + if (originalMessageParts.size() <= 1) { + write("Please specify a http url." + "\r\n"); + return; + } + + originalMessageParts.remove(0); + + + String npcJsonHttpUrl = originalMessageParts.get(0); + if (!isValidURL(npcJsonHttpUrl)) { + write("Invalid HTTP address." + "\r\n"); + return; + } + + HttpGet httpGet = new HttpGet(npcJsonHttpUrl); + + HttpClient httpclient = gameManager.getHttpclient(); + + HttpResponse httpResponse = httpclient.execute(httpGet); + + HttpEntity entity = httpResponse.getEntity(); + + if (entity == null) { + write("Error retrieving JSON url." + "\r\n"); + return; + } + + String npcJson = EntityUtils.toString(entity); + + MerchantMetadata merchantMetadata = null; + try { + merchantMetadata = gameManager.getGson().fromJson(npcJson, MerchantMetadata.class); + } catch (Exception ex) { + write("Retrieved JSON file is malformed. " + ex.getLocalizedMessage() + "\r\n"); + return; + } + httpGet.reset(); + + gameManager.getMerchantStorage().saveMerchantMetadata(merchantMetadata); + write("Merchant Saved. - " + merchantMetadata.getInternalName() + "\r\n"); + + }); + } + + public boolean isValidURL(String url) { + URL u = null; + try { + u = new URL(url); + } catch (MalformedURLException e) { + return false; + } + try { + u.toURI(); + } catch (URISyntaxException e) { + return false; + } + return true; + } + +} + diff --git a/src/main/java/com/comandante/creeper/command/commands/admin/LoadNpcCommand.java b/src/main/java/com/comandante/creeper/command/commands/admin/LoadNpcCommand.java index 82ef7744..f9c13be5 100644 --- a/src/main/java/com/comandante/creeper/command/commands/admin/LoadNpcCommand.java +++ b/src/main/java/com/comandante/creeper/command/commands/admin/LoadNpcCommand.java @@ -45,7 +45,7 @@ public class LoadNpcCommand extends Command { String npcJsonHttpUrl = originalMessageParts.get(0); if (!isValidURL(npcJsonHttpUrl)) { - write("Inavlid HTTP address." + "\r\n"); + write("Invalid HTTP address." + "\r\n"); return; } diff --git a/src/main/java/com/comandante/creeper/configuration/ConfigureCommands.java b/src/main/java/com/comandante/creeper/configuration/ConfigureCommands.java index e12702d7..1c4b1e0e 100644 --- a/src/main/java/com/comandante/creeper/configuration/ConfigureCommands.java +++ b/src/main/java/com/comandante/creeper/configuration/ConfigureCommands.java @@ -103,5 +103,6 @@ public class ConfigureCommands { creeperCommandRegistry.addCommand(new ToggleChatCommand(gameManager)); creeperCommandRegistry.addCommand(new LoadNpcCommand(gameManager)); creeperCommandRegistry.addCommand(new LoadItemCommand(gameManager)); + creeperCommandRegistry.addCommand(new LoadMerchantCommand(gameManager)); } } -- GitLab