Add task chat command

Co-authored-by: Spedwards <improbablepuzzle@gmail.com>
This commit is contained in:
Adam
2019-01-22 19:13:32 -05:00
parent 31b52d779c
commit 41ae79437e
7 changed files with 376 additions and 1 deletions

View File

@@ -27,6 +27,9 @@ package net.runelite.http.service.chat;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.runelite.http.api.chat.Task;
import net.runelite.http.service.util.exception.NotFoundException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@@ -39,6 +42,9 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/chat")
public class ChatController
{
private static final Pattern STRING_VALIDATION = Pattern.compile("[^a-zA-Z0-9' -]");
private static final int STRING_MAX_LENGTH = 50;
private final Cache<KillCountKey, Integer> killCountCache = CacheBuilder.newBuilder()
.expireAfterWrite(2, TimeUnit.MINUTES)
.maximumSize(128L)
@@ -100,4 +106,31 @@ public class ChatController
}
return kc;
}
@PostMapping("/task")
public void submitTask(@RequestParam String name, @RequestParam("task") String taskName, @RequestParam int amount,
@RequestParam int initialAmount, @RequestParam String location)
{
Matcher mTask = STRING_VALIDATION.matcher(taskName);
Matcher mLocation = STRING_VALIDATION.matcher(location);
if (mTask.find() || taskName.length() > STRING_MAX_LENGTH ||
mLocation.find() || location.length() > STRING_MAX_LENGTH)
{
return;
}
Task task = new Task();
task.setTask(taskName);
task.setAmount(amount);
task.setInitialAmount(initialAmount);
task.setLocation(location);
chatService.setTask(name, task);
}
@GetMapping("/task")
public Task getTask(@RequestParam String name)
{
return chatService.getTask(name);
}
}

View File

@@ -24,7 +24,10 @@
*/
package net.runelite.http.service.chat;
import com.google.common.collect.ImmutableMap;
import java.time.Duration;
import java.util.Map;
import net.runelite.http.api.chat.Task;
import net.runelite.http.service.util.redis.RedisPool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -78,4 +81,44 @@ public class ChatService
jedis.setex("qp." + name, (int) EXPIRE.getSeconds(), Integer.toString(qp));
}
}
public Task getTask(String name)
{
Map<String, String> map;
try (Jedis jedis = jedisPool.getResource())
{
map = jedis.hgetAll("task." + name);
}
if (map.isEmpty())
{
return null;
}
Task task = new Task();
task.setTask(map.get("task"));
task.setAmount(Integer.parseInt(map.get("amount")));
task.setInitialAmount(Integer.parseInt(map.get("initialAmount")));
task.setLocation(map.get("location"));
return task;
}
public void setTask(String name, Task task)
{
Map<String, String> taskMap = ImmutableMap.<String, String>builderWithExpectedSize(4)
.put("task", task.getTask())
.put("amount", Integer.toString(task.getAmount()))
.put("initialAmount", Integer.toString(task.getInitialAmount()))
.put("location", task.getLocation())
.build();
String key = "task." + name;
try (Jedis jedis = jedisPool.getResource())
{
jedis.hmset(key, taskMap);
jedis.expire(key, (int) EXPIRE.getSeconds());
}
}
}