we have a nominally working, albeit ugly, chat application! Now I just need to write a talk about deploying shit, and test deploying.
This commit is contained in:
parent
9e1ecbbe1f
commit
8740802bc6
@ -14,7 +14,10 @@ socket.onmessage = function (event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function newMessageText(name, message) {
|
function newMessageText(name, message) {
|
||||||
return `${name}: ${message}`;
|
return [
|
||||||
|
m("span.chatter", name + ": "),
|
||||||
|
m("span.chatter-message", message)
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
const MessageBox = {
|
const MessageBox = {
|
||||||
@ -25,10 +28,15 @@ const MessageBox = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function clearMessageBox() {
|
||||||
|
const messageBox = document.getElementById("message");
|
||||||
|
messageBox.value = "";
|
||||||
|
}
|
||||||
|
|
||||||
function sendMessage(e) {
|
function sendMessage(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
const form = new FormData(e.target);
|
|
||||||
|
|
||||||
|
const form = new FormData(e.target);
|
||||||
const message = {};
|
const message = {};
|
||||||
|
|
||||||
for (const [key, value] of form.entries()) {
|
for (const [key, value] of form.entries()) {
|
||||||
@ -36,14 +44,15 @@ function sendMessage(e) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
socket.send(JSON.stringify(message));
|
socket.send(JSON.stringify(message));
|
||||||
|
clearMessageBox();
|
||||||
}
|
}
|
||||||
|
|
||||||
const MessageInput = {
|
const MessageInput = {
|
||||||
view: function () {
|
view: function () {
|
||||||
return m("div", [
|
return m("div.chat-input", [
|
||||||
m("form", { method: "post", onsubmit: sendMessage }, [
|
m("form", { method: "post", onsubmit: sendMessage }, [
|
||||||
m("input", { name: "chatter", placeholder: "Name" }),
|
m("input", { name: "chatter", placeholder: "Name" }),
|
||||||
m("input", { name: "message", placeholder: "Message" }),
|
m("input", { name: "message", placeholder: "Message", id: "message", required: true }),
|
||||||
m("input", { type: "submit", value: "Send" })
|
m("input", { type: "submit", value: "Send" })
|
||||||
])
|
])
|
||||||
]);
|
]);
|
||||||
|
@ -40,6 +40,11 @@ export class ChatRoom extends EventEmitter {
|
|||||||
public getNewestMessage(): Message {
|
public getNewestMessage(): Message {
|
||||||
const message = this.messages[this.messages - 1];
|
const message = this.messages[this.messages - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set up the lifetime to clear messages in memory
|
||||||
|
protected pruneMessages(lifetime: number): void {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const chatRoom = new ChatRoom();
|
export const chatRoom = new ChatRoom();
|
||||||
|
@ -32,8 +32,9 @@ app.get("/chat-service", upgradeWebSocket((c) => {
|
|||||||
onClose() {
|
onClose() {
|
||||||
console.log("Connection closed.");
|
console.log("Connection closed.");
|
||||||
},
|
},
|
||||||
onError(event) {
|
onError(event, ws) {
|
||||||
console.error(event);
|
console.error(event);
|
||||||
|
ws.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
@ -1,4 +1,23 @@
|
|||||||
input, label {
|
.messages .message {
|
||||||
display: block;
|
padding: 0.5em;
|
||||||
margin-top: 0.5em;
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 5px;
|
||||||
|
margin-bottom: 0.5em;
|
||||||
|
}
|
||||||
|
.chatter {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chat-input > form {
|
||||||
|
display: flex;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.chat-input > form > input {
|
||||||
|
padding: 0.7em;
|
||||||
|
}
|
||||||
|
.chat-input > form > input[name="chatter"] {
|
||||||
|
width: 20%;
|
||||||
|
}
|
||||||
|
.chat-input > form > input[name="message"] {
|
||||||
|
width: 75%;
|
||||||
}
|
}
|
||||||
|
@ -1726,7 +1726,14 @@ function createWebSocket() {
|
|||||||
|
|
||||||
// frontend/index.js
|
// frontend/index.js
|
||||||
function newMessageText(name, message) {
|
function newMessageText(name, message) {
|
||||||
return `${name}: ${message}`;
|
return [
|
||||||
|
import_mithril.default("span.chatter", name + ": "),
|
||||||
|
import_mithril.default("span.chatter-message", message)
|
||||||
|
];
|
||||||
|
}
|
||||||
|
function clearMessageBox() {
|
||||||
|
const messageBox = document.getElementById("message");
|
||||||
|
messageBox.value = "";
|
||||||
}
|
}
|
||||||
function sendMessage(e) {
|
function sendMessage(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
@ -1736,6 +1743,7 @@ function sendMessage(e) {
|
|||||||
message[key] = value;
|
message[key] = value;
|
||||||
}
|
}
|
||||||
socket.send(JSON.stringify(message));
|
socket.send(JSON.stringify(message));
|
||||||
|
clearMessageBox();
|
||||||
}
|
}
|
||||||
var messages = [];
|
var messages = [];
|
||||||
var socket = createWebSocket();
|
var socket = createWebSocket();
|
||||||
@ -1755,10 +1763,10 @@ var MessageBox = {
|
|||||||
};
|
};
|
||||||
var MessageInput = {
|
var MessageInput = {
|
||||||
view: function() {
|
view: function() {
|
||||||
return import_mithril.default("div", [
|
return import_mithril.default("div.chat-input", [
|
||||||
import_mithril.default("form", { method: "post", onsubmit: sendMessage }, [
|
import_mithril.default("form", { method: "post", onsubmit: sendMessage }, [
|
||||||
import_mithril.default("input", { name: "chatter", placeholder: "Name" }),
|
import_mithril.default("input", { name: "chatter", placeholder: "Name" }),
|
||||||
import_mithril.default("input", { name: "message", placeholder: "Message" }),
|
import_mithril.default("input", { name: "message", placeholder: "Message", id: "message", required: true }),
|
||||||
import_mithril.default("input", { type: "submit", value: "Send" })
|
import_mithril.default("input", { type: "submit", value: "Send" })
|
||||||
])
|
])
|
||||||
]);
|
]);
|
||||||
|
Loading…
Reference in New Issue
Block a user