Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
Menteur
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PLN
Menteur
Commits
98e612aa
Unverified
Commit
98e612aa
authored
5 years ago
by
PLN (Algolia)
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: Display Players
parent
fe4f7dc4
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
214 additions
and
45 deletions
+214
-45
App.vue
client/src/App.vue
+40
-7
Sockets.vue
client/src/Sockets.vue
+22
-11
Hand.vue
client/src/components/Hand.vue
+1
-1
Player.vue
client/src/components/Player.vue
+19
-0
vuex-store.js
client/src/vuex-store.js
+81
-0
encoding.py
server/encoding.py
+40
-19
lobby.py
server/game/lobby.py
+8
-4
message.py
server/game/message.py
+1
-0
ws.py
server/ws.py
+2
-3
No files found.
client/src/App.vue
View file @
98e612aa
<
template
>
<
template
>
<div
id=
"app"
>
<div
id=
"app"
>
<h2
id=
"header"
>
Salut
{{
name
}}
!
</h2>
<h2
id=
"header"
>
Salut
{{
name
}}
!
</h2>
<Sockets
/>
<Sockets
v-on:message=
"newMessage($event)"
/>
<div
id=
"players"
>
<p>
{{
players
.
length
}}
en ligne :
</p>
<div
v-for=
"player in players"
v-bind:key=
"player + ''"
>
<Player
:name=
"player"
/>
</div>
</div>
<div
id=
"game"
>
<div
id=
"game"
>
<Hand
:cards=
"mockCards()"
/>
<label
for=
"messages"
>
Choose a message:
</label>
<label
for=
"messages"
>
Choose a message:
</label>
<select
v-model=
"message"
name=
"message"
id=
"messages"
>
<select
v-model=
"message"
name=
"message"
id=
"messages"
>
<option
value=
"WAITING"
>
J'attends
</option>
<option
value=
"WAITING"
>
J'attends
</option>
...
@@ -12,6 +18,7 @@
...
@@ -12,6 +18,7 @@
<option
value=
"MENTEUR"
>
Menteur !
</option>
<option
value=
"MENTEUR"
>
Menteur !
</option>
</select>
</select>
<button
v-on:click=
"sendMessage(message)"
>
Envoyer
</button>
<button
v-on:click=
"sendMessage(message)"
>
Envoyer
</button>
<Hand
:cards=
"currentCards()"
/>
</div>
</div>
</div>
</div>
</
template
>
</
template
>
...
@@ -22,6 +29,7 @@ import "es6-promise/auto"; // Needed for Promise polyfill
...
@@ -22,6 +29,7 @@ import "es6-promise/auto"; // Needed for Promise polyfill
import
VueSocketIO
from
"vue-socket.io"
;
import
VueSocketIO
from
"vue-socket.io"
;
import
Vuex
,
{
mapGetters
,
mapMutations
}
from
"vuex"
;
import
Vuex
,
{
mapGetters
,
mapMutations
}
from
"vuex"
;
import
Hand
from
"./components/Hand"
;
import
Hand
from
"./components/Hand"
;
import
Player
from
"./components/Player"
;
import
Sockets
from
"./Sockets"
;
import
Sockets
from
"./Sockets"
;
import
{
store
}
from
"./vuex-store"
;
import
{
store
}
from
"./vuex-store"
;
import
{
BootstrapVue
,
IconsPlugin
}
from
"bootstrap-vue"
;
import
{
BootstrapVue
,
IconsPlugin
}
from
"bootstrap-vue"
;
...
@@ -42,13 +50,14 @@ Vue.use(
...
@@ -42,13 +50,14 @@ Vue.use(
mutationPrefix
:
"SOCKET_"
mutationPrefix
:
"SOCKET_"
},
},
options
:
{
path
:
"/socket.io/"
}
//Optional options
options
:
{
path
:
"/socket.io/"
}
//Optional options
})
})
,
store
);
);
export
default
{
export
default
{
name
:
"App"
,
name
:
"App"
,
store
:
store
,
store
:
store
,
components
:
{
components
:
{
Player
,
Sockets
,
Sockets
,
Hand
Hand
},
},
...
@@ -58,18 +67,42 @@ export default {
...
@@ -58,18 +67,42 @@ export default {
};
};
},
},
computed
:
{
computed
:
{
...
mapGetters
([
"isConnected"
,
"name"
,
"socketMessage"
])
...
mapGetters
([
"isConnected"
,
"name"
,
"text"
,
"cards"
,
"players"
,
"socketMessage"
])
},
},
methods
:
{
methods
:
{
sendMessage
:
function
(
message
)
{
sendMessage
:
function
(
message
)
{
console
.
log
(
"User wants to send"
,
message
);
console
.
log
(
"User wants to send"
,
message
);
this
.
$socket
.
emit
(
"message"
,
message
);
this
.
$socket
.
emit
(
"message"
,
message
);
},
},
newMessage
:
function
(
data
)
{
console
.
log
(
"App received new state:"
,
data
.
data
);
this
.
handleState
(
data
);
},
handleState
:
function
(
data
)
{
console
.
log
(
"hS: "
,
data
);
if
(
data
.
message
===
"NewGame"
)
{
console
.
log
(
"New Game!"
);
}
},
currentCards
()
{
let
currentState
=
this
.
socketMessage
;
console
.
log
(
"curCards! state now:"
,
currentState
);
if
(
currentState
[
"data"
])
{
if
(
currentState
[
"data"
][
"cards"
])
{
console
.
log
(
"Setting cards..."
);
return
this
.
cards
;
}
else
return
this
.
mockCards
();
}
else
return
this
.
mockCards
();
// console.log("Current socket.sMs now:", Sockets.sockets.socketMessages);
},
mockCards
()
{
mockCards
()
{
return
[
return
[
{
value
:
"ace"
,
color
:
"hearts"
},
//
{ value: "ace", color: "hearts" },
{
value
:
"ace"
,
color
:
"clubs"
},
//
{ value: "ace", color: "clubs" },
{
value
:
"ace"
,
color
:
"diamonds"
},
//
{ value: "ace", color: "diamonds" },
{
value
:
"ace"
,
color
:
"spades"
}
{
value
:
"ace"
,
color
:
"spades"
}
];
];
},
},
...
...
This diff is collapsed.
Click to expand it.
client/src/Sockets.vue
View file @
98e612aa
...
@@ -9,11 +9,14 @@
...
@@ -9,11 +9,14 @@
<p
v-if=
"!isConnected"
>
We're not connected yet...
</p>
<p
v-if=
"!isConnected"
>
We're not connected yet...
</p>
<div
v-if=
"socketMessages.length >= 1"
>
<div
v-if=
"socketMessages.length >= 1"
>
<p>
Messages from server"
</p>
<p>
Messages from server:
</p>
<b-list-group
horizontal=
""
>
<b-list-group-item
v-for=
"m in socketMessages.slice(-8)"
:key=
"m + ''"
>
{{
m
.
data
.
state
}}
<div
v-if=
"m.data.extras"
>
Extras:
{{
m
.
data
.
extras
}}
</div>
</b-list-group-item>
</b-list-group>
<ul
id=
"messages"
>
<ul
id=
"messages"
>
<li
v-for=
"message in socketMessages.slice(-20)"
:key=
"message"
>
{{
message
}}
</li>
</ul>
</ul>
</div>
</div>
</div>
</div>
...
@@ -32,7 +35,7 @@ export default {
...
@@ -32,7 +35,7 @@ export default {
connect
()
{
connect
()
{
// Fired when the socket connects.
// Fired when the socket connects.
this
.
isConnected
=
true
;
this
.
isConnected
=
true
;
console
.
log
(
"login"
);
console
.
log
(
"
login"
);
},
},
disconnect
()
{
disconnect
()
{
this
.
isConnected
=
false
;
this
.
isConnected
=
false
;
...
@@ -40,9 +43,12 @@ export default {
...
@@ -40,9 +43,12 @@ export default {
this
.
socketMessages
=
[];
this
.
socketMessages
=
[];
},
},
// Fired when the server sends something on the "messageChannel" channel.
// Fired when the server sends something on the "messageChannel" channel.
messageChannel
(
data
)
{
messageChannel
(
message
)
{
this
.
socketMessages
.
push
(
data
);
message
=
{
data
:
JSON
.
parse
(
message
),
received
:
new
Date
().
toISOString
()
};
console
.
log
(
"Message received:"
,
data
,
"!"
);
console
.
log
(
"S.mC| Message augmented:"
,
message
);
this
.
socketMessages
.
push
(
message
);
this
.
$store
.
commit
(
"message"
,
message
);
this
.
$emit
(
"message"
,
message
);
}
}
},
},
...
@@ -64,8 +70,13 @@ export default {
...
@@ -64,8 +70,13 @@ export default {
},
},
logOff
()
{
logOff
()
{
this
.
$socket
.
ondisconnect
();
this
.
$socket
.
ondisconnect
();
this
.
socketMessage
=
[];
this
.
socketMessage
s
=
[];
}
}
}
}
};
};
</
script
>
</
script
>
\ No newline at end of file
<
style
>
.list-group-item
{
font-size
:
small
;
}
</
style
>
\ No newline at end of file
This diff is collapsed.
Click to expand it.
client/src/components/Hand.vue
View file @
98e612aa
<
template
>
<
template
>
<div
id=
"hand"
>
<div
id=
"hand"
class=
"mr-5 ml-5"
>
<h3>
Tu as
<b>
{{
count
()
}}
</b>
cartes en main.
</h3>
<h3>
Tu as
<b>
{{
count
()
}}
</b>
cartes en main.
</h3>
<b-card-group
deck
>
<b-card-group
deck
>
<Card
<Card
...
...
This diff is collapsed.
Click to expand it.
client/src/components/Player.vue
0 → 100644
View file @
98e612aa
<
template
>
<div
id=
"player"
class=
"mr-5 ml-5"
>
<b-badge
:variant=
"Math.random() >= 0.5? 'dark' : 'danger'"
>
Player
{{
name
}}
</b-badge>
</div>
</
template
>
<
script
>
console
.
log
(
"Init player!"
);
export
default
{
name
:
"Player"
,
components
:
{},
props
:
{
name
:
String
},
methods
:
{}
};
</
script
>
\ No newline at end of file
This diff is collapsed.
Click to expand it.
client/src/vuex-store.js
0 → 100644
View file @
98e612aa
import
Vue
from
"vue"
;
import
Vuex
from
"vuex"
;
Vue
.
use
(
Vuex
);
export
const
store
=
new
Vuex
.
Store
({
state
:
{
isConnected
:
false
,
name
:
"Menteur inconnu"
,
text
:
"none"
,
socketMessage
:
""
,
gameState
:
"RESET"
,
cards
:
[],
players
:
[]
},
getters
:
{
isConnected
:
state
=>
state
.
isConnected
,
name
:
state
=>
state
.
name
,
socketMessage
:
state
=>
state
.
socketMessage
,
players
:
state
=>
state
.
players
,
gameState
:
state
=>
state
.
gameState
},
mutations
:
{
SOCKET_CONNECT
(
state
)
{
state
.
isConnected
=
true
;
},
SOCKET_DISCONNECT
(
state
)
{
state
.
isConnected
=
false
;
},
SOCKET_MESSAGECHANNEL
(
state
,
message
)
{
state
.
socketMessage
=
message
;
console
.
log
(
"SMC| Current state now:"
,
state
.
socketMessage
);
},
name
(
state
,
name
)
{
state
.
name
=
name
;
},
text
(
state
,
text
)
{
state
.
text
=
text
;
},
gameState
(
state
,
gameState
)
{
state
.
gameState
=
gameState
;
},
cards
(
state
,
cards
)
{
state
.
cards
=
cards
;
},
message
(
state
,
message
)
{
state
.
socketMessage
=
message
;
console
.
log
(
"storeMess| Current message now:"
+
JSON
.
stringify
(
message
));
if
(
message
)
{
if
(
message
.
data
)
{
let
players
=
message
.
data
.
players
;
let
gameState
=
message
.
data
.
state
;
let
text
=
message
.
data
.
text
;
let
extras
=
message
.
data
.
extras
;
if
(
players
)
{
console
.
log
(
"Setting players:"
,
players
);
state
.
players
=
players
;
}
if
(
gameState
)
{
console
.
log
(
"Setting state:"
,
gameState
);
state
.
state
=
gameState
;
}
if
(
text
)
{
console
.
log
(
"Setting text:"
,
text
);
state
.
text
=
text
;
}
if
(
extras
)
{
console
.
log
(
"Extras: "
,
extras
)
let
name
=
extras
.
name
;
if
(
name
)
{
console
.
log
(
"Setting name:"
,
name
);
state
.
name
=
name
;
}
}
}
}
}
}
});
This diff is collapsed.
Click to expand it.
server/encoding.py
View file @
98e612aa
...
@@ -2,28 +2,50 @@ from server.model.color import Color
...
@@ -2,28 +2,50 @@ from server.model.color import Color
from
server.model.value
import
Value
from
server.model.value
import
Value
def
encode_value
(
v
:
Value
):
def
encode_value
(
v
:
Value
,
lang
=
"en"
):
return
{
if
lang
==
"fr"
:
"Two"
:
"Deux"
,
return
{
"Three"
:
"Trois"
,
"Two"
:
"Deux"
,
"Four"
:
"Quatre"
,
"Three"
:
"Trois"
,
"Five"
:
"Cinq"
,
"Four"
:
"Quatre"
,
"Six"
:
"Six"
,
"Five"
:
"Cinq"
,
"Seven"
:
"Sept"
,
"Six"
:
"Six"
,
"Eight"
:
"Huit"
,
"Seven"
:
"Sept"
,
"Nine"
:
"Neuf"
,
"Eight"
:
"Huit"
,
"Ten"
:
"Dix"
,
"Nine"
:
"Neuf"
,
"Jack"
:
"Valet"
,
"Ten"
:
"Dix"
,
"Queen"
:
"Dame"
,
"Jack"
:
"Valet"
,
"King"
:
"Roi"
,
"Queen"
:
"Dame"
,
"Ace"
:
"As"
"King"
:
"Roi"
,
}[
v
.
name
]
"Ace"
:
"As"
}[
v
.
name
]
else
:
return
{
"Two"
:
"2"
,
"Three"
:
"3"
,
"Four"
:
"4"
,
"Five"
:
"5"
,
"Six"
:
"6"
,
"Seven"
:
"7"
,
"Eight"
:
"8"
,
"Nine"
:
"9"
,
"Ten"
:
"10"
,
"Jack"
:
"jack"
,
"Queen"
:
"queen"
,
"King"
:
"king"
,
"Ace"
:
"ace"
}[
v
.
name
]
def
encode_color
(
c
:
Color
):
def
encode_color
(
c
:
Color
,
lang
=
"en"
):
return
{
return
{
"Hearts"
:
"Coeur"
,
"Hearts"
:
"Coeur"
,
"Spades"
:
"Pique"
,
"Spades"
:
"Pique"
,
"Clubs"
:
"Trèfle"
,
"Clubs"
:
"Trèfle"
,
"Diamonds"
:
"Carreau"
"Diamonds"
:
"Carreau"
}[
c
.
name
]
}[
c
.
name
]
if
lang
==
"fr"
else
{
\ No newline at end of file
"Hearts"
:
"hearts"
,
"Spades"
:
"spades"
,
"Clubs"
:
"clubs"
,
"Diamonds"
:
"diamonds"
}[
c
.
name
]
This diff is collapsed.
Click to expand it.
server/game/lobby.py
View file @
98e612aa
...
@@ -38,12 +38,12 @@ class LobbyManager(ClientManager):
...
@@ -38,12 +38,12 @@ class LobbyManager(ClientManager):
def
players_ready
(
self
):
def
players_ready
(
self
):
return
[
self
.
lobby
[
k
]
for
k
,
m
in
self
.
metadata
.
items
()
if
m
.
ready
]
return
[
self
.
lobby
[
k
]
for
k
,
m
in
self
.
metadata
.
items
()
if
m
.
ready
]
def
new_player
(
self
,
player
:
Player
,
sid
:
str
)
->
str
:
async
def
new_player
(
self
,
player
:
Player
,
sid
:
str
)
->
None
:
self
.
lobby
[
player
.
name
]
=
player
self
.
lobby
[
player
.
name
]
=
player
self
.
players
.
append
(
player
)
self
.
players
.
append
(
player
)
self
.
metadata
[
player
.
name
]
=
Metadata
(
sid
=
sid
)
self
.
metadata
[
player
.
name
]
=
Metadata
(
sid
=
sid
)
print
(
f
"Added {player} to a lobby with {len(self.lobby)} players."
)
print
(
f
"Added {player} to a lobby with {len(self.lobby)} players."
)
return
f
"Bienvenu, {player}! Il y a {len(self.lobby)} joueurs en ligne."
await
self
.
send
(
to
=
player
,
message
=
MessageToPlayer
.
Welcome
,
extras
=
{
"name"
:
player
.
name
})
def
wants_to_play
(
self
,
player
:
Player
):
def
wants_to_play
(
self
,
player
:
Player
):
"""
"""
...
@@ -98,9 +98,10 @@ class LobbyManager(ClientManager):
...
@@ -98,9 +98,10 @@ class LobbyManager(ClientManager):
async
def
send
(
self
,
to
:
Player
,
message
:
MessageToPlayer
,
extras
=
None
):
async
def
send
(
self
,
to
:
Player
,
message
:
MessageToPlayer
,
extras
=
None
):
sid
=
self
.
metadata
[
to
.
name
]
.
sid
sid
=
self
.
metadata
[
to
.
name
]
.
sid
data
=
{
"message"
:
str
(
message
.
name
)}
data
=
{
"state"
:
str
(
message
.
name
),
"players"
:
[
p
.
name
for
p
in
self
.
players
]}
if
extras
:
if
extras
:
data
[
"extra"
]
=
extras
data
[
"extra
s
"
]
=
extras
print
(
f
"MSGOUT|{sid} ({to.name}), {data}"
)
print
(
f
"MSGOUT|{sid} ({to.name}), {data}"
)
await
self
.
sio
.
emit
(
'messageChannel'
,
json
.
dumps
(
data
),
room
=
sid
)
await
self
.
sio
.
emit
(
'messageChannel'
,
json
.
dumps
(
data
),
room
=
sid
)
...
@@ -109,6 +110,9 @@ class LobbyManager(ClientManager):
...
@@ -109,6 +110,9 @@ class LobbyManager(ClientManager):
message
=
None
message
=
None
extras
=
{
"players"
:
[
p
.
name
for
p
in
self
.
players
]}
extras
=
{
"players"
:
[
p
.
name
for
p
in
self
.
players
]}
sender
=
self
.
which_player
(
sid
)
sender
=
self
.
which_player
(
sid
)
if
not
sender
:
print
(
f
"ERROR: Unrecognized sender {sid}"
)
return
print
(
f
"MSGIN| {sid} ({sender.name}): {data}."
)
print
(
f
"MSGIN| {sid} ({sender.name}): {data}."
)
...
...
This diff is collapsed.
Click to expand it.
server/game/message.py
View file @
98e612aa
...
@@ -2,6 +2,7 @@ from enum import Enum
...
@@ -2,6 +2,7 @@ from enum import Enum
class
MessageToPlayer
(
Enum
):
class
MessageToPlayer
(
Enum
):
Welcome
=
"WELCOME"
Waiting
=
"WAITING_ROOM"
Waiting
=
"WAITING_ROOM"
ReadyToStart
=
"READY_ROOM"
ReadyToStart
=
"READY_ROOM"
NewGame
=
"NEW_GAME"
NewGame
=
"NEW_GAME"
...
...
This diff is collapsed.
Click to expand it.
server/ws.py
View file @
98e612aa
...
@@ -39,8 +39,7 @@ class ClientPlayer(Player):
...
@@ -39,8 +39,7 @@ class ClientPlayer(Player):
async
def
connect
(
sid
,
environ
):
async
def
connect
(
sid
,
environ
):
print
(
"[WS] Connect "
,
sid
,
environ
)
print
(
"[WS] Connect "
,
sid
,
environ
)
player
=
ClientPlayer
(
lobby
)
player
=
ClientPlayer
(
lobby
)
reply
:
str
=
lobby
.
new_player
(
player
,
sid
)
await
lobby
.
new_player
(
player
,
sid
)
await
sio
.
emit
(
'messageChannel'
,
reply
,
room
=
sid
)
@sio.event
@sio.event
...
@@ -52,7 +51,7 @@ async def message(sid, data):
...
@@ -52,7 +51,7 @@ async def message(sid, data):
@sio.on
(
"pingServer"
)
@sio.on
(
"pingServer"
)
async
def
ping_server
(
sid
,
data
):
async
def
ping_server
(
sid
,
data
):
print
(
"[WS] Ping received:"
,
data
)
print
(
"[WS] Ping received:"
,
data
)
await
sio
.
emit
(
'messageChannel'
,
"PONG"
,
room
=
sid
)
await
sio
.
emit
(
'messageChannel'
,
'{"extras":{"message":"PONG"}}'
,
room
=
sid
)
@sio.event
@sio.event
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment