A NanoHttpd webszerverre alapozva elkezdtünk (egész pontosan Hornák Bence elkezdte) megírni egy "egyszámjáték" szervert. Első alkalommal a következő metódusok készültek el:
A szerverünk memóriában tárolja az állapotokat, és pillanatnyilag nem végez beléptetést / jogosultság ellenőrzést. A terv az, hogy jövő héten kiegészítjük felhasználói azonosítással, és valamilyen egyszerű webes klienssel. Készülőben lévő kód: package hu.berzsenyi.hb; import java.io.IOException; import java.util.HashMap; import java.util.Map; import fi.iki.elonen.NanoHTTPD; import fi.iki.elonen.NanoHTTPD.IHTTPSession; import fi.iki.elonen.NanoHTTPD.Response; import fi.iki.elonen.NanoHTTPD.Response.Status; public class OneNumberGame extends NanoHTTPD { private final Boolean ONE = true, MORE = false; private Map<Integer, Boolean> numbers = new HashMap<Integer, Boolean>(); private boolean running = true; public OneNumberGame() { super(80); } @Override public Response serve(IHTTPSession session) { String uri = session.getUri(); if (uri.equals("/send")) return send(session.getParms()); else if (uri.equals("/finish")) return finish(); else if (uri.equals("/winner")) return winner(); else if (uri.equals("/clear")) return clear(); return new Response(Status.NOT_FOUND, MIME_PLAINTEXT, "Command not found"); } private Response send(Map<String, String> parms) { if (!running) return new Response(Status.BAD_REQUEST, MIME_PLAINTEXT, "The game is not started"); if (!parms.containsKey("number")) return new Response(Status.METHOD_NOT_ALLOWED, MIME_PLAINTEXT, "Please specify the number"); try { int number = Integer.parseInt(parms.get("number")); if (number <= 0) return new Response(Status.BAD_REQUEST, MIME_PLAINTEXT, "Number should be positive"); Boolean status = numbers.get(Integer.valueOf(number)); if (status == ONE) numbers.put(Integer.valueOf(number), MORE); else if (status == null) numbers.put(Integer.valueOf(number), ONE); return new Response(Status.OK, MIME_PLAINTEXT, "Success"); } catch (NumberFormatException e) { return new Response(Status.BAD_REQUEST, MIME_PLAINTEXT, "Number should be an integer"); } } private Response finish() { if (!running) return new Response(Status.METHOD_NOT_ALLOWED, MIME_PLAINTEXT, "The game is not running"); running = false; return new Response(Status.OK, MIME_PLAINTEXT, "The game has been finished :)"); } private Response winner() { if (running) return new Response(Status.METHOD_NOT_ALLOWED, MIME_PLAINTEXT, "The game is running yet"); int number =Integer.MAX_VALUE; for (Integer i : numbers.keySet()) if (i < number && numbers.get(i) == ONE) number = i; if (number == Integer.MAX_VALUE) return new Response(Status.OK, MIME_PLAINTEXT, "There is no winner."); return new Response(Status.OK, MIME_PLAINTEXT, "The winner number is: " + number); } private Response clear() { numbers.clear(); return new Response(Status.OK, MIME_PLAINTEXT, "A new game has been started :)"); } public static void main(String[] args) { OneNumberGame server = new OneNumberGame(); try { server.start(); } catch (IOException ioe) { System.err.println("Couldn't start server:\n" + ioe); System.exit(-1); } System.out.println("Server started, Hit Enter to stop.\n"); try { System.in.read(); } catch (Throwable ignored) { } server.stop(); System.out.println("Server stopped.\n"); } } |