cloud-run-websockets/chat-with-sessions/public/index.js (44 lines of code) (raw):
// Material Design functionality
mdc.textField.MDCTextField.attachTo(document.querySelector('.name'))
mdc.textField.MDCTextField.attachTo(document.querySelector('.room'))
mdc.ripple.MDCRipple.attachTo(document.querySelector('.signin'))
mdc.ripple.MDCRipple.attachTo(document.querySelector('.send'))
// Hide Chatroom on start
$(document).ready(function () {
$('#chatroom').hide();
});
// Initialize Socket.io
var socket = io();
// On sign in
$('#signin').submit(e => {
e.preventDefault();
const name = $('#name').val();
const room = $('#room').val();
socket.emit('login', {name, room}, (error) => {
if (error) {
console.log(error);
}
$('#signin').hide();
setChatroom(room)
$('#chatroom').show();
});
});
// Send chat message
$('#chat').submit(e => {
e.preventDefault();
const msg = $('#msg').val();
socket.emit('sendMessage', msg, (error) => {
if (error) {
console.log(error);
}
});
$('#msg').val('');
});
// Listen for new messages
socket.on('message', (msg) => {
log(msg.user, msg.text);
});
// Listen for notifications
socket.on('notification', (msg) => {
log(msg.title, msg.description);
});
// Helper function to set chatroom name
function setChatroom(room) {
$('#chatroom h1').append(room);
}
// Helper function to print to chatroom
function log(name, msg) {
$('#messages').append(`<li> <strong>${name}</strong>: ${msg}`);
window.scrollTo(0, document.body.scrollHeight);
}