From 90959bcc623d8472e593e6eacba4a3c5e0df603b Mon Sep 17 00:00:00 2001 From: Alberto Xamin Date: Mon, 30 Nov 2020 12:48:43 +0100 Subject: [PATCH] join by url --- backend/__init__.py | 18 ++++- frontend/package.json | 2 + frontend/src/App.vue | 102 +------------------------ frontend/src/components/Lobby.vue | 24 +++--- frontend/src/components/Menu.vue | 121 ++++++++++++++++++++++++++++++ frontend/src/main.js | 6 +- frontend/src/router/index.js | 25 ++++++ frontend/yarn.lock | 7 +- 8 files changed, 192 insertions(+), 113 deletions(-) create mode 100644 frontend/src/components/Menu.vue create mode 100644 frontend/src/router/index.js diff --git a/backend/__init__.py b/backend/__init__.py index d83e0e6..eb4516d 100644 --- a/backend/__init__.py +++ b/backend/__init__.py @@ -38,8 +38,22 @@ def set_username(sid, username): advertise_lobbies() @sio.event -def my_message(sid, data): - print('message ', data) +def get_me(sid, room): + if isinstance(sio.get_session(sid), Player): + sio.emit('me', data=sio.get_session(sid).name, room=sid) + if sio.get_session(sid).game: + sio.get_session(sid).game.notify_room() + else: + sio.save_session(sid, Player('player', sid, sio)) + de_games = [g for g in games if g.name == room['name']] + if len(de_games) == 1 and not de_games[0].started: + join_room(sid, room) + else: + create_room(sid, room['name']) + if sio.get_session(sid).game == None: + sio.emit('me', data={'error':'Wrong password/Cannot connect'}, room=sid) + else: + sio.emit('me', data=sio.get_session(sid).name, room=sid) @sio.event def disconnect(sid): diff --git a/frontend/package.json b/frontend/package.json index b2d3ee7..37bb0a6 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,12 +14,14 @@ "socket.io-client": "^3.0.3", "vue": "^2.6.11", "vue-i18n": "^8.22.2", + "vue-router": "^3.2.0", "vue-socket.io": "^3.0.10" }, "devDependencies": { "@vue/cli-plugin-babel": "~4.5.0", "@vue/cli-plugin-eslint": "~4.5.0", "@vue/cli-plugin-pwa": "~4.5.0", + "@vue/cli-plugin-router": "~4.5.0", "@vue/cli-service": "~4.5.0", "babel-eslint": "^10.1.0", "eslint": "^6.7.2", diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 0a038b2..36179cc 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,36 +1,7 @@ diff --git a/frontend/src/components/Lobby.vue b/frontend/src/components/Lobby.vue index 7df15f0..90e35bf 100644 --- a/frontend/src/components/Lobby.vue +++ b/frontend/src/components/Lobby.vue @@ -64,10 +64,8 @@ export default { TinyHand, PrettyCheck, }, - props: { - username: String - }, data: () => ({ + username: '', lobbyName: '', started: false, players: [], @@ -104,15 +102,17 @@ export default { console.log(data) this.players = data }, - // self_vis(vis) { - // console.log('received visibility update') - // console.log(vis) - // this.players = JSON.parse(vis) - // }, + me(username) { + if (username.error) { + alert(username.error) + this.$router.push('/') + } + this.username = username + }, }, computed: { isRoomOwner() { - return this.players[0].name == this.username + return this.players.length > 0 && this.players[0].name == this.username }, startGameCard() { if (!this.started && this.players.length > 2 && this.isRoomOwner) { @@ -201,7 +201,11 @@ export default { privateRoom() { this.$socket.emit('private') } - } + }, + mounted() { + console.log('mounted lobby') + this.$socket.emit('get_me', {name:this.$route.query.code, password:this.$route.query.pwd}) + }, } diff --git a/frontend/src/components/Menu.vue b/frontend/src/components/Menu.vue new file mode 100644 index 0000000..bfca566 --- /dev/null +++ b/frontend/src/components/Menu.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/frontend/src/main.js b/frontend/src/main.js index 981abaf..34fea7e 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -16,6 +16,7 @@ Vue.use(VueI18n) import { languages, defaultLocale } from './i18n'; import './registerServiceWorker' +import router from './router' const messages = Object.assign(languages) const i18n = new VueI18n({ @@ -24,6 +25,7 @@ const i18n = new VueI18n({ }) new Vue({ - i18n, - render: h => h(App), + i18n, + router, + render: h => h(App) }).$mount('#app') diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js new file mode 100644 index 0000000..d9500d1 --- /dev/null +++ b/frontend/src/router/index.js @@ -0,0 +1,25 @@ +import Vue from 'vue' +import VueRouter from 'vue-router' + +Vue.use(VueRouter) + +const routes = [ + { + path: '/game', + name: 'Game', + component: () => import(/* webpackChunkName: "game" */ '../components/Lobby.vue') + }, + { + path: '/', + name: 'Home', + component: () => import(/* webpackChunkName: "game" */ '../components/Menu.vue') + }, +] + +const router = new VueRouter({ + mode: 'history', + base: process.env.BASE_URL, + routes +}) + +export default router diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 2f4a6d5..cd61371 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -1263,7 +1263,7 @@ webpack "^4.0.0" workbox-webpack-plugin "^4.3.1" -"@vue/cli-plugin-router@^4.5.9": +"@vue/cli-plugin-router@^4.5.9", "@vue/cli-plugin-router@~4.5.0": version "4.5.9" resolved "https://registry.npm.taobao.org/@vue/cli-plugin-router/download/@vue/cli-plugin-router-4.5.9.tgz?cache=0&sync_timestamp=1605594512666&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-plugin-router%2Fdownload%2F%40vue%2Fcli-plugin-router-4.5.9.tgz#b3d23a8083d26a81bd09bf9c8d010a3e4e4b13d0" integrity sha1-s9I6gIPSaoG9Cb+cjQEKPk5LE9A= @@ -8475,6 +8475,11 @@ vue-loader@^15.9.2: vue-hot-reload-api "^2.3.0" vue-style-loader "^4.1.0" +vue-router@^3.2.0: + version "3.4.9" + resolved "https://registry.npm.taobao.org/vue-router/download/vue-router-3.4.9.tgz?cache=0&sync_timestamp=1606723745188&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-router%2Fdownload%2Fvue-router-3.4.9.tgz#c016f42030ae2932f14e4748b39a1d9a0e250e66" + integrity sha1-wBb0IDCuKTLxTkdIs5odmg4lDmY= + vue-socket.io@^3.0.10: version "3.0.10" resolved "https://registry.yarnpkg.com/vue-socket.io/-/vue-socket.io-3.0.10.tgz#76135bf5043baf484c648636a7a9822b4c11c084"