actions.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import Vue from 'vue'
  2. import { API_ROUTES, buildURI, buildWsURI } from '../functions'
  3. export default {
  4. resetApp({ commit }, { hostConfig = false, progression = false }) {
  5. commit('resetApp', { hostConfig, progression })
  6. },
  7. async setHostConfig({ commit }, { ssl, host, port }) {
  8. // Timeout after 1s
  9. const controller = new AbortController()
  10. const signal = controller.signal
  11. setTimeout(() => controller.abort(), 1500)
  12. const URI = buildURI(ssl, host, port, API_ROUTES.ping())
  13. return fetch(URI, { signal })
  14. .then(async res => {
  15. if (res.status !== 200) throw new Error(`Received wrong HTTP status code : ${res.status} (Need 200).`)
  16. const content = await res.text()
  17. if (content !== 'pong') throw new Error('Received wrong web content (Need to receive "pong").')
  18. this._vm.$connect(buildWsURI(ssl, host, port))
  19. // Configuration is valid
  20. commit('setHostConfig', { ssl, host, port })
  21. })
  22. .catch(err => {
  23. // Host not reachable or invalid HTTP status code
  24. throw new Error(`Invalid configuration "${URI}". ${!err.message.includes('aborted') ? err.message : ''}`)
  25. })
  26. },
  27. async connectToWs({ state, getters }) {
  28. if (state.socket.isConnected) return /*eslint-disable-line */
  29. else if (getters.isHostConfigured) {
  30. this._vm.$connect(getters.getHostWsURI)
  31. }
  32. else throw new Error('Could not connect to WebSocket server. Host is not configured.')
  33. },
  34. sendMessage(_, message) {
  35. Vue.prototype.$socket.send(JSON.stringify(message) || message)
  36. },
  37. async loadScenesList({ getters: { isHostConfigured, getHostURI }, commit }) {
  38. if (!isHostConfigured) throw new Error('Host is not configured.')
  39. const URI = getHostURI
  40. const scenes = await fetch(`${URI}${API_ROUTES.listScenes()}`).then(res => res.json())
  41. commit('setListScenes', scenes.data)
  42. },
  43. setExperimentProgress({ commit }, { experimentName, sceneName, data }) {
  44. commit('setExperimentProgress', { experimentName, sceneName, data })
  45. },
  46. setExperimentDone({ commit }, { experimentName, sceneName, done = true }) {
  47. commit('setExperimentDone', { experimentName, sceneName, done })
  48. }
  49. }