Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
M
Mini projet madani
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
MADANI Mohamed
Mini projet madani
Commits
1b71f92b
Commit
1b71f92b
authored
1 year ago
by
MADANI Mohamed
Browse files
Options
Downloads
Patches
Plain Diff
Upload New File
parent
ab7d1f68
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
mn.py
+90
-0
90 additions, 0 deletions
mn.py
with
90 additions
and
0 deletions
mn.py
0 → 100644
+
90
−
0
View file @
1b71f92b
import
socket
import
sys
import
json
import
keyboard
# Liste pour stocker les touches pressées pour former un message
buffer
=
[]
# Nom d'utilisateur et destination du message
user
=
""
destination
=
""
# Socket du client
client_socket
=
None
# Fonction appelée lorsqu'une touche est pressée
def
on_key_event
(
e
):
# Si Ctrl+M est pressé, on demande à l'utilisateur d'entrer le message.
if
e
.
name
==
'
m
'
and
e
.
event_type
==
'
down
'
and
keyboard
.
is_pressed
(
'
ctrl
'
):
clear_buffer
()
print
(
"
Enter your message:
"
)
keyboard
.
hook
(
capture_keys
)
# Fonction pour capturer les touches pressées et les ajouter au buffer
def
capture_keys
(
e
):
# Si Enter est pressé, on arrête de capturer les touches et on affiche le message
if
e
.
name
==
'
enter
'
and
e
.
event_type
==
'
down
'
:
keyboard
.
unhook
(
capture_keys
)
send_message
()
else
:
# Sinon, on ajoute la touche au buffer
if
e
.
name
==
'
backspace
'
:
remove_last_key
()
else
:
add_key_to_buffer
(
e
)
# Fonction pour démarrer le client
def
start_client
():
global
client_socket
global
user
global
destination
user
=
input
(
"
Enter your username:
"
)
# Demande le nom d'utilisateur
destination
=
input
(
"
Enter the destination username:
"
)
# Demande la destination du message
client_socket
=
socket
.
socket
(
socket
.
AF_INET
,
socket
.
SOCK_STREAM
)
# Crée un socket
server_address
=
(
'
localhost
'
,
int
(
sys
.
argv
[
1
]))
if
len
(
sys
.
argv
)
>
1
else
(
'
localhost
'
,
12345
)
try
:
client_socket
.
connect
(
server_address
)
# Connecte au serveur
client_socket
.
settimeout
(
1
)
# Définit une limite de temps pour la réception de données
print
(
"
Connected to server
"
)
setup_keyboard_shortcuts
()
receive_messages
()
except
ConnectionRefusedError
:
print
(
"
Connection refused. Please make sure the server is running.
"
)
# Fonction pour envoyer le message
def
send_message
():
message
=
''
.
join
(
buffer
[
1
:])
# Assemble les touches dans un message
data
=
json
.
dumps
({
"
user
"
:
user
,
"
destination
"
:
destination
,
"
message
"
:
message
})
# Formatte les données en JSON
client_socket
.
send
(
data
.
encode
(
'
utf-8
'
))
# Envoie les données au serveur
# Fonction pour recevoir les messages du serveur
def
receive_messages
():
while
True
:
try
:
res
=
client_socket
.
recv
(
1024
)
# Reçoit les données du serveur
if
res
:
print
(
f
"
Received message:
{
res
.
decode
(
'
utf-8
'
)
}
"
)
# Affiche le message reçu
except
socket
.
timeout
:
continue
# Fonction pour configurer les raccourcis clavier
def
setup_keyboard_shortcuts
():
keyboard
.
add_hotkey
(
'
ctrl+q
'
,
lambda
:
sys
.
exit
(
0
))
# Permet de quitter le programme avec Ctrl+Q
keyboard
.
on_press
(
on_key_event
)
# Déclenche la fonction on_key_event lorsqu'une touche est pressée
# Fonction pour ajouter une touche au buffer
def
add_key_to_buffer
(
e
):
buffer
.
append
({
"
space
"
:
"
"
,
"
backspace
"
:
""
}.
get
(
e
.
name
,
e
.
name
))
# Fonction pour supprimer la dernière touche du buffer
def
remove_last_key
():
if
buffer
:
buffer
.
pop
()
# Supprime la dernière touche si c'est "backspace"
# Fonction pour effacer le buffer
def
clear_buffer
():
buffer
.
clear
()
if
__name__
==
"
__main__
"
:
start_client
()
# Lance le client
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment