Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 0 additions & 1 deletion week3/tiffany_lam/script.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,5 @@ function changeImage() {
} else {
image_link = full_cookie
}
// document.getElementById("cookie_image").src="/week3/tiffany_lam/cookie.jpeg"
}

67 changes: 67 additions & 0 deletions week6/tiffany_lam/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
<!DOCTYPE html>
<html>
<head>
<title>Socket.IO chat</title>
<style>
body { margin: 0; padding-bottom: 3rem; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; }

#form { background: rgba(0, 0, 0, 0.15); padding: 0.25rem; position: fixed; bottom: 0; left: 0; right: 0; display: flex; height: 3rem; box-sizing: border-box; backdrop-filter: blur(10px); }
#input { border: none; padding: 0 1rem; flex-grow: 1; border-radius: 2rem; margin: 0.25rem; }
#input:focus { outline: none; }
#form > button { background: #333; border: none; padding: 0 1rem; margin: 0.25rem; border-radius: 3px; outline: none; color: #fff; }

#messages { list-style-type: none; margin: 0; padding: 0; }
#messages > li { padding: 0.5rem 1rem; }
#messages > li:nth-child(odd) { background: #efefef; }
</style>
</head>
<body>
<ul id="messages"></ul>
<form id="form" action="">
<input id="input" autocomplete="off" /><button>Send</button>
</form>
</body>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();

var messages = document.getElementById('messages');
var form = document.getElementById('form');
var input = document.getElementById('input');

// when user presses send button, emit message to all users
form.addEventListener('submit', function(e) {
e.preventDefault();
if (input.value) {
socket.emit('chat message', input.value);
input.value = '';
}
});

// msg when new user joins
socket.on('new user joined', function() {
var item = document.createElement('li');
item.textContent = "A User has connected";
messages.appendChild(item);
window.scrollTo(0, document.body.scrollHeight);
});

// when receiving messages
socket.on('chat message', function(msg) {
var item = document.createElement('li');
item.textContent = msg;
messages.appendChild(item);
window.scrollTo(0, document.body.scrollHeight);
});

// when user first loads up page, load saved msgs from db
socket.on('display msgs', function(msgs) {
msgs.forEach(element => {
var item = document.createElement('li');
item.textContent = element;
messages.appendChild(item);
});
window.scrollTo(0, document.body.scrollHeight);
});
</script>
</html
56 changes: 56 additions & 0 deletions week6/tiffany_lam/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
const { Server } = require("socket.io");
const mongoose = require("mongoose");


const Schema = mongoose.Schema;

const messageSchema = new Schema({
content: {type: String}
});

const messageModel = mongoose.model("Message", messageSchema);

// initialize a new instance of socket.io by passing the server (the HTTP server) object
const io = new Server(server);

app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html');
});

app.get('/messages', async function(req, res){
res.json(await messageModel.find());
});

// listen on the connection/disconnection event for incoming sockets
io.on ('connection', async (socket) => {
io.emit('new user joined');

// display saved msgs from db
const msgs = await messageModel.find();
const contents = msgs.map(msg => msg.content);
socket.emit('display msgs', contents);

socket.on('disconnect', () => {
console.log('user disconnected');
});

socket.on('chat message', (msg) => {
// Save to MongoDB
const message = new messageModel();
message.content = msg;
message.save().then(m => {
io.emit('chat message', msg);
})
});
});

server.listen(3000, async () => {
await mongoose.connect("mongodb+srv://tiffanylam:9HcXK8bi3yYw04cM@cluster0.njgvl.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0").catch(e => {
console.log(e)
});
console.log('listening on *:3000');
});
223 changes: 223 additions & 0 deletions week6/tiffany_lam/node_modules/.package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading