Fix up live chat
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 4m26s

This commit is contained in:
2026-03-05 19:14:05 +00:00
parent 3056b23b50
commit 95635c86b3
5 changed files with 25 additions and 15 deletions

View File

@@ -15,7 +15,7 @@ import (
func main() { func main() {
logsDir := "/backend/logs" logsDir := "/backend/logs"
logFile, err := os.OpenFile(logsDir+"/go.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) logFile, err := os.OpenFile(logsDir+"/go.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0o644)
if err != nil { if err != nil {
panic(err) panic(err)
} }

View File

@@ -1,6 +1,7 @@
package services package services
import ( import (
"net/http"
"sync" "sync"
"time" "time"
@@ -12,6 +13,9 @@ import (
var Upgrader = websocket.Upgrader{ var Upgrader = websocket.Upgrader{
ReadBufferSize: 1024, ReadBufferSize: 1024,
WriteBufferSize: 1024, WriteBufferSize: 1024,
CheckOrigin: func(r *http.Request) bool {
return true
},
} }
var ( var (

View File

@@ -1,9 +1,18 @@
<script setup> <script setup>
import { ref, computed, onMounted, onUnmounted } from "vue";
import Button from "@/components/input/Button.vue"; import Button from "@/components/input/Button.vue";
import { useMessagesStore } from "@/stores/messages"; import { useMessagesStore } from "@/stores/messages";
const messagesStore = useMessagesStore(); const messagesStore = useMessagesStore();
const messages = computed(() => messagesStore.messages); const messages = computed(() => messagesStore.messages);
const messageInput = ref("");
function sendMessage() {
const text = messageInput.value.trim();
if (!text) return;
messagesStore.sendMessage(text);
messageInput.value = "";
}
onMounted(() => { onMounted(() => {
messagesStore.connect(); messagesStore.connect();
@@ -17,7 +26,7 @@ onUnmounted(() => {
<div> <div>
<div class="flex flex-col"> <div class="flex flex-col">
<p v-for="message in messages" :key="message.id"> <p v-for="message in messages" :key="message.id">
{{ message.content }} {{ message.text }}
</p> </p>
</div> </div>
<div class="flex flex-row"> <div class="flex flex-row">

View File

@@ -1,16 +1,14 @@
import { defineStore } from "pinia"; import { defineStore } from "pinia";
import { ref, computed } from "vue"; import { ref, computed } from "vue";
const URL = "/api/ws"; function getWebSocketURL() {
const protocol = window.location.protocol === "https:" ? "wss:" : "ws:";
const message_template = { return `${protocol}//${window.location.host}/api/ws`;
id: 0, }
content: "Yo",
};
export const useMessagesStore = defineStore("messages", () => { export const useMessagesStore = defineStore("messages", () => {
const socket = ref(null); const socket = ref(null);
const messages = ref([message_template]); const messages = ref([]);
const isConnected = ref(false); const isConnected = ref(false);
const lastError = ref(null); const lastError = ref(null);
@@ -19,7 +17,7 @@ export const useMessagesStore = defineStore("messages", () => {
function connect() { function connect() {
if (socket.value && isConnected.value) return; if (socket.value && isConnected.value) return;
socket.value = new WebSocket(URL); socket.value = new WebSocket(getWebSocketURL());
socket.value.onopen = () => { socket.value.onopen = () => {
isConnected.value = true; isConnected.value = true;
@@ -31,8 +29,7 @@ export const useMessagesStore = defineStore("messages", () => {
const data = JSON.parse(event.data); const data = JSON.parse(event.data);
messages.value.push(data); messages.value.push(data);
} catch { } catch {
// fallback if server sends plain text messages.value.push({ text: event.data });
messages.value.push(event.data);
} }
}; };
@@ -53,9 +50,9 @@ export const useMessagesStore = defineStore("messages", () => {
isConnected.value = false; isConnected.value = false;
} }
function sendMessage(payload) { function sendMessage(text) {
if (!socket.value || !isConnected.value) return; if (!socket.value || !isConnected.value) return;
socket.value.send(JSON.stringify(payload)); socket.value.send(JSON.stringify({ text }));
} }
function clearMessages() { function clearMessages() {

View File

@@ -28,6 +28,7 @@ import Consumption from "./Consumption.vue";
class="sidebar border-children background-children place-content-between flex-1 flex flex-col m-10 w-60" class="sidebar border-children background-children place-content-between flex-1 flex flex-col m-10 w-60"
> >
<Miku /> <Miku />
<Chat />
</div> </div>
<div <div
class="a4page-portrait homeGrid relative background-children border-children bdr-1" class="a4page-portrait homeGrid relative background-children border-children bdr-1"
@@ -56,7 +57,6 @@ import Consumption from "./Consumption.vue";
<CommitHistory class="text-center" /> <CommitHistory class="text-center" />
<!-- <Elle class="flex-1" /> --> <!-- <Elle class="flex-1" /> -->
<!-- <Chat class="bdr-2 bg-bg_primary" /> -->
<!-- <MusicPlayer /> --> <!-- <MusicPlayer /> -->
</div> </div>
<div> <div>