diff --git a/client/src/app/main/fav.message.directive.js b/client/src/app/main/fav.message.directive.js index abe67cf..a91401f 100644 --- a/client/src/app/main/fav.message.directive.js +++ b/client/src/app/main/fav.message.directive.js @@ -36,12 +36,14 @@ class FavController { $scope.message.fav = !$scope.message.fav; if($scope.message.fav == true){ $scope.message.fav_count += 1; + $scope.$parent.main.postFav($scope.message); }else{ $scope.message.fav_count -= 1; + $scope.$parent.main.postRmFav($scope.message); } $scope.$parent.$apply(); $log.info("fav clicked"); - $scope.$parent.main.postFav($scope.message); + } } } \ No newline at end of file diff --git a/client/src/app/main/main.controller.js b/client/src/app/main/main.controller.js index 9f64064..c3c5c2f 100644 --- a/client/src/app/main/main.controller.js +++ b/client/src/app/main/main.controller.js @@ -21,5 +21,9 @@ export class MainController { postFav(message){ this.robochat.postFav(message); } + + postRmFav(message){ + this.robochat.postRmFav(message); + } } diff --git a/client/src/app/main/main.jade b/client/src/app/main/main.jade index d31bf6c..63f1fac 100644 --- a/client/src/app/main/main.jade +++ b/client/src/app/main/main.jade @@ -23,7 +23,7 @@ div header span.member(data-ng-bind="message.member") span.timestamp(data-ng-bind="message.ts | date:'HH:mm:ss'") - div(fav-message='0') test + div(fav-message) div(data-ng-bind="message.text") footer footer diff --git a/client/src/app/main/robochat.service.js b/client/src/app/main/robochat.service.js index a5b67f1..8877ac6 100644 --- a/client/src/app/main/robochat.service.js +++ b/client/src/app/main/robochat.service.js @@ -68,9 +68,13 @@ export class RoboChat { } postFav(message){ message.type = "fav"; - //message.fav = false; + //this.ws.send(JSON.stringify({ text: message.text, fav_count: message.fav_count, member: message.member })); this.ws.send(JSON.stringify(message)); } - + postRmFav(message){ + message.type = "del_fav"; + //this.ws.send(JSON.stringify({ text: message.text, fav_count: message.fav_count, member: message.member })); + this.ws.send(JSON.stringify(message)); + } } diff --git a/server/src/main/java/com/woorea/robochat/RoboChat.java b/server/src/main/java/com/woorea/robochat/RoboChat.java index b7d704e..36f6f13 100644 --- a/server/src/main/java/com/woorea/robochat/RoboChat.java +++ b/server/src/main/java/com/woorea/robochat/RoboChat.java @@ -1,15 +1,13 @@ package com.woorea.robochat; +import com.woorea.robochat.model.Message; import io.vertx.core.Vertx; import io.vertx.core.http.HttpServer; import io.vertx.core.http.ServerWebSocket; import io.vertx.core.json.JsonObject; import io.vertx.ext.web.Router; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -38,6 +36,7 @@ public static void main( String[] args ) { HttpServer server = vertx.createHttpServer(); Router router = Router.router(vertx); + final ArrayList messages = new ArrayList<>(); //onopen router.route("/realtime").handler(routingContext -> { @@ -64,6 +63,8 @@ public static void main( String[] args ) { input.put("text", "name changed!"); } + final Message msg = new Message(input); + messages.add(msg); sockets.forEach(socket -> { vertx.eventBus().send(socket, input.toString()); @@ -72,10 +73,30 @@ public static void main( String[] args ) { break; case "fav": - sockets.forEach(socket -> { - vertx.eventBus().send(socket, input.toString()); - }); + Message msgCache = getMessageCache(messages,input.getString("text")); + if(msgCache != null){ + String member = members.get(ws.textHandlerID()); + if( msgCache.addFav(member)){ + + sockets.forEach(socket -> { + vertx.eventBus().send(socket, msgCache.toFavString()); + }); + + } + } + break; + case "del_fav": + + Message msgDelCache = getMessageCache(messages,input.getString("text")); + if(msgDelCache != null) { + String member = members.get(ws.textHandlerID()); + if (msgDelCache.deleteFav(member)) { + sockets.forEach(socket -> { + vertx.eventBus().send(socket, msgDelCache.toFavString()); + }); + } + } break; default: ws.writeFinalTextFrame(DEFAULT_MESSAGE); @@ -99,5 +120,11 @@ public static void main( String[] args ) { server.requestHandler(router::accept).listen(8080); } + public static Message getMessageCache(final List messages, final String text){ + for(Message message : messages){ + if(message.getMessage().equals(text)) return message; + } + return null; + } } diff --git a/server/src/main/java/com/woorea/robochat/model/Message.java b/server/src/main/java/com/woorea/robochat/model/Message.java new file mode 100644 index 0000000..07d5d69 --- /dev/null +++ b/server/src/main/java/com/woorea/robochat/model/Message.java @@ -0,0 +1,93 @@ +package com.woorea.robochat.model; + +import com.fasterxml.jackson.databind.util.JSONPObject; +import io.vertx.core.json.JsonObject; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by lempere on 11/4/2015. + */ +public class Message { + + public String message; + public int fav_count; + public String creator; + public List users; + public long time; + + public Message(String message) { + this.message = message; + fav_count = 0; + users = new ArrayList<>(); + } + + public Message(JsonObject input) { + this.message = input.getString("text"); + this.creator = input.getString("member"); + fav_count = 0; + time = input.getLong("ts"); + users = new ArrayList<>(); + } + + public boolean addFav(final String user_ask){ + for(String user : users ){ + if( user.equals(user_ask) ){ + return false; + } + } + users.add(user_ask); + fav_count++; + return true; + } + public boolean deleteFav(final String user_ask){ + for(String user : users ){ + if( user.equals(user_ask) ){ + users.remove(user); + fav_count--; + if(fav_count<0) fav_count=0; + return true; + } + } + return false; + + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public int getFav_count() { + return fav_count; + } + + public void setFav_count(int fav_count) { + this.fav_count = fav_count; + } + + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public long getTime() { + return time; + } + + public void setTime(long time) { + this.time = time; + } + + public String toFavString() { + return "{\"text\":\""+getMessage()+"\",\"type\":\"fav\",\"fav_count\":"+getFav_count()+ + " ,\"member\":\""+getCreator()+"\",\"ts\":"+getTime()+"}"; + } +}