From e03fc7a6464e113680b25d4b50add525b7f0fe66 Mon Sep 17 00:00:00 2001 From: AlexeyRogS Date: Sat, 29 Feb 2020 18:40:10 +0300 Subject: [PATCH] Lecture04 --- .../java/ru/atom/chat/client/ChatClient.java | 15 ++++++-- .../ru/atom/chat/server/ChatController.java | 36 +++++++++++++++++-- 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/lecture04/src/main/java/ru/atom/chat/client/ChatClient.java b/lecture04/src/main/java/ru/atom/chat/client/ChatClient.java index 18174df197..8270286096 100644 --- a/lecture04/src/main/java/ru/atom/chat/client/ChatClient.java +++ b/lecture04/src/main/java/ru/atom/chat/client/ChatClient.java @@ -40,11 +40,22 @@ public static Response viewChat() throws IOException { //POST host:port/chat/say?name=my_name //Body: "msg='my_message'" public static Response say(String name, String msg) throws IOException { - throw new UnsupportedOperationException(); + MediaType mediaType = MediaType.parse(msg); + Request request = new Request.Builder() + .post(RequestBody.create(mediaType, "")) + .url(PROTOCOL + HOST + PORT + "/chat/say?name=" + name) + .addHeader("host", HOST + PORT) + .build(); + return client.newCall(request).execute(); } //GET host:port/chat/online public static Response viewOnline() throws IOException { - throw new UnsupportedOperationException(); + Request request = new Request.Builder() + .get() + .url(PROTOCOL + HOST + PORT + "/chat/online") + .addHeader("host", HOST + PORT) + .build(); + return client.newCall(request).execute(); } } \ No newline at end of file diff --git a/lecture04/src/main/java/ru/atom/chat/server/ChatController.java b/lecture04/src/main/java/ru/atom/chat/server/ChatController.java index a8d8a0d721..3fecd39eec 100644 --- a/lecture04/src/main/java/ru/atom/chat/server/ChatController.java +++ b/lecture04/src/main/java/ru/atom/chat/server/ChatController.java @@ -59,16 +59,46 @@ public ResponseEntity online() { /** * curl -X POST -i localhost:8080/chat/logout -d "name=I_AM_STUPID" */ - //TODO + @RequestMapping( + path = "logout", + method = RequestMethod.POST, + consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) + @ResponseStatus(HttpStatus.OK) + public ResponseEntity logout(@RequestParam("name") String name) { + if (!usersOnline.containsKey(name)) { + return ResponseEntity.badRequest().body("There's not such user"); + } + usersOnline.remove(name); + messages.add("[" + name + "] logged out"); + return ResponseEntity.ok().build(); + } /** * curl -X POST -i localhost:8080/chat/say -d "name=I_AM_STUPID&msg=Hello everyone in this chat" */ - //TODO + @RequestMapping( + path = "say", + method = RequestMethod.POST, + consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) + @ResponseStatus(HttpStatus.OK) + public ResponseEntity say(@RequestParam("name") String name, @RequestParam("msg") String message) { + if (!usersOnline.containsKey(name)) { + return ResponseEntity.badRequest().body("There's no such user"); + } + messages.add("[" + name + "]: " + message); + return ResponseEntity.ok().build(); + } /** * curl -i localhost:8080/chat/chat */ - //TODO + @RequestMapping( + path = "chat", + method = RequestMethod.GET, + produces = MediaType.TEXT_PLAIN_VALUE) + public ResponseEntity chat() { + String responseBody = String.join("\n", messages.stream().sorted().collect(Collectors.toList())); + return ResponseEntity.ok(responseBody); + } }