Sending messages works! Kind of...

I give up on the database.
I'm switching to JSON.
This commit is contained in:
Norbi Peti 2016-07-29 11:56:03 +02:00
parent eb8eaa3834
commit 095269a585
8 changed files with 163 additions and 127 deletions

View file

@ -1,86 +1,86 @@
<!DOCTYPE html> <!DOCTYPE html>
<head> <head>
<title>ChatServer</title> <title>ChatServer</title>
<script src="js/jquery-3.1.0.js"></script> <script src="js/jquery-3.1.0.js"></script>
<script src="js/utils.js"></script> <script src="js/utils.js"></script>
<script src="js/message.js"></script> <script src="js/message.js"></script>
<script src="js/login.js"></script> <script src="js/login.js"></script>
<script src="js/register.js"></script> <script src="js/register.js"></script>
<link rel="stylesheet" href="css/style.css"/> <link rel="stylesheet" href="css/style.css"/>
</head> </head>
<body> <body>
<div id="errormsg"> <div id="errormsg">
</div> </div>
<div id="sidebar"> <div id="sidebar">
<div id="userbox"> <div id="userbox">
Logged in as Logged in as
<username/> <username/>
</div> </div>
</div> </div>
<div id="loginregisterbox"> <div id="loginregisterbox">
<div id="loginbox"> <div id="loginbox">
<h2>Login</h2> <h2>Login</h2>
<form> <form>
<table> <table>
<tr> <tr>
<td>E-mail:</td> <td>E-mail:</td>
<td> <td>
<input type="email" name="email"> <input type="email" name="email">
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Password:</td> <td>Password:</td>
<td> <td>
<input type="password" name="pass"> <input type="password" name="pass">
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<input type="button" value="Login" onclick="login(this.form)"> <input type="button" value="Login" onclick="login(this.form)">
</td> </td>
</tr> </tr>
</table> </table>
</form> </form>
</div> </div>
<div id="registerbox"> <div id="registerbox">
<h2>Register</h2> <h2>Register</h2>
<form> <form name="form">
<table> <table>
<tr> <tr>
<td>Name:</td> <td>Name:</td>
<td> <td>
<input type="text" name="name"/> <input type="text" name="name"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>E-mail:</td> <td>E-mail:</td>
<td> <td>
<input type="email" name="email"/> <input type="email" name="email"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Password</td> <td>Password</td>
<td> <td>
<input type="password" name="pass"/> <input type="password" name="pass"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Password confirm</td> <td>Password confirm</td>
<td> <td>
<input type="password" name="pass2"/> <input type="password" name="pass2"/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<input type="button" value="Register" onclick="register(this.form)"/> <input type="button" value="Register" onclick="register(this.form)"/>
</td> </td>
</tr> </tr>
</table> </table>
</form> </form>
</div> </div>
</div> </div>
<div id="usercontent"> <div id="usercontent">
<div id="channelmessages"></div> <div id="channelmessages"></div>
<textarea id="msginput"></textarea> <textarea id="msginput"></textarea>
</div> </div>
</body> </body>

View file

@ -1,34 +1,28 @@
var respfunc = function (result) { var respfunc = function respfunc(result) {
if (result.responseText != "Success") { if (result != "Success") { //on success result is string
var errormsg = document.getElementById("errormsg"); var errormsg = document.getElementById("errormsg");
errormsg.innerHTML = result.responseText; errormsg.innerHTML = result.responseText;
errormsg.style = "display: block"; errormsg.style = "display: block";
} }
else else
location.reload(true); location.reload(true);
} };
var sendmsgonenter = function (e) { //TODO: Detect Enter var sendmsgonenter = function sendmsgonenter(e) { //TODO: Detect Enter
console.log("A");
var code = e.keyCode || e.which; var code = e.keyCode || e.which;
if (code != 13) { //Enter keycode if (code != 13) { //Enter keycode
return; return;
} }
console.log("B");
var textarea = event.target; var textarea = event.target;
window.convid = 0; window.convid = 1;
var json = JSON.stringify({"message": textarea.value, "conversation": window.convid}); var json = JSON.stringify({"message": textarea.value, "conversation": window.convid});
$.ajax({ $.ajax({
url: "/message", data: json, method: "POST", success: respfunc, error: respfunc url: "/message", data: json, method: "POST", success: respfunc, error: respfunc
}); });
}; };
$(document).bind("ready", function () { $(document).ready(function () {
console.log("X"); $('#msginput').on("keypress", sendmsgonenter);
$('#msginput').keypress = sendmsgonenter;
}); });
console.log(respfunc); $('#msginput').on("keypress", sendmsgonenter);
console.log(sendmsgonenter);
$('#msginput').bind("keypress", sendmsgonenter);

View file

@ -51,7 +51,10 @@ public class Main {
System.out.println("2nd's contact: " + user2.getContacts().get(0)); System.out.println("2nd's contact: " + user2.getContacts().get(0));
Conversation convo = new Conversation(); Conversation convo = new Conversation();
convo.getUsers().add(user); convo.getUsers().add(user);
//user.getConversations().add(convo);
convo.getUsers().add(user2); convo.getUsers().add(user2);
// user2.getConversations().add(convo); - TODO: Fix duplicate
// key constraint
Message msg = new Message(); Message msg = new Message();
msg.setSender(user); msg.setSender(user);
msg.setTime(new Date()); msg.setTime(new Date());
@ -63,6 +66,16 @@ public class Main {
msg2.setMessage("Teszt 2"); msg2.setMessage("Teszt 2");
convo.getMesssages().add(msg2); convo.getMesssages().add(msg2);
provider.saveConversation(convo); provider.saveConversation(convo);
provider.saveUser(user);
provider.saveUser(user2);
User loggedinuser = new User();
loggedinuser.setName("NorbiPeti");
loggedinuser.setSessionid("2ed6e2cd-33ad-416e-92c2-7365510b8b31");
loggedinuser.setEmail("sznp@asd.com");
convo.getUsers().add(loggedinuser);
loggedinuser.getConversations().add(convo);
provider.saveUser(loggedinuser);
provider.saveConversation(convo);
} }
System.out.println("Starting webserver..."); System.out.println("Starting webserver...");
HttpServer server = HttpServer.create(new InetSocketAddress(InetAddress.getLocalHost(), 8080), 10); HttpServer server = HttpServer.create(new InetSocketAddress(InetAddress.getLocalHost(), 8080), 10);

View file

@ -1,7 +1,9 @@
package io.github.norbipeti.chat.server.db.domain; package io.github.norbipeti.chat.server.db.domain;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import javax.persistence.*; import javax.persistence.*;
@ -11,12 +13,13 @@ public class Conversation {
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false) @Column(name = "id", unique = true, nullable = false)
private Long id; private Long id;
@ElementCollection(fetch=FetchType.EAGER) @ElementCollection(fetch = FetchType.EAGER)
@OneToMany(cascade = CascadeType.ALL) @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "conversation")
private List<Message> messsages; private List<Message> messsages;
@ElementCollection(fetch = FetchType.EAGER) @ElementCollection(fetch = FetchType.EAGER)
@ManyToMany(cascade = CascadeType.ALL) @ManyToMany(cascade = CascadeType.ALL)
private List<User> users; @JoinTable(name = "User_Conversation", joinColumns = @JoinColumn(name = "conversation_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"))
private Set<User> users;
public List<Message> getMesssages() { public List<Message> getMesssages() {
if (messsages == null) if (messsages == null)
@ -28,13 +31,13 @@ public class Conversation {
this.messsages = messsages; this.messsages = messsages;
} }
public List<User> getUsers() { public Set<User> getUsers() {
if (users == null) if (users == null)
users = new ArrayList<>(); users = new HashSet<>();
return users; return users;
} }
public void setUsers(List<User> users) { public void setUsers(Set<User> users) {
this.users = users; this.users = users;
} }

View file

@ -15,7 +15,7 @@ public class Message {
private User sender; private User sender;
private Date time; private Date time;
private String message; private String message;
@ManyToOne(cascade=CascadeType.ALL) @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
//@JoinTable(name="conversation_message") //@JoinTable(name="conversation_message")
private Conversation conversation; private Conversation conversation;

View file

@ -1,9 +1,10 @@
package io.github.norbipeti.chat.server.db.domain; package io.github.norbipeti.chat.server.db.domain;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import javax.annotation.Generated;
import javax.persistence.*; import javax.persistence.*;
@Entity @Entity
@ -19,12 +20,13 @@ public class User {
@ElementCollection(fetch = FetchType.EAGER) @ElementCollection(fetch = FetchType.EAGER)
private List<User> contacts; private List<User> contacts;
private String salt; private String salt;
//@Column(columnDefinition = "CHAR(16) FOR BIT DATA") // @Column(columnDefinition = "CHAR(16) FOR BIT DATA")
@Column(columnDefinition="VARCHAR(64)") @Column(columnDefinition = "VARCHAR(64)")
private String sessionid; private String sessionid;
@ElementCollection(fetch = FetchType.EAGER) @ElementCollection(fetch = FetchType.EAGER)
@ManyToMany(cascade = CascadeType.ALL) // @ManyToMany(fetch = FetchType.EAGER, mappedBy = "users")
public List<Conversation> conversations; @ManyToMany(mappedBy = "users", fetch = FetchType.EAGER)
private Set<Conversation> conversations;
public List<User> getContacts() { public List<User> getContacts() {
if (contacts == null) if (contacts == null)
@ -96,13 +98,13 @@ public class User {
this.sessionid = sessionid; this.sessionid = sessionid;
} }
public List<Conversation> getConversations() { public Set<Conversation> getConversations() {
if (conversations == null) if (conversations == null)
conversations = new ArrayList<>(); conversations = new HashSet<>();
return conversations; return conversations;
} }
public void setConversations(List<Conversation> conversations) { public void setConversations(Set<Conversation> conversations) {
this.conversations = conversations; this.conversations = conversations;
} }

View file

@ -16,10 +16,10 @@ public class IndexPage extends Page {
@Override @Override
public void handlePage(HttpExchange exchange) throws IOException { public void handlePage(HttpExchange exchange) throws IOException {
final User user = IOHelper.GetLoggedInUser(exchange); final User user = IOHelper.GetLoggedInUser(exchange);
/*final User user = new User(); /*
user.setEmail("test@test.com"); * final User user = new User(); user.setEmail("test@test.com");
user.setName("Norbi"); * user.setName("Norbi"); user.setId(3L);
user.setId(3L);*/ */
if (user == null) if (user == null)
IOHelper.SendModifiedPage(200, this, (doc) -> { IOHelper.SendModifiedPage(200, this, (doc) -> {
doc.getElementById("userbox").remove(); doc.getElementById("userbox").remove();
@ -34,7 +34,9 @@ public class IndexPage extends Page {
userbox.html(userbox.html().replace("<username />", user.getName())); userbox.html(userbox.html().replace("<username />", user.getName()));
Element channelmessages = doc.getElementById("channelmessages"); Element channelmessages = doc.getElementById("channelmessages");
try (DataProvider provider = new DataProvider()) { try (DataProvider provider = new DataProvider()) {
System.out.println("Conversations: " + provider.getConversations().size());
Conversation convo = provider.getConversations().get(0); Conversation convo = provider.getConversations().get(0);
System.out.println("Messages: " + convo.getMesssages().size());
for (Message message : convo.getMesssages()) { for (Message message : convo.getMesssages()) {
Element msgelement = channelmessages.appendElement("div"); Element msgelement = channelmessages.appendElement("div");
Element header = msgelement.appendElement("p"); Element header = msgelement.appendElement("p");

View file

@ -4,12 +4,14 @@ import java.io.IOException;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Set;
import org.json.JSONObject; import org.json.JSONObject;
import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpExchange;
import io.github.norbipeti.chat.server.IOHelper; import io.github.norbipeti.chat.server.IOHelper;
import io.github.norbipeti.chat.server.db.DataProvider;
import io.github.norbipeti.chat.server.db.domain.Conversation; import io.github.norbipeti.chat.server.db.domain.Conversation;
import io.github.norbipeti.chat.server.db.domain.Message; import io.github.norbipeti.chat.server.db.domain.Message;
import io.github.norbipeti.chat.server.db.domain.User; import io.github.norbipeti.chat.server.db.domain.User;
@ -26,7 +28,7 @@ public class MessageAjaxPage extends Page {
User user = IOHelper.GetLoggedInUser(exchange); User user = IOHelper.GetLoggedInUser(exchange);
if (user == null) { if (user == null) {
IOHelper.SendResponse(403, "<p>Please log in to send messages</p>", exchange); IOHelper.SendResponse(403, "<p>Please log in to send messages</p>", exchange);
return; //TODO: Fix sending messages return; // TODO: Fix sending messages
} }
JSONObject obj = IOHelper.GetPOSTJSON(exchange); JSONObject obj = IOHelper.GetPOSTJSON(exchange);
if (obj == null) { if (obj == null) {
@ -35,13 +37,33 @@ public class MessageAjaxPage extends Page {
} }
String message = obj.getString("message"); String message = obj.getString("message");
int conversation = obj.getInt("conversation"); int conversation = obj.getInt("conversation");
List<Conversation> convos = user.getConversations(); Set<Conversation> convos = user.getConversations();
Conversation convo = convos.get(conversation); Conversation conv = null;
Message msg = new Message(); System.out.println("Len: " + convos.size());
msg.setSender(user); for (Conversation con : convos) {
msg.setMessage(message); System.out.println(con.getId());
msg.setTime(new Date()); if (con.getId() == conversation) {
convo.getMesssages().add(msg); conv = con;
break;
}
}
if (conv == null) {
IOHelper.SendResponse(400, "<h1>400 Conversation not found</h1><p>The conversation with the id "
+ conversation + " is not found.</p>", exchange);
return;
}
try (DataProvider provider = new DataProvider()) {
Message msg = new Message();
msg.setSender(user);
msg.setMessage(message);
msg.setTime(new Date());
conv.getMesssages().add(msg);
provider.saveConversation(conv);
System.out.println(conv.getMesssages().size());
} catch (Exception e) {
throw e;
}
IOHelper.SendResponse(200, "Success", exchange); IOHelper.SendResponse(200, "Success", exchange);
} }