Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- import java.util.function.BiConsumer;
- public class Server {
- // port of server
- private final int PORT;
- // Thread pool
- ExecutorService threadPool;
- // Max Thread pool count
- private final int THREAD_COUNT = 10;
- //server
- private ServerSocket server;
- // backing container
- private Map<String, String> db;
- // boolean that tells server to stop
- private volatile boolean stop = false;
- public Server(int port){
- this.PORT = port;
- db = new HashMap<>();
- try {
- server = new ServerSocket(PORT);
- } catch (IOException e) {
- e.printStackTrace();
- }
- threadPool = Executors.newFixedThreadPool(THREAD_COUNT);
- }
- public void listen(){
- try {
- while(!stop){
- threadPool.execute(onSocket(server.accept(), onInput));
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public void stop(){
- threadPool.shutdown();
- stop = true;
- }
- private BiConsumer<String, PrintWriter> onInput = (input, output) -> {
- // incoming msg
- String[] inMessage = input.split(":");
- String identifier = inMessage[0];
- String[] keyValuePair = inMessage[1].split("-");
- String key = keyValuePair.length > 0 ? keyValuePair[0] : "";
- String value = keyValuePair.length > 1 ? keyValuePair[1] : "";
- // out going msg
- String outMessage;
- switch (identifier){
- case "Add":
- db.put(key, value);
- outMessage = "Success: Added value";
- break;
- case "AddList":
- String dbValue = db.getOrDefault(key, "");
- value = dbValue.equals("") ? value : String.format("%s,%s", dbValue, value);
- db.put(key, value);
- outMessage = "Success: Added value";
- break;
- case "Get":
- outMessage = db.getOrDefault(key, "null");
- break;
- case "GetList":
- outMessage = db.getOrDefault(key, "null");
- break;
- case "shutdown":
- stop();
- outMessage = "Shutting down Server";
- break;
- default:
- outMessage = "Error: Unknown Command";
- }
- output.println(outMessage);
- };
- private Runnable onSocket(final Socket client, BiConsumer<String, PrintWriter> onInput){
- return () -> {
- try{
- PrintWriter output = new PrintWriter(client.getOutputStream(), true);
- BufferedReader input = new BufferedReader(new InputStreamReader(client.getInputStream()));
- onInput.accept(input.readLine(), output);
- output.close();
- input.close();
- client.close();
- } catch (IOException e){
- e.printStackTrace();
- }
- };
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement