websockets implemented

This commit is contained in:
Torsten Schulz
2024-12-04 19:08:26 +01:00
parent d46a51db38
commit 069c97fa90
64 changed files with 2488 additions and 562 deletions

View File

@@ -2,6 +2,8 @@ import { createStore } from 'vuex';
import dialogs from './modules/dialogs';
import loadMenu from '../utils/menuLoader.js';
import router from '../router';
import apiClient from '../utils/axios.js';
import { io } from 'socket.io-client';
const store = createStore({
state: {
@@ -9,6 +11,8 @@ const store = createStore({
user: null,
language: navigator.language.startsWith('de') ? 'de' : 'en',
menu: [],
socket: null,
menuNeedsUpdate: false,
},
mutations: {
async dologin(state, user) {
@@ -16,48 +20,74 @@ const store = createStore({
state.user = user;
localStorage.setItem('isLoggedIn', 'true');
localStorage.setItem('user', JSON.stringify(user));
state.menuNeedsUpdate = true;
if (user.param.filter(param => ['birthdate', 'gender'].includes(param.name)).length < 2) {
router.push({ path: '/settings/personal' });
}
},
dologout(state) {
async dologout(state) {
state.isLoggedIn = false;
state.user = null;
localStorage.removeItem('isLoggedIn');
localStorage.removeItem('user');
localStorage.removeItem('menu');
},
loadLoginState(state) {
const isLoggedIn = localStorage.getItem('isLoggedIn') === 'true';
let userData = {};
try {
userData = localStorage.getItem('user') ? JSON.parse(localStorage.getItem('user')) : {};
} catch (e) {
}
const menu = localStorage.getItem('menu');
const user = userData;
state.isLoggedIn = isLoggedIn;
state.user = user;
state.menu = menu;
state.menuNeedsUpdate = false;
// await apiClient.get('/api/auth/logout');
},
setLanguage(state, language) {
state.language = language;
},
setMenu(state, menu) {
state.menu = menu;
}
state.menuNeedsUpdate = false;
},
setSocket(state, socket) {
state.socket = socket;
},
clearSocket(state) {
state.socket = null;
},
},
actions: {
async login({ commit, dispatch }, user) {
async login({ commit, dispatch }, user) {
console.log('login', user);
await commit('dologin', user);
await dispatch('loadMenu');
await dispatch('initializeSocket');
const socket = this.getters.socket;
if (socket) {
console.log('Emitting setUserId:', user.id);
socket.emit('setUserId', user.id);
console.log('setUserId emitted successfully');
} else {
console.error('Socket not initialized');
}
await dispatch('loadMenu');
dispatch('startMenuReload');
},
logout({ commit }) {
logout({ commit, state }) {
if (state.socket) {
state.socket.disconnect();
commit('clearSocket');
}
commit('dologout');
router.push('/');
},
initializeSocket({ commit, state }) {
if (state.isLoggedIn && state.user) {
const socket = io(import.meta.env.VITE_API_BASE_URL); // oder Ihre URL
console.log('Socket initialized:', socket);
socket.on('connect', () => {
console.log('Socket connected:', socket.id);
});
socket.on('disconnect', (reason) => {
console.log('Socket disconnected:', reason);
});
commit('setSocket', socket);
}
},
loadLoginState({ commit }) {
commit('loadLoginState');
},
@@ -73,17 +103,13 @@ const store = createStore({
commit('setMenu', []);
}
},
startMenuReload({ dispatch }) {
setInterval(() => {
dispatch('loadMenu');
}, 10000);
},
},
getters: {
isLoggedIn: state => state.isLoggedIn,
user: state => state.user,
language: state => state.language,
menu: state => state.menu,
socket: state => state.socket,
},
modules: {
dialogs,