Advertisement
Guest User

Updates

a guest
Apr 26th, 2016
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.19 KB | None | 0 0
  1. WebserverVerticle.java
  2.  
  3. package xi.com.webapps.vertx.chat.prototype;
  4.  
  5. import java.util.HashMap;
  6. import java.util.Map;
  7. import java.util.concurrent.CopyOnWriteArrayList;
  8.  
  9. import static java.util.Arrays.asList;
  10.  
  11. import org.vertx.java.core.Handler;
  12. import org.vertx.java.core.eventbus.impl.JsonObjectMessage;
  13. import org.vertx.java.core.json.JsonObject;
  14. import org.vertx.java.platform.Verticle;
  15. import java.io.*;
  16.  
  17. /**
  18. * @author Group Xi
  19. * @description Prototype chat server for the vertx chat application
  20. * @version 1.0.0
  21. * @date 04/02/2016
  22. */
  23. public class WebserverVerticle extends Verticle { // verticle = an Actor like class that communicates with other verticles over the event bus
  24.  
  25. private final CopyOnWriteArrayList<JsonObject> messages = new CopyOnWriteArrayList<>(); // messages stored as JSON objects
  26.  
  27. @Override
  28.  
  29. // What to do when the server has been started
  30. public void start() {
  31. Map<String, Object> serverConfig = new HashMap<>(); // store server configurations in a HashMap of type <String, Object>
  32. serverConfig.put("web_root", "M:\\MavenApps\\vertx-chat-prototype-master\\src\\main\\webapp"); // Store the root of the web pages in the server configuration
  33. serverConfig.put("port", 8080); // Store the port in the server configuration
  34. serverConfig.put("bridge", true); // Enables bridging, stores in the server configuration
  35. serverConfig.put("inbound_permitted", asList(new HashMap<String, Object>())); // accept only inbound messages of a certain type
  36. serverConfig.put("outbound_permitted", asList(new HashMap<String, Object>())); // accept only outbound messages of a certain type
  37. HashMap<String, Object> sjsConfig = new HashMap<>();
  38. sjsConfig.put("prefix", "/chat");
  39. serverConfig.put("sjs_config", sjsConfig);
  40.  
  41. // A container is a verticle's view of the container that it's running in
  42. container.deployModule("io.vertx~mod-web-server~2.0.0-final", new JsonObject(serverConfig)); // deploy
  43.  
  44. // Event handler to determine what action to take when a user sends a message
  45. vertx.eventBus().registerHandler("messages/post", new Handler<JsonObjectMessage>() { // takes in a JSON object message from the event bus
  46. @Override
  47. public void handle(JsonObjectMessage message) {
  48. if (message.body().getValue("text") != "") {
  49. container.logger().info("messages/post: " + message.body()); // logs the message in the logger
  50. messages.add(message.body()); // adds the message to the list of messages
  51. vertx.eventBus().publish("messages/posted", message.body()); // publishes the message to all users on the event bus
  52. }
  53. }
  54. });
  55.  
  56. // Event handler to determine what action to take when a new user register
  57. vertx.eventBus().registerHandler("users/register", new Handler<JsonObjectMessage>() {
  58. @Override
  59. public void handle(JsonObjectMessage message) {
  60. try {
  61. if (registerUser(message) && message.body().getValue("userName") != "") {
  62. container.logger().info("users/register: "
  63. + message.body());
  64. message.reply(new JsonObject().putNumber("status", 200));
  65. } else {
  66. container.logger().info("ADDING USER FAILED");
  67. message.reply(new JsonObject().putNumber("status", 120));
  68. }
  69. } catch (Exception e) {
  70. container.logger().info(e.toString());
  71. }
  72. }
  73. });
  74.  
  75. // Event handler to determine what action to take when a new user signs in
  76. vertx.eventBus().registerHandler("users/signIn", new Handler<JsonObjectMessage>() { // takes in a JSON object message from the event bus
  77. @Override
  78. public void handle(JsonObjectMessage message) {
  79. if (message.body().getValue("userName") != "" && checkBan(message.body().getValue("userName").toString())) {
  80. container.logger().info("users/signIn: "
  81. + message.body()); // logs the sign in in the logger
  82.  
  83. message.reply(new JsonObject().putNumber("status", 200));
  84. // replies to the user to verify the sign in
  85. vertx.eventBus().publish("users/signedIn",
  86. message.body()); // publishes the signin to all users on the event bus
  87. }
  88.  
  89. }
  90. });
  91.  
  92. vertx.eventBus().registerHandler("commands/perform", new Handler<JsonObjectMessage>() {
  93. @Override
  94. public void handle(JsonObjectMessage message) {
  95. try {
  96. container.logger().info("commands/perform: " + message.body());
  97. container.logger().info("arg1: " + message.body().getValue("arg1").toString());
  98. handleCommand(message.body().getValue("command").toString(), message.body().getValue("arg1").toString());
  99. } catch (NullPointerException e) {
  100. container.logger().info("commands/perform: " + message.body());
  101. handleCommand(message.body().getValue("command").toString(), " ");
  102. }
  103.  
  104. }
  105. });
  106.  
  107. container.logger().info("Chat server started!"); // console out that the verticle has started
  108. }
  109.  
  110. public void handleCommand(String command, String arg1) {
  111. if (command.equals(".help")) {
  112. JsonObject helpMessage = new JsonObject("{\"userName\":\"Server\",\"text\":\"You asked for help\"}");
  113. container.logger().info("Here is your help!");
  114. vertx.eventBus().publish("messages/posted", helpMessage);
  115. }
  116. else if (command.equals(".ban")){
  117. banUser(arg1);
  118. container.logger().info("User : "+arg1+" is banned!");
  119. }
  120. else if (command.equals(".unban")){
  121. unbanUser(arg1);
  122. container.logger().info("User : "+arg1+" is banned!");
  123. }
  124. }
  125.  
  126. public boolean registerUser(JsonObjectMessage message) throws IOException {
  127. try {
  128. DatabaseManager mngr = new DatabaseManager();
  129. if (mngr.registerUser((String) message.body().getValue("userName"), (String) message.body().getValue("email"), (String) message.body().getValue("password"))) {
  130. return true;
  131. } else {
  132. return false;
  133. }
  134. } catch (Exception e) {
  135. }
  136. return false;
  137. }
  138.  
  139. public void banUser(String username){
  140. try {
  141. DatabaseManager mngr = new DatabaseManager();
  142. mngr.bannedUser(username,true);
  143. }
  144. catch (Exception e) {
  145. }
  146. }
  147. public void unbanUser(String username){
  148. try {
  149. DatabaseManager mngr = new DatabaseManager();
  150. mngr.bannedUser(username,false);
  151. }
  152. catch (Exception e) {
  153. }
  154. }
  155.  
  156. public boolean checkBan(String username) {
  157. try {
  158. DatabaseManager mngr = new DatabaseManager();
  159. if (mngr.checkUserBan(username)){
  160. return true;
  161. }
  162. else {
  163. return false;
  164. }
  165. }
  166. catch (Exception e) {
  167.  
  168. }
  169. return true;
  170. }
  171. }
  172. ________________________________________________________________________________
  173. vertxhandler.js
  174.  
  175. window.onload = function () {
  176. var eventBus = new vertx.EventBus("http://localhost:8080/chat");
  177. var loginUserName = document.querySelector("input[name=loginUserName]");
  178. var loginPassword = document.querySelector("input[name=loginPassword]");
  179. var registerUserName = document.querySelector("input[name=registerUserName]");
  180. var registerEmail = document.querySelector("input[name=registerEmail]");
  181. var registerPassword = encryptPassword(document.querySelector("input[name=registerPassword]"));
  182. var loginContainer = document.getElementById("section-1");
  183. var registerContainer = document.getElementById("section-2");
  184. var chatContainer = document.getElementById("section-3");
  185. var messageInput = document.getElementById("msg");
  186.  
  187. var userListContainer = document.getElementById("usersOnlineContainer");
  188.  
  189.  
  190. eventBus.onopen = function () {
  191. eventBus.registerHandler("users/signedIn", function (message) {
  192. userListContainer.innerHTML += message.userName + " signed in<br/>";
  193. });
  194.  
  195. document.getElementById("signIn").addEventListener("click", function (event) {
  196. eventBus.send("users/signIn", {
  197. userName: loginUserName.value,
  198. password: loginPassword.value
  199. }, function (reply) {
  200. if (reply.status === 200) {
  201. loginUserName.disabled = true;
  202. loginPassword.disabled = true;
  203. event.target.disabled = true;
  204. chatContainer.classList.remove("hidden");
  205. var successtext = document.getElementById("successText");
  206. successtext.classList.remove("hidden");
  207.  
  208.  
  209. document.getElementById("send-addon").addEventListener("click", function () {
  210. var text = messageInput.value;
  211.  
  212. if (text.substring(0, 1) === ".") {
  213. var args = text.split(' ');
  214. eventBus.send("commands/perform", {
  215. userName: loginUserName.value,
  216. command: args[0],
  217. arg1: args[1]
  218. });
  219. } else {
  220. eventBus.send("messages/post", {
  221. userName: loginUserName.value,
  222. text: text
  223. });
  224. }
  225. messageInput.value = "";
  226. }, false);
  227.  
  228. eventBus.registerHandler("messages/posted", function (message) {
  229. var table = document.getElementById("chatHistoryTable");
  230.  
  231. var d = new Date(),
  232. h = (d.getHours() < 10 ? '0' : '') + d.getHours(),
  233. m = (d.getMinutes() < 10 ? '0' : '') + d.getMinutes();
  234.  
  235. var tr = document.createElement("tr");
  236. var td = document.createElement("td");
  237. var td2 = document.createElement("td");
  238. var txt = document.createTextNode(h + ':' + m);
  239. var txt2 = document.createTextNode(message.userName + ": " + message.text);
  240.  
  241. td.appendChild(txt);
  242. td.className = "col-md-3 col-sm-3 col-xs-4";
  243. td2.appendChild(txt2);
  244. td2.className = "col-md-9 col-sm-9 col-xs-8";
  245. tr.appendChild(td);
  246. tr.appendChild(td2);
  247. table.appendChild(tr);
  248. });
  249.  
  250. }
  251. });
  252. });
  253.  
  254.  
  255. document.getElementById("send-register").addEventListener("click", function (event) {
  256. eventBus.send("users/register", {
  257. userName: registerUserName.value,
  258. email: registerEmail.value,
  259. password: registerPassword.value
  260. }, function (reply) {
  261. if (reply.status === 200) {
  262.  
  263. } else if (reply.status === 120) {
  264.  
  265. }
  266. }, false);
  267.  
  268. });
  269. };
  270.  
  271. };
  272. _______________________________________________________________________________________
  273. index.html
  274. <!DOCTYPE html>
  275. <html lang="en">
  276. <head>
  277. <meta charset="UTF-8" />
  278. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  279. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  280. <title>Vert.X</title>
  281. <link rel="stylesheet" type="text/css" href="css/bootstrap.css" />
  282. <link rel="stylesheet" type="text/css" href="css/style.css" />
  283. <link rel="stylesheet" type="text/css" href="css/component.css" />
  284.  
  285. <!--[if IE]>
  286. <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
  287. <![endif]-->
  288. </head>
  289. <body>
  290. <div class="container">
  291. <header class="clearfix">
  292.  
  293. <a href="" class="navbar-brand"><img alt="Brand" width="162" src="img/logo-sm.png"></a>
  294.  
  295. </header>
  296. <div id="tabs" class="tabs">
  297. <nav>
  298. <ul>
  299. <li><a href="#section-1" class="login"><span>Login</span></a></li>
  300. <li><a id="register-btn" href="#section-2" class="Register"><span>Register</span></a></li>
  301. <li><a href="#section-3" class="Chat"><span>Chat</span></a></li>
  302.  
  303. </ul>
  304. </nav>
  305.  
  306. <div class="content">
  307. <section id="section-1">
  308.  
  309. <div class="mediabox">
  310. <h4>Login</h4>
  311. <input class="form-control" type="text" name="loginUserName" placeholder="User Name">
  312. <input class="form-control" type="password" name="loginPassword" placeholder="Password">
  313. <input class="btn" type="button" id="signIn" value="Submit">
  314. <p id="successText" class="hidden" style="color:green;font-size:14px;content-align:center;">Login Successful!</p>
  315. <p><a href="#section-2" id="register-link" role="tab" data-toggle="tab" style=" color: #782b90;"> Click here to register!</a></p>
  316. <div class="power">
  317. <span>Powered by Vert.x</span><img width="162" src="img/logo-sm.png ">
  318. </div>
  319. </div>
  320.  
  321. </section>
  322. <section id="section-2">
  323. <div class="mediabox">
  324. <h4>Register</h4>
  325. <form class="form">
  326. <input class="form-control" type="text" name="registerUserName" placeholder="User Name">
  327. <input class="form-control" type="text" name="registerEmail" placeholder="Email">
  328.  
  329. <input class="form-control" type="password" name="registerPassword" placeholder="Password">
  330. <input class="form-control" type="password" placeholder="Confirm Password">
  331.  
  332. <input class="btn" type="button" id="send-register" value="Submit">
  333. </form>
  334. <div class="power">
  335. <span>Powered by Vert.x</span><img width="162" src="img/logo-sm.png ">
  336. </div>
  337. </div>
  338.  
  339. </section>
  340. <section id="section-3" class="hidden" style="padding-left:0em;">
  341. <div class="chatbox" style=" ">
  342. <div class="container-fluid">
  343. <div class="row">
  344. <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;">
  345. Online users<br/>
  346. </div>
  347. <div class="col-md-10 col-xs-8 col-sm-10" style="padding-left:0em;">
  348.  
  349. <div class="container-fluid">
  350. <div class="row">
  351. <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; ">
  352. <table class="table table-bordered" id="chatHistoryTable"></table>
  353. </div>
  354. </div>
  355. </div>
  356. <div class="container-fluid">
  357. <div class="row">
  358. <div class="col-md-12">
  359. <form class="form" style="margin-bottom:20px;">
  360. <div class="input-group">
  361. <input type="text" id="msg" class="form-control input-lg" aria-describedby="send-addon" required autofocus>
  362. <span style="color:#fff;background-color: #782b90; border-color: #782b90;" class="btn input-group-addon input-lg" id="send-addon">Send</span>
  363. </div>
  364. </form>
  365.  
  366. </div>
  367. </div>
  368. </div>
  369. </div>
  370.  
  371. <div class="chatpower" id="poweredBy1">
  372. <span>Powered by Vert.x</span><img width="162" src="img/logo-sm.png ">
  373. </div>
  374. </div>
  375.  
  376. </div>
  377.  
  378.  
  379.  
  380.  
  381. </div>
  382.  
  383. </section>
  384.  
  385.  
  386. </div><!-- /content -->
  387. </div><!-- /tabs -->
  388.  
  389. </div>
  390. <script src="js/vertx.js"></script>
  391.  
  392. <script>
  393. new CBPFWTabs(document.getElementById('tabs'));
  394. </script>
  395. <script src="js/jquery-1.10.2.js"></script>
  396. <script src="js/bootstrap.min.js"></script>
  397. <script src="http://cdn.sockjs.org/sockjs-0.3.4.min.js"></script>
  398. <script src="vertxbus.min.js"></script>
  399. <script src="vertxhandler.js"></script>
  400. <script src="compare.js"></script>
  401. </body>
  402. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement