Created
June 4, 2018 23:15
-
-
Save ammoti/e3e7347e1b227a43ec9dbc2599289f70 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import tkinter as tk | |
import threading | |
import socket | |
from os.path import basename | |
import os | |
from helper import * | |
import tkinter.filedialog | |
from functools import partial | |
class ClientGuiPart2: | |
def __init__(self,connection, ip, selected_prot): | |
self.base = tk.Tk() | |
self.base.title("Chat Client") | |
self.base.geometry("500x590") | |
self.base.resizable(width="false", height="false") | |
self.base.configure(bg="#716664") | |
self.filename = '' | |
self.file = b'' | |
self.c_connection = connection | |
self.c_ip = ip | |
self.c_port = 5556 | |
self.s_port = 5555 | |
self.c_protocol = selected_prot | |
self.attachedFile = None | |
if self.c_protocol == "udp": | |
self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) | |
self.client_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) | |
self.client_socket.bind(("0.0.0.0", self.c_port)) | |
elif self.c_protocol == "tcp": | |
self.client_socket = connection | |
self.chatBox = tk.Text(self.base, bd=0, height="8", width="40", font="Helvetica", ) | |
self.chatBox.config(state="disabled") | |
self.sb = tk.Scrollbar(self.base, command=self.chatBox.yview) | |
self.chatBox['yscrollcommand'] = self.sb.set | |
self.filenameLabel = tk.Label(self.base, text='no attached file', font=("Helvetica", 14)) # added | |
self.cancelButton = tk.Button(self.base, font=("Helvetica",16), text=u"Cancel Upload", width="50", height=5, | |
bd=0, activebackground="#BDE096", justify="center", | |
command=self.onCancel) # added | |
self.downloadButton = tk.Button(self.base, font=("Helvetica",16), text=u"Download File", width="50", height=5, | |
bd=0, activebackground="#BDE096", justify="center", | |
command=self.onDownload) # added | |
self.sendButton = tk.Button(self.base, font="Helvetica", text=u"SEND", width="50", height=5, | |
bd=0, activebackground="#BDE096", justify="center", | |
command=self.onClick) | |
self.selectemoji = tk.Button(self.base, font="Helvetica", text="\uD83D\uDE01", width="50", height=5, | |
bd=0, activebackground="#BDE096", justify="center", | |
command=self.onEmoji) | |
self.browseButton = tk.Button(self.base, font="Helvetica", text=u"BROWSE", width="50", height=5, | |
bd=0, activebackground="#BDE096", bg='#BDE096', justify="center", | |
command=self.onBrowse) # added | |
self.textBox = tk.Text(self.base, bd=0, width="29", height="5", font="Helvetica") | |
self.textBox.bind("<Return>", self.removeKeyboardFocus) | |
self.textBox.bind("<KeyRelease-Return>", self.onEnterButtonPressed) | |
self.sb.place(x=470, y=5, height=350) | |
self.chatBox.place(x=15, y=5, height=350, width=455) | |
self.filenameLabel.place(x=15, y=360, height=40, width=240) # added | |
self.cancelButton.place(x=325, y=410, height=40, width=160) # added | |
self.sendButton.place(x=255, y=470, height=80, width=90) | |
self.downloadButton.place(x=325, y=360, height=40, width=160) # added | |
self.selectemoji.place(x=350, y=470, height=80, width=50) | |
self.browseButton.place(x=405, y=470, height=80, width=90) # added | |
self.textBox.place(x=15, y=470, height=80, width=250) | |
threading.Thread(target=self.ReceiveData).start() | |
self.base.mainloop() | |
def ReceiveData(self): | |
if self.c_protocol == "tcp": | |
while 1: | |
#try: | |
data = self.client_socket.recv(1000) | |
if data[0] == ord('n'): # filename | |
#print('filename: ', data) | |
self.filename = data[1:].decode("utf-8") | |
self.filenameLabel['text'] = self.filename | |
self.filenameLabel['fg'] = "#1A8C2B" | |
data = '"Started file transfer"\n' | |
elif data[0] == ord('f'): # file | |
self.file += data[1:] | |
data = '' | |
continue | |
#print('file: ', self.file) | |
#data = '"Finished file transfer"\n' | |
elif data[0] == ord('t'): # text | |
print('text: ', data) | |
data = data[1:].decode("utf-8") | |
print(data) | |
#except: | |
# getConnectionInfo(self.chatBox, '\n [ Your partner left.] \n') | |
# break | |
if data != '': | |
print('data in if:', data) | |
data1 = receiveEmoji(data) | |
displayRemoteMessage(self.chatBox, data1) | |
else: | |
getConnectionInfo(self.chatBox, '\n [ Your partner left. ] \n') | |
self.client_socket.close() | |
break | |
else: | |
while 1: | |
#try: | |
data = self.client_socket.recvfrom(1000) | |
print('data: ', data) | |
if data[0] == ord('n'): # filename | |
#print('filename: ', data) | |
self.filename = data[1:].decode("utf-8") | |
self.filenameLabel['text'] = self.filename | |
self.filenameLabel['fg'] = "#1A8C2B" | |
data = '"Started file transfer"\n' | |
elif data[0] == ord('f'): # file | |
self.file += data[1:] | |
data = '' | |
continue | |
#print('file: ', self.file) | |
#data = '"Finished file transfer"\n' | |
elif data[0] == ord('t'): # text | |
print('text: ', data) | |
data = data[1:].decode("utf-8") | |
print(data) | |
#except: | |
# getConnectionInfo(self.chatBox, '\n [ Your partner left.] \n') | |
# break | |
if data != '': | |
print('data in if:', data) | |
data1 = receiveEmoji(data) | |
print("sjkdagdhasjkgdaskdhgakdsgkasgdsa\n") | |
print(data1) | |
print("sdadasdasdsa\n") | |
displayRemoteMessage(self.chatBox, data1[0]) | |
else: | |
getConnectionInfo(self.chatBox, '\n [ Your partner left. ] \n') | |
self.client_socket.close() | |
break | |
def onClick(self): | |
messageText = messageFilter(self.textBox.get("0.0", END)) | |
displayLocalMessage(self.chatBox, messageText) | |
self.chatBox.yview(END) | |
self.textBox.delete("0.0", END) | |
if self.c_protocol == "tcp": | |
if self.attachedFile: | |
messageFilename = 'n' + self.filename | |
#messageAttachedFile = 'f' + self.attachedFile | |
self.client_socket.sendall(messageFilename.encode("utf-8")) | |
byteFile = self.attachedFile | |
n = 999 | |
splicedFile = [byteFile[i:i+n] for i in range(0, len(byteFile), n)] | |
for piece in splicedFile: | |
messageAttachedFile = b'f' + piece | |
print(messageAttachedFile) | |
print("Piece sended %s"%str(piece)) | |
self.client_socket.sendall(messageAttachedFile) | |
self.onCancel() | |
#self.attachedFile = None | |
#self.filenameLabel['text'] = 'no attached file' | |
if messageText != '': | |
messageText = 't' + messageText | |
self.client_socket.sendall(sendEmoji(messageText).encode("utf-8")) | |
else: | |
#self.client_socket.sendto(sendEmoji(messageText).encode("utf-8"),(self.c_ip,self.s_port)) | |
if self.attachedFile: | |
messageFilename = 'n' + self.filename | |
#messageAttachedFile = 'f' + self.attachedFile | |
self.client_socket.sendto(messageFilename.encode("utf-8"),(self.c_ip,self.c_port)) | |
byteFile = self.attachedFile | |
n = 999 | |
splicedFile = [byteFile[i:i+n] for i in range(0, len(byteFile), n)] | |
for piece in splicedFile: | |
messageAttachedFile = b'f' + piece | |
print(messageAttachedFile) | |
print("Piece sended %s"%str(piece)) | |
self.client_socket.sendto(messageAttachedFile,(self.c_ip,self.c_port)) | |
self.onCancel() | |
#self.attachedFile = None | |
#self.filenameLabel['text'] = 'no attached file' | |
if messageText != '': | |
messageText = 't' + messageText | |
self.client_socket.sendto(sendEmoji(messageText).encode("utf-8"),(self.c_ip,self.c_port)) | |
def onEnterButtonPressed(self, event): | |
self.textBox.config(state="normal") | |
self.onClick() | |
def removeKeyboardFocus(self, event): | |
self.textBox.config(state="disabled") | |
def onEmoji(self): | |
self.base1 = tk.Tk() | |
self.base1.title("Emojis") | |
self.base1.geometry("100x150") | |
emojilist = getEmojis() | |
self.button_list = [i for i in range(len(emojilist))] | |
for k, j in emojilist.items(): | |
print(k) | |
self.button_list[k] = tk.Button(self.base1, font="Helvetica", text=j, bd=0, activebackground="#BDE096", | |
justify="left",command=partial(self.addEmoji,k)) | |
self.button_list[k].pack(side="left") | |
def addEmoji(self, ind): | |
emo = getEmoji(ind) | |
self.textBox.insert('end', emo) | |
def onBrowse(self): | |
fullpath = tk.filedialog.askopenfilename(initialdir = "/",title = "Select file") | |
f = open(fullpath, 'rb') | |
self.attachedFile = f.read() | |
#print('attachefFile: ', self.attachedFile) | |
self.filename = basename(fullpath) | |
print(self.filename) | |
self.filenameLabel['text'] = self.filename | |
self.filenameLabel['fg'] = "#1A8C2B" | |
def onCancel(self): | |
self.filenameLabel['text'] = 'no attached file' | |
self.filenameLabel['fg'] = 'black' | |
self.attachedFile = None | |
def onDownload(self): | |
fullpath = tk.filedialog.asksaveasfilename(initialdir = "/",title = "Select file",initialfile=self.filename) | |
f = open(fullpath,'wb') | |
f.write(self.file) | |
d = os.path.getsize(self.file) | |
self.file = b'' | |
print(fullpath) | |
#ClientGuiPart2(True,'127.0.0.1',5556) # added |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment