Fixed an error with exmap, added isLoggedIn to User, etc.

This commit is contained in:
Norbi Peti 2016-08-18 12:08:37 +02:00
parent 437be79d69
commit 15470f9369
4 changed files with 19 additions and 5 deletions

View file

@ -31,12 +31,13 @@ function changeConversation(convid) {
return; return;
if (!canswitchconversations) if (!canswitchconversations)
return; return;
console.log("Can't switch conversations now");
canswitchconversations = false; canswitchconversations = false;
stopPoll(); stopPoll();
var chmsgse = document.getElementById("channelmessages"); var chmsgse = document.getElementById("channelmessages");
var chmsgs = chmsgse.getElementsByClassName("chmessage"); var chmsgs = chmsgse.getElementsByClassName("chmessage");
for (var i = 0; i < chmsgs.length; i++) while (chmsgs.length > 0)
chmsgse.removeChild(chmsgs[i]); chmsgse.removeChild(chmsgs[0]);
convidp.innerText = convid; convidp.innerText = convid;
conversationChanged(); conversationChanged();
} }

View file

@ -52,6 +52,7 @@ function poll() {
msgs.innerHTML += data; msgs.innerHTML += data;
var msgelement = msgs.children[msgs.children.length - 1]; var msgelement = msgs.children[msgs.children.length - 1];
handlereceivedmessage(msgelement); handlereceivedmessage(msgelement);
console.log("Can switch conversations now");
canswitchconversations = true; canswitchconversations = true;
if (justsentmsgread) if (justsentmsgread)
justsentmsgread = false; justsentmsgread = false;

View file

@ -2,6 +2,8 @@ package io.github.norbipeti.chat.server.db.domain;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.UUID;
import javax.persistence.*; import javax.persistence.*;
import io.github.norbipeti.chat.server.data.LoaderCollection; import io.github.norbipeti.chat.server.data.LoaderCollection;
@ -117,4 +119,8 @@ public class User extends SavedData {
@Override @Override
public void init() { public void init() {
} }
public boolean isLoggedIn() {
return !sessionid.equals(new UUID(0, 0));
}
} }

View file

@ -49,10 +49,10 @@ public class ReceiveMessageAjaxPage extends Page {
if (conv == null || !conv.getUsers().contains(user)) if (conv == null || !conv.getUsers().contains(user))
user.setCurrentConversation(null); user.setCurrentConversation(null);
else { else {
exmap.put(user, exchange);
if (user.getCurrentConversation() == null || !user.getCurrentConversation().equals(currentconversation)) if (user.getCurrentConversation() == null || !user.getCurrentConversation().equals(currentconversation))
sendMessagesToUser(user, conv); sendMessagesToUser(user, conv);
user.setCurrentConversation(currentconversation); user.setCurrentConversation(currentconversation);
exmap.put(user, exchange);
} }
} }
@ -60,6 +60,8 @@ public class ReceiveMessageAjaxPage extends Page {
for (User user : conv.getUsers()) { // TODO: Load older messages when scrolling up for (User user : conv.getUsers()) { // TODO: Load older messages when scrolling up
if (user.getCurrentConversation() == null || !user.getCurrentConversation().get().equals(conv)) if (user.getCurrentConversation() == null || !user.getCurrentConversation().get().equals(conv))
continue; continue;
if (!user.isLoggedIn())
continue;
if (unsentmessages.containsKey(user) && unsentmessages.get(user).size() > 10) { if (unsentmessages.containsKey(user) && unsentmessages.get(user).size() > 10) {
unsentmessages.get(user).clear(); unsentmessages.get(user).clear();
} }
@ -71,14 +73,18 @@ public class ReceiveMessageAjaxPage extends Page {
Document doc = new Document(""); Document doc = new Document("");
while (it.hasNext()) { while (it.hasNext()) {
Message entry = it.next(); Message entry = it.next();
entry.getAsHTML(doc); // TODO: Only send messages if the user's current conversation matches entry.getAsHTML(doc);
try { try {
it.remove(); // Remove sent message it.remove(); // Remove sent message
} catch (Exception e) { // Remove users even if an error occurs (otherwise they may not be able to send a new/ message due to "headers already sent") } catch (Exception e) { // Remove users even if an error occurs (otherwise they may not be able to send a new/ message due to "headers already sent")
e.printStackTrace(); e.printStackTrace();
} }
} // TODO: Allow logins from multiple locations - Map<IP, UUID>
try {
IOHelper.SendResponse(200, doc.toString(), exmap.get(user));
} catch (Exception e) {
LogManager.getLogger().warn("Error: Can't send " + doc.toString() + " to " + user + "\n" + e);
} }
IOHelper.SendResponse(200, doc.toString(), exmap.get(user));
exmap.remove(user); exmap.remove(user);
if (unsentmessages.get(user).size() == 0) if (unsentmessages.get(user).size() == 0)
unsentmessages.remove(user); unsentmessages.remove(user);