Try to add online chat
This commit is contained in:
1 parent
428ab4127b
commit
90df65f8f9
31 files changed
+472
-492
No files matched your search
@@ -1,90 +1,30 @@
|
||||
'use strict';
|
||||
var usernamePage = document.querySelector('#username-page');
|
||||
var chatPage = document.querySelector('#chat-page');
|
||||
var usernameForm = document.querySelector('#usernameForm');
|
||||
var messageForm = document.querySelector('#messageForm');
|
||||
var messageInput = document.querySelector('#message');
|
||||
var messageArea = document.querySelector('#messageArea');
|
||||
var connectingElement = document.querySelector('.connecting');
|
||||
var stompClient = null;
|
||||
var username = null;
|
||||
var colors = [
|
||||
'#2196F3', '#32c787', '#00BCD4', '#ff5652',
|
||||
'#ffc107', '#ff85af', '#FF9800', '#39bbb0'
|
||||
];
|
||||
function connect(event) {
|
||||
username = document.querySelector('#name').value.trim();
|
||||
if(username) {
|
||||
usernamePage.classList.add('hidden');
|
||||
chatPage.classList.remove('hidden');
|
||||
var socket = new SockJS('/ws');
|
||||
stompClient = Stomp.over(socket);
|
||||
stompClient.connect({}, onConnected, onError);
|
||||
const connect = () => {
|
||||
const Stomp = require("stompjs");
|
||||
var SockJS = require("sockjs-client");
|
||||
SockJS = new SockJS("http://localhost:8080/ws");
|
||||
stompClient = Stomp.over(SockJS);
|
||||
stompClient.connect({}, onConnected, onError);
|
||||
};
|
||||
|
||||
const onConnected = () => {
|
||||
console.log("connected");
|
||||
|
||||
stompClient.subscribe(
|
||||
"/user/" + currentUser.id + "/queue/messages",
|
||||
onMessageReceived
|
||||
);
|
||||
};
|
||||
|
||||
const sendMessage = (msg) => {
|
||||
if (msg.trim() !== "") {
|
||||
const message = {
|
||||
senderId: currentUser.id,
|
||||
recipientId: activeContact.id,
|
||||
senderName: currentUser.name,
|
||||
recipientName: activeContact.name,
|
||||
content: msg,
|
||||
};
|
||||
|
||||
stompClient.send("/app/chat", {}, JSON.stringify(message));
|
||||
}
|
||||
event.preventDefault();
|
||||
}
|
||||
function onConnected() {
|
||||
// Subscribe to the Public Topic
|
||||
stompClient.subscribe('/topic/public', onMessageReceived);
|
||||
// Tell your username to the server
|
||||
stompClient.send("/app/chat.addUser",
|
||||
{},
|
||||
JSON.stringify({sender: username, type: 'JOIN'})
|
||||
)
|
||||
connectingElement.classList.add('hidden');
|
||||
}
|
||||
function onError(error) {
|
||||
connectingElement.textContent = 'Could not connect to WebSocket server. Please refresh this page to try again!';
|
||||
connectingElement.style.color = 'red';
|
||||
}
|
||||
function sendMessage(event) {
|
||||
var messageContent = messageInput.value.trim();
|
||||
if(messageContent && stompClient) {
|
||||
var chatMessage = {
|
||||
sender: username,
|
||||
content: messageInput.value,
|
||||
type: 'CHAT'
|
||||
};
|
||||
stompClient.send("/app/chat.sendMessage", {}, JSON.stringify(chatMessage));
|
||||
messageInput.value = '';
|
||||
}
|
||||
event.preventDefault();
|
||||
}
|
||||
function onMessageReceived(payload) {
|
||||
var message = JSON.parse(payload.body);
|
||||
var messageElement = document.createElement('li');
|
||||
if(message.type === 'JOIN') {
|
||||
messageElement.classList.add('event-message');
|
||||
message.content = message.sender + ' joined!';
|
||||
} else if (message.type === 'LEAVE') {
|
||||
messageElement.classList.add('event-message');
|
||||
message.content = message.sender + ' left!';
|
||||
} else {
|
||||
messageElement.classList.add('chat-message');
|
||||
var avatarElement = document.createElement('i');
|
||||
var avatarText = document.createTextNode(message.sender[0]);
|
||||
avatarElement.appendChild(avatarText);
|
||||
avatarElement.style['background-color'] = getAvatarColor(message.sender);
|
||||
messageElement.appendChild(avatarElement);
|
||||
var usernameElement = document.createElement('span');
|
||||
var usernameText = document.createTextNode(message.sender);
|
||||
usernameElement.appendChild(usernameText);
|
||||
messageElement.appendChild(usernameElement);
|
||||
}
|
||||
var textElement = document.createElement('p');
|
||||
var messageText = document.createTextNode(message.content);
|
||||
textElement.appendChild(messageText);
|
||||
messageElement.appendChild(textElement);
|
||||
messageArea.appendChild(messageElement);
|
||||
messageArea.scrollTop = messageArea.scrollHeight;
|
||||
}
|
||||
function getAvatarColor(messageSender) {
|
||||
var hash = 0;
|
||||
for (var i = 0; i < messageSender.length; i++) {
|
||||
hash = 31 * hash + messageSender.charCodeAt(i);
|
||||
}
|
||||
var index = Math.abs(hash % colors.length);
|
||||
return colors[index];
|
||||
}
|
||||
usernameForm.addEventListener('submit', connect, true)
|
||||
messageForm.addEventListener('submit', sendMessage, true)
|
||||
};
|
||||
Reference in new issue
Block a user