refactoring: split engine.js into files
This commit is contained in:
parent
da0760850a
commit
a86a0e62a5
43
client/src/plugins/engine/fetchUpdate.js
Normal file
43
client/src/plugins/engine/fetchUpdate.js
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
import buildUrl from 'build-url'
|
||||||
|
|
||||||
|
export default async function() {
|
||||||
|
const { store, $axios, $config } = this.context
|
||||||
|
|
||||||
|
if (this.shouldStop || !this.isActive) {
|
||||||
|
this.isActive = false
|
||||||
|
this.shouldStop = false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let delay = 0
|
||||||
|
try {
|
||||||
|
const url = buildUrl($config.serverBaseUrl, {
|
||||||
|
path: '/api/sync',
|
||||||
|
queryParams: {
|
||||||
|
v: store.state.engine.version + 1,
|
||||||
|
g: store.state.engine.user?.game,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
const response = await $axios.get(url)
|
||||||
|
store.commit('engine/setJson', response.data)
|
||||||
|
} catch (e) {
|
||||||
|
const { status, statusText } = e.response
|
||||||
|
if (status != 200) {
|
||||||
|
console.warn(`HTTP ${status} ${statusText}`)
|
||||||
|
delay = 5000
|
||||||
|
store.commit('engine/setVersion', -1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const now = new Date().getTime()
|
||||||
|
const last = this.lastFetched.splice(0, 1)
|
||||||
|
this.lastFetched.push(now)
|
||||||
|
|
||||||
|
if (now - last < 1000) {
|
||||||
|
console.warn('engine: respawning too fast, throttling down')
|
||||||
|
delay = 5000
|
||||||
|
}
|
||||||
|
window.setTimeout(() => {
|
||||||
|
this.fetchUpdate()
|
||||||
|
}, delay)
|
||||||
|
}
|
13
client/src/plugins/engine/fetchUserInfo.js
Normal file
13
client/src/plugins/engine/fetchUserInfo.js
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
export default async function() {
|
||||||
|
const { store, $axios } = this.context
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await $axios.get('/api/userinfo')
|
||||||
|
store.commit('engine/setUser', response.data)
|
||||||
|
} catch(e) {
|
||||||
|
store.commit('engine/setUser', undefined)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
@ -1,4 +1,7 @@
|
|||||||
import buildUrl from 'build-url'
|
import start from './start'
|
||||||
|
import stop from './stop'
|
||||||
|
import fetchUpdate from './fetchUpdate'
|
||||||
|
import fetchUserInfo from './fetchUserInfo'
|
||||||
|
|
||||||
export default (context, inject) => {
|
export default (context, inject) => {
|
||||||
const engine = {
|
const engine = {
|
||||||
@ -7,83 +10,11 @@ export default (context, inject) => {
|
|||||||
isActive: false,
|
isActive: false,
|
||||||
shouldStop: false,
|
shouldStop: false,
|
||||||
|
|
||||||
async start() {
|
start,
|
||||||
const { store, redirect } = this.context
|
stop,
|
||||||
if (!store.state.engine.user) {
|
fetchUpdate,
|
||||||
if (!await this.fetchUserInfo()) {
|
fetchUserInfo,
|
||||||
redirect('/')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (this.isActive) {
|
|
||||||
console.warn('attempt to start already running engine!')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
this.isActive = true
|
|
||||||
this.fetchUpdate()
|
|
||||||
},
|
|
||||||
|
|
||||||
stop() {
|
|
||||||
if (!this.isActive) return
|
|
||||||
this.shouldStop = true
|
|
||||||
},
|
|
||||||
|
|
||||||
async fetchUpdate() {
|
|
||||||
const { store, $axios, $config } = this.context
|
|
||||||
|
|
||||||
if (this.shouldStop || !this.isActive) {
|
|
||||||
this.isActive = false
|
|
||||||
this.shouldStop = false
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
let delay = 0
|
|
||||||
try {
|
|
||||||
const url = buildUrl($config.serverBaseUrl, {
|
|
||||||
path: '/api/sync',
|
|
||||||
queryParams: {
|
|
||||||
v: store.state.engine.version + 1,
|
|
||||||
g: store.state.engine.user?.game,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
const response = await $axios.get(url)
|
|
||||||
store.commit('engine/setJson', response.data)
|
|
||||||
} catch (e) {
|
|
||||||
const { status, statusText } = e.response
|
|
||||||
if (status != 200) {
|
|
||||||
console.warn(`HTTP ${status} ${statusText}`)
|
|
||||||
delay = 5000
|
|
||||||
store.commit('engine/setVersion', -1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const now = new Date().getTime()
|
|
||||||
const last = this.lastFetched.splice(0, 1)
|
|
||||||
this.lastFetched.push(now)
|
|
||||||
|
|
||||||
if (now - last < 1000) {
|
|
||||||
console.warn('engine: respawning too fast, throttling down')
|
|
||||||
delay = 5000
|
|
||||||
}
|
|
||||||
window.setTimeout(() => {
|
|
||||||
this.fetchUpdate()
|
|
||||||
}, delay)
|
|
||||||
},
|
|
||||||
|
|
||||||
async fetchUserInfo() {
|
|
||||||
const { store, $axios } = this.context
|
|
||||||
|
|
||||||
try {
|
|
||||||
const response = await $axios.get('/api/userinfo')
|
|
||||||
store.commit('engine/setUser', response.data)
|
|
||||||
} catch(e) {
|
|
||||||
store.commit('engine/setUser', undefined)
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inject('engine', engine)
|
inject('engine', engine)
|
||||||
}
|
}
|
||||||
|
15
client/src/plugins/engine/start.js
Normal file
15
client/src/plugins/engine/start.js
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
export default async function() {
|
||||||
|
const { store, redirect } = this.context
|
||||||
|
if (!store.state.engine.user) {
|
||||||
|
if (!await this.fetchUserInfo()) {
|
||||||
|
redirect('/')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.isActive) {
|
||||||
|
console.warn('attempt to start already running engine!')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
this.isActive = true
|
||||||
|
this.fetchUpdate()
|
||||||
|
}
|
4
client/src/plugins/engine/stop.js
Normal file
4
client/src/plugins/engine/stop.js
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
export default function() {
|
||||||
|
if (!this.isActive) return
|
||||||
|
this.shouldStop = true
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user