Fix up live chat
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 4m26s
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 4m26s
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 (
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user