Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- WebserverVerticle.java
- import java.util.HashMap;
- import java.util.Map;
- import java.util.concurrent.CopyOnWriteArrayList;
- import static java.util.Arrays.asList;
- import org.vertx.java.core.Handler;
- import org.vertx.java.core.eventbus.impl.JsonObjectMessage;
- import org.vertx.java.core.json.JsonObject;
- import org.vertx.java.platform.Verticle;
- public class WebserverVerticle extends Verticle { // verticle = an Actor like class that communicates with other verticles over the event bus
- private final CopyOnWriteArrayList<JsonObject> messages = new CopyOnWriteArrayList<>(); // messages stored as JSON objects
- @Override
- // What to do when the server has been started
- public void start(){
- Map<String, Object> serverConfig = new HashMap<>(); // store server configurations in a HashMap of type <String, Object>
- serverConfig.put("web_root", "C:\\Users\\theve\\OneDrive\\Documents\\NetBeansProjects\\vertx-chat-prototype-master\\src\\main\\webapp"); // Store the root of the web pages in the server configuration
- serverConfig.put("port", 8080); // Store the port in the server configuration
- serverConfig.put("bridge", true); // Enables bridging, stores in the server configuration
- serverConfig.put("inbound_permitted", asList(new HashMap<String, Object>())); // accept only inbound messages of a certain type
- serverConfig.put("outbound_permitted", asList(new HashMap<String, Object>())); // accept only outbound messages of a certain type
- HashMap<String, Object> sjsConfig = new HashMap<>();
- sjsConfig.put("prefix", "/chat");
- serverConfig.put("sjs_config", sjsConfig);
- // A container is a verticle's view of the container that it's running in
- container.deployModule("io.vertx~mod-web-server~2.0.0-final", new JsonObject(serverConfig)); // deploy
- // Event handler to determine what action to take when a user sends a message
- vertx.eventBus().registerHandler("messages/post", new Handler<JsonObjectMessage>() { // takes in a JSON object message from the event bus
- @Override
- public void handle(JsonObjectMessage message) {
- if (message.body().getValue("text")!=""){
- container.logger().info("messages/post: " + message.body()); // logs the message in the logger
- messages.add(message.body()); // adds the message to the list of messages
- vertx.eventBus().publish("messages/posted", message.body()); // publishes the message to all users on the event bus
- }
- }});
- // Event handler to determine what action to take when a new user signs in
- vertx.eventBus().registerHandler("users/signIn", new Handler<JsonObjectMessage>() { // takes in a JSON object message from the event bus
- @Override
- public void handle(JsonObjectMessage message) {
- if (message.body().getValue("userName")!=""){
- container.logger().info("users/signIn: " + message.body()); // logs the sign in in the logger
- message.reply(new JsonObject().putNumber("status", 200)); // replies to the user to verify the sign in
- vertx.eventBus().publish("users/signedIn", message.body()); // publishes the signin to all users on the event bus
- }
- }
- });
- vertx.eventBus().registerHandler("commands/perform", new Handler<JsonObjectMessage>(){
- @Override
- public void handle(JsonObjectMessage message){
- container.logger().info("commands/perform: " + message.body());
- handleCommand(message.body().getValue("command").toString(),message.body().getValue("arg1").toString());
- }
- });
- container.logger().info("Chat server started!"); // console out that the verticle has started
- }
- //broken atm
- public void handleCommand(String command, String arg1){
- if(command == "help"){
- JsonObject helpMessage = new JsonObject();
- //helpMessage.put("userName":"Server");
- //helpMessage.put("message":"You asked for help");
- vertx.eventBus().publish("messages/posted", helpMessage);
- }
- }
- }
- vertxhandler.js
- window.onload = function () {
- var eventBus = new vertx.EventBus("http://localhost:8080/chat");
- var userName = document.querySelector("input[name=userName]");
- var password = document.querySelector("input[name=password]");
- var userListContainer = document.getElementById("userListContainer");
- var chatContainer = document.getElementById("chatContainer");
- var chatHistory = document.getElementById("chatHistory");
- var newChat = document.getElementById("newChat");
- var signInContainer = document.getElementById("signInContainer");
- eventBus.onopen = function () {
- eventBus.registerHandler("users/signedIn", function (message) {
- userListContainer.innerHTML += message.userName + " signed in<br/>";
- });
- document.getElementById("signIn").addEventListener("click", function (event) {
- eventBus.send("users/signIn", {
- userName: userName.value, password: password.value
- }, function (reply) {
- if (reply.status === 200) {
- userName.disabled = true;
- event.target.disabled = true;
- chatContainer.classList.remove("hidden");
- signInContainer.classList.add("hidden");
- document.getElementById("sendChat").addEventListener("click", function () {
- var text = newChat.value;
- if (text.substring(0, 1) === ".") {
- var args = text.split(' ');
- eventBus.send("commands/perform", {
- userName: userName.value,
- command: args[0],
- arg1: args[1]
- });
- }
- eventBus.send("messages/post", {
- userName: userName.value,
- text: text
- });
- newChat.value = "";
- }, false);
- eventBus.registerHandler("messages/posted", function (message) {
- chatHistory.innerHTML += message.userName + ": " + message.text + "<br/>";
- });
- }
- });
- }, false);
- };
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement