-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclientFinal.py
More file actions
129 lines (99 loc) · 3.27 KB
/
clientFinal.py
File metadata and controls
129 lines (99 loc) · 3.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/usr/bin/python3
import socket, sys, threading, tkinter as tk, time,queue
PORT = 5089
HOST = socket.gethostname()
messageToSend = queue.Queue()
class ClientSender(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def setMessage(self, message):
self.message = message
def run(self):
print("Ready to broadcast")
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
address = HOST, PORT
self.socket.connect(address)
self.socket.send(self.message.encode())
print(self.message)
return
class ClientListener(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
address = HOST, PORT
self.socket.connect(address)
while(True):
#print("Listening")
if not messageToSend.empty():
sendMsg()
time.sleep(1)
class Gui(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def exitClick(self, event):
exit(0)
def sendMessageClick(self, event, textField):
print(textField.get())
textField.delete(0, "end") #clears textField
def run(self):
root = tk.Tk()
root.title("Laucer's chat")
root.minsize(600,400)
root.bind("<Return>", lambda event: self.sendMessageClick(event,textField) ) #enter
mainFrame = tk.Frame(root)
mainFrame.grid(row=0, column=0, sticky=tk.N + tk.S + tk.W + tk.E)
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)
#ChatField
chat = tk.Text(mainFrame)
chat.insert('end', 'some text')
chat.configure(state = "disabled") #nie mozna po tym pisac
chat.grid(column=0, row=0, sticky=tk.N + tk.S + tk.W + tk.E)
#TextFieldToSend
textField = tk.Entry(mainFrame)
textField.grid(column=0, row=1, sticky=tk.N + tk.S + tk.W + tk.E)
#SendMessageButton
buttonSend = tk.Button(mainFrame)
buttonSend["text"] = "Send Message"
buttonSend.grid(column=0, row=2, sticky=tk.N + tk.S + tk.W + tk.E)
buttonSend.bind("<Button-1>", lambda event: self.sendMessageClick(event,textField))
#usersPanel
usersPanel= tk.Listbox(mainFrame)
usersPanel.insert(1, "ALL")
usersPanel.grid(column=2, row=0, sticky=tk.N + tk.S + tk.W + tk.E)
#ExitButton
buttonExit = tk.Button(mainFrame)
buttonExit["text"] = "Exit"
buttonExit["background"] = "gray"
buttonExit.grid(column=2, row=2, sticky=tk.N + tk.S + tk.W + tk.E)
buttonExit.bind("<Button-1>", self.exitClick)
root.mainloop()
class getUsername(threading.Thread):
def __init__(self):
window = tk.Tk()
window.title = ("Log-In")
usernametext = tk.Label(window, text="Username")
usernameguess = tk.Entry(window)
loginButton = tk.Button(text = "Login")
loginButton.bind("<Button-1>", lambda event: self.loginClick(event,usernameguess,window))
usernametext.pack()
usernameguess.pack()
loginButton.pack()
window.mainloop()
def loginClick(self, event, usernameguess,window):
message = "0 "
message += usernameguess.get()
messageToSend.put(message)
window.destroy()
def sendMsg():
message = messageToSend.get()
clientSender = ClientSender()
clientSender.setMessage(message)
clientSender.start()
getUsr = getUsername()
GuiThread = Gui()
GuiThread.start()
clientListenerThread = ClientListener()
clientListenerThread.daemon = True
clientListenerThread.start()