#363 : Moved socket logic into socketManager and removed it from Pinia store
This commit is contained in:
@ -1,16 +1,12 @@
|
||||
import config from '@/application/config'
|
||||
import { SocketEvent } from '@/application/enums'
|
||||
import type { Character, Notification, User, WorldSettings } from '@/application/types'
|
||||
import { useCookies } from '@vueuse/integrations/useCookies'
|
||||
import { socketManager } from '@/managers/SocketManager'
|
||||
import { defineStore } from 'pinia'
|
||||
import { io, Socket } from 'socket.io-client'
|
||||
|
||||
export const useGameStore = defineStore('game', {
|
||||
state: () => {
|
||||
return {
|
||||
notifications: [] as Notification[],
|
||||
token: '',
|
||||
connection: null as Socket | null,
|
||||
user: null as User | null,
|
||||
character: null as Character | null,
|
||||
world: {
|
||||
@ -51,9 +47,6 @@ export const useGameStore = defineStore('game', {
|
||||
removeNotification(id: string) {
|
||||
this.notifications = this.notifications.filter((notification: Notification) => notification.id !== id)
|
||||
},
|
||||
setToken(token: string) {
|
||||
this.token = token
|
||||
},
|
||||
setUser(user: User | null) {
|
||||
this.user = user
|
||||
},
|
||||
@ -73,49 +66,34 @@ export const useGameStore = defineStore('game', {
|
||||
this.uiSettings.isCharacterProfileOpen = !this.uiSettings.isCharacterProfileOpen
|
||||
},
|
||||
initConnection() {
|
||||
this.connection = io(config.server_endpoint, {
|
||||
secure: config.environment === 'production',
|
||||
withCredentials: true,
|
||||
transports: ['websocket'],
|
||||
reconnectionAttempts: 5
|
||||
})
|
||||
const socket = socketManager.initConnection()
|
||||
|
||||
// #99 - If we can't connect, disconnect
|
||||
this.connection.on('connect_error', () => {
|
||||
// Handle connect error
|
||||
socket.on(SocketEvent.CONNECT_ERROR, () => {
|
||||
this.disconnectSocket()
|
||||
})
|
||||
|
||||
// Let the server know the user is logged in
|
||||
this.connection.emit(SocketEvent.LOGIN)
|
||||
// Handle failed reconnection
|
||||
socket.on(SocketEvent.RECONNECT_FAILED, () => {
|
||||
this.disconnectSocket()
|
||||
})
|
||||
|
||||
// set user
|
||||
this.connection.on(SocketEvent.LOGGED_IN, (user: User) => {
|
||||
// Emit login event
|
||||
socketManager.emit(SocketEvent.LOGIN)
|
||||
|
||||
// Handle logged in event
|
||||
socketManager.on(SocketEvent.LOGGED_IN, (user: User) => {
|
||||
this.setUser(user)
|
||||
})
|
||||
|
||||
// When we can't reconnect, disconnect
|
||||
this.connection.on('reconnect_failed', () => {
|
||||
this.disconnectSocket()
|
||||
})
|
||||
|
||||
// Listen for new date from socket
|
||||
this.connection.on(SocketEvent.DATE, (data: Date) => {
|
||||
// Handle date updates
|
||||
socketManager.on(SocketEvent.DATE, (data: Date) => {
|
||||
this.world.date = new Date(data)
|
||||
})
|
||||
},
|
||||
disconnectSocket() {
|
||||
// Remove event listeners
|
||||
this.connection?.off('connect_error')
|
||||
this.connection?.off('reconnect_failed')
|
||||
this.connection?.off(SocketEvent.DATE)
|
||||
this.connection?.disconnect()
|
||||
socketManager.disconnect()
|
||||
|
||||
useCookies().remove('token', {
|
||||
domain: config.domain
|
||||
})
|
||||
|
||||
this.connection = null
|
||||
this.token = ''
|
||||
this.user = null
|
||||
this.character = null
|
||||
|
||||
|
Reference in New Issue
Block a user