fishspot/src/stores/websocket.js

93 lines
3.8 KiB
JavaScript

import { defineStore } from "pinia";
import { usePlayerStore } from "./player";
import { useGameStore } from "./game";
const connectionUrl = 'wss://fish-spot.game.qvinti.net/socket'
export const useWebsocketStore = defineStore("websocket", {
state: () => ({
connection: null
}),
actions: {
init(gameId) {
const player = usePlayerStore()
const game = useGameStore()
this.connection = new WebSocket(connectionUrl + "?gameId=" + gameId + "&playerId=" + player.id);
this.connection.onopen = function (event) {
console.log(event);
console.log("Successfully connected websocket server to game: " + gameId);
};
this.connection.onmessage = function (event) {
const player = usePlayerStore()
const game = useGameStore()
let data = {}
try {
data = JSON.parse(event.data)
} catch (e) {
return false;
}
switch(data.action) {
case 'connected':
console.log('Recieve connected from ' + data.from)
game.connected(data.from)
break
case 'disconnected':
if (data.from == game.owner) {
console.log("owner disconected start timer 30 sec and end game")
}
if (data.from == game.opponent.id) {
console.log("opponent disconected start timer 30 sec and end game")
}
console.log('Recieve disconnected from ' + data.from)
break
case 'sync':
console.log('Recieve sync from ' + data.from)
game.sync(data.game)
break
case 'join':
console.log('Recieve join from ' + data.from)
if (game.owner != player.id) return // Only owner ccan process join
game.join(data.from)
break
case 'welcome':
console.log('Recieve welcome from ' + data.from)
game.welcome(data.game)
break
case 'decline':
console.log('Recieve decline from ' + data.from)
break
case 'ready':
console.log('Recieve ready from ' + data.from)
game.sync(data.game)
break
case 'checkMove':
console.log('Recieve move from ' + data.from)
game.checkMove(data.targetCell)
break
case 'completeMove':
game.completeMove(data.move)
break
default:
console.error('Event data target not found')
}
};
this.connection.onclose = (event) => {
console.log("Server close websocket connection for player " + player.id);
setTimeout(function () {
console.log("Try reconnect to websocket server for player " + player.id);
useWebsocketStore().init(game.id);
}, 1000);
};
},
send(data) {
console.log('send', JSON.stringify(data) )
this.connection.send(JSON.stringify(data))
},
disconnect() {
if (this.connection == null) return
// this.connection.onclose = () => {}
// this.connection.close()
},
}
})