Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- WebserverVerticle.java
- package xi.com.webapps.vertx.chat.prototype;
- 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;
- import java.io.*;
- /**
- * @author Group Xi
- * @description Prototype chat server for the vertx chat application
- * @version 1.0.0
- * @date 04/02/2016
- */
- 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", "M:\\MavenApps\\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 register
- vertx.eventBus().registerHandler("users/register", new Handler<JsonObjectMessage>() {
- @Override
- public void handle(JsonObjectMessage message) {
- try {
- if (registerUser(message) && message.body().getValue("userName") != "") {
- container.logger().info("users/register: "
- + message.body());
- message.reply(new JsonObject().putNumber("status", 200));
- } else {
- container.logger().info("ADDING USER FAILED");
- message.reply(new JsonObject().putNumber("status", 120));
- }
- } catch (Exception e) {
- container.logger().info(e.toString());
- }
- }
- });
- // 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") != "" && checkBan(message.body().getValue("userName").toString())) {
- 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) {
- try {
- container.logger().info("commands/perform: " + message.body());
- container.logger().info("arg1: " + message.body().getValue("arg1").toString());
- handleCommand(message.body().getValue("command").toString(), message.body().getValue("arg1").toString());
- } catch (NullPointerException e) {
- container.logger().info("commands/perform: " + message.body());
- handleCommand(message.body().getValue("command").toString(), " ");
- }
- }
- });
- container.logger().info("Chat server started!"); // console out that the verticle has started
- }
- public void handleCommand(String command, String arg1) {
- if (command.equals(".help")) {
- JsonObject helpMessage = new JsonObject("{\"userName\":\"Server\",\"text\":\"You asked for help\"}");
- container.logger().info("Here is your help!");
- vertx.eventBus().publish("messages/posted", helpMessage);
- }
- else if (command.equals(".ban")){
- banUser(arg1);
- container.logger().info("User : "+arg1+" is banned!");
- }
- else if (command.equals(".unban")){
- unbanUser(arg1);
- container.logger().info("User : "+arg1+" is banned!");
- }
- }
- public boolean registerUser(JsonObjectMessage message) throws IOException {
- try {
- DatabaseManager mngr = new DatabaseManager();
- if (mngr.registerUser((String) message.body().getValue("userName"), (String) message.body().getValue("email"), (String) message.body().getValue("password"))) {
- return true;
- } else {
- return false;
- }
- } catch (Exception e) {
- }
- return false;
- }
- public void banUser(String username){
- try {
- DatabaseManager mngr = new DatabaseManager();
- mngr.bannedUser(username,true);
- }
- catch (Exception e) {
- }
- }
- public void unbanUser(String username){
- try {
- DatabaseManager mngr = new DatabaseManager();
- mngr.bannedUser(username,false);
- }
- catch (Exception e) {
- }
- }
- public boolean checkBan(String username) {
- try {
- DatabaseManager mngr = new DatabaseManager();
- if (mngr.checkUserBan(username)){
- return true;
- }
- else {
- return false;
- }
- }
- catch (Exception e) {
- }
- return true;
- }
- }
- ________________________________________________________________________________
- vertxhandler.js
- window.onload = function () {
- var eventBus = new vertx.EventBus("http://localhost:8080/chat");
- var loginUserName = document.querySelector("input[name=loginUserName]");
- var loginPassword = document.querySelector("input[name=loginPassword]");
- var registerUserName = document.querySelector("input[name=registerUserName]");
- var registerEmail = document.querySelector("input[name=registerEmail]");
- var registerPassword = encryptPassword(document.querySelector("input[name=registerPassword]"));
- var loginContainer = document.getElementById("section-1");
- var registerContainer = document.getElementById("section-2");
- var chatContainer = document.getElementById("section-3");
- var messageInput = document.getElementById("msg");
- var userListContainer = document.getElementById("usersOnlineContainer");
- 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: loginUserName.value,
- password: loginPassword.value
- }, function (reply) {
- if (reply.status === 200) {
- loginUserName.disabled = true;
- loginPassword.disabled = true;
- event.target.disabled = true;
- chatContainer.classList.remove("hidden");
- var successtext = document.getElementById("successText");
- successtext.classList.remove("hidden");
- document.getElementById("send-addon").addEventListener("click", function () {
- var text = messageInput.value;
- if (text.substring(0, 1) === ".") {
- var args = text.split(' ');
- eventBus.send("commands/perform", {
- userName: loginUserName.value,
- command: args[0],
- arg1: args[1]
- });
- } else {
- eventBus.send("messages/post", {
- userName: loginUserName.value,
- text: text
- });
- }
- messageInput.value = "";
- }, false);
- eventBus.registerHandler("messages/posted", function (message) {
- var table = document.getElementById("chatHistoryTable");
- var d = new Date(),
- h = (d.getHours() < 10 ? '0' : '') + d.getHours(),
- m = (d.getMinutes() < 10 ? '0' : '') + d.getMinutes();
- var tr = document.createElement("tr");
- var td = document.createElement("td");
- var td2 = document.createElement("td");
- var txt = document.createTextNode(h + ':' + m);
- var txt2 = document.createTextNode(message.userName + ": " + message.text);
- td.appendChild(txt);
- td.className = "col-md-3 col-sm-3 col-xs-4";
- td2.appendChild(txt2);
- td2.className = "col-md-9 col-sm-9 col-xs-8";
- tr.appendChild(td);
- tr.appendChild(td2);
- table.appendChild(tr);
- });
- }
- });
- });
- document.getElementById("send-register").addEventListener("click", function (event) {
- eventBus.send("users/register", {
- userName: registerUserName.value,
- email: registerEmail.value,
- password: registerPassword.value
- }, function (reply) {
- if (reply.status === 200) {
- } else if (reply.status === 120) {
- }
- }, false);
- });
- };
- };
- _______________________________________________________________________________________
- index.html
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8" />
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Vert.X</title>
- <link rel="stylesheet" type="text/css" href="css/bootstrap.css" />
- <link rel="stylesheet" type="text/css" href="css/style.css" />
- <link rel="stylesheet" type="text/css" href="css/component.css" />
- <!--[if IE]>
- <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
- </head>
- <body>
- <div class="container">
- <header class="clearfix">
- <a href="" class="navbar-brand"><img alt="Brand" width="162" src="img/logo-sm.png"></a>
- </header>
- <div id="tabs" class="tabs">
- <nav>
- <ul>
- <li><a href="#section-1" class="login"><span>Login</span></a></li>
- <li><a id="register-btn" href="#section-2" class="Register"><span>Register</span></a></li>
- <li><a href="#section-3" class="Chat"><span>Chat</span></a></li>
- </ul>
- </nav>
- <div class="content">
- <section id="section-1">
- <div class="mediabox">
- <h4>Login</h4>
- <input class="form-control" type="text" name="loginUserName" placeholder="User Name">
- <input class="form-control" type="password" name="loginPassword" placeholder="Password">
- <input class="btn" type="button" id="signIn" value="Submit">
- <p id="successText" class="hidden" style="color:green;font-size:14px;content-align:center;">Login Successful!</p>
- <p><a href="#section-2" id="register-link" role="tab" data-toggle="tab" style=" color: #782b90;"> Click here to register!</a></p>
- <div class="power">
- <span>Powered by Vert.x</span><img width="162" src="img/logo-sm.png ">
- </div>
- </div>
- </section>
- <section id="section-2">
- <div class="mediabox">
- <h4>Register</h4>
- <form class="form">
- <input class="form-control" type="text" name="registerUserName" placeholder="User Name">
- <input class="form-control" type="text" name="registerEmail" placeholder="Email">
- <input class="form-control" type="password" name="registerPassword" placeholder="Password">
- <input class="form-control" type="password" placeholder="Confirm Password">
- <input class="btn" type="button" id="send-register" value="Submit">
- </form>
- <div class="power">
- <span>Powered by Vert.x</span><img width="162" src="img/logo-sm.png ">
- </div>
- </div>
- </section>
- <section id="section-3" class="hidden" style="padding-left:0em;">
- <div class="chatbox" style=" ">
- <div class="container-fluid">
- <div class="row">
- <div class="col-md-2 col-xs-4 col-sm-2" id="usersOnlineContainer" style="border-right:1px solid #782b90; height:550px; padding-left:0px; padding-right:0px;overflow:auto;">
- Online users<br/>
- </div>
- <div class="col-md-10 col-xs-8 col-sm-10" style="padding-left:0em;">
- <div class="container-fluid">
- <div class="row">
- <div class="col-md-12 col-sm-12 col-xs-12" style="margin-left:8px; margin-top:10px; padding-left:0px; padding-right:0px;overflow:scroll;display:block;height:550px;width:855px; ">
- <table class="table table-bordered" id="chatHistoryTable"></table>
- </div>
- </div>
- </div>
- <div class="container-fluid">
- <div class="row">
- <div class="col-md-12">
- <form class="form" style="margin-bottom:20px;">
- <div class="input-group">
- <input type="text" id="msg" class="form-control input-lg" aria-describedby="send-addon" required autofocus>
- <span style="color:#fff;background-color: #782b90; border-color: #782b90;" class="btn input-group-addon input-lg" id="send-addon">Send</span>
- </div>
- </form>
- </div>
- </div>
- </div>
- </div>
- <div class="chatpower" id="poweredBy1">
- <span>Powered by Vert.x</span><img width="162" src="img/logo-sm.png ">
- </div>
- </div>
- </div>
- </div>
- </section>
- </div><!-- /content -->
- </div><!-- /tabs -->
- </div>
- <script src="js/vertx.js"></script>
- <script>
- new CBPFWTabs(document.getElementById('tabs'));
- </script>
- <script src="js/jquery-1.10.2.js"></script>
- <script src="js/bootstrap.min.js"></script>
- <script src="http://cdn.sockjs.org/sockjs-0.3.4.min.js"></script>
- <script src="vertxbus.min.js"></script>
- <script src="vertxhandler.js"></script>
- <script src="compare.js"></script>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement