Created
June 4, 2018 23:15
-
-
Save ammoti/66245fccc4452745280cf40885223c8c 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 | |
from helper import * | |
import threading | |
import socket | |
from os.path import basename | |
import tkinter.filedialog | |
import time | |
from functools import partial | |
import os | |
class ServerGuiPart2: | |
def __init__(self,connection, ip, selected_prot): | |
self.base = tk.Tk() | |
self.base.title("Chat Server") | |
self.base.geometry("500x590") | |
self.base.resizable(width="false", height="false") | |
self.base.resizable(width="false", height="false") | |
self.base.configure(bg="#716664") | |
self.filename = '' | |
self.file = b'' | |
self.s_connection = connection | |
self.s_ip = ip | |
self.s_port = 5555 | |
self.c_port = 5556 | |
self.s_protocol = selected_prot | |
if self.s_protocol == "udp": | |
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) | |
self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) | |
self.server_socket.bind(("0.0.0.0",self.s_port)) | |
elif self.s_protocol == "tcp": | |
self.server_socket = connection | |
threading.Thread(target=self.ReceiveData).start() | |
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.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.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.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.downloadButton.place(x=325, y=360, height=40, width=160) # added | |
self.sendButton.place(x=255, y=470, height=80, width=90) | |
self.cancelButton.place(x=325, y=410, height=40, width=160) # added | |
self.selectemoji.place(x=350, y=470, height=80, width=50) | |
#self.browseButton.place(x=405, y=420, height=80, width=90) # added | |
self.browseButton.place(x=405, y=470, height=80, width=90) # added | |
self.textBox.place(x=15, y=470, height=80, width=250) | |
self.base.mainloop() | |
def ReceiveData(self): | |
if self.s_protocol == "tcp": | |
while 1: | |
#try: | |
data = self.server_socket.recv(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) | |
displayRemoteMessage(self.chatBox, data1) | |
else: | |
getConnectionInfo(self.chatBox, '\n [ Your partner left. ] \n') | |
self.server_socket.close() | |
break | |
else: | |
while 1: | |
#try: | |
data = self.server_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].decode("utf-8")) | |
else: | |
getConnectionInfo(self.chatBox, '\n [ Your partner left. ] \n') | |
self.server_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.s_protocol == "tcp": | |
if self.attachedFile: | |
messageFilename = 'n' + self.filename | |
#messageAttachedFile = 'f' + self.attachedFile | |
self.server_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.server_socket.sendall(messageAttachedFile) | |
self.onCancel() | |
#self.attachedFile = None | |
#self.filenameLabel['text'] = 'no attached file' | |
if messageText != '': | |
messageText = 't' + messageText | |
self.server_socket.sendall(sendEmoji(messageText).encode("utf-8")) | |
else: | |
#self.server_socket.sendto(sendEmoji(messageText).encode("utf-8"),(self.s_ip,self.s_port)) | |
if self.attachedFile: | |
messageFilename = 'n' + self.filename | |
#messageAttachedFile = 'f' + self.attachedFile | |
self.server_socket.sendto(messageFilename.encode("utf-8"),(self.s_ip,self.s_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.server_socket.sendto(messageAttachedFile,(self.s_ip,self.s_port)) | |
self.onCancel() | |
#self.attachedFile = None | |
#self.filenameLabel['text'] = 'no attached file' | |
if messageText != '': | |
messageText = 't' + messageText | |
self.server_socket.sendto(sendEmoji(messageText).encode("utf-8"),(self.s_ip,self.s_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) | |
tk.Button(self.base1, font="Helvetica", text=j, bd=0, activebackground="#BDE096", justify="left", | |
command=partial(self.addEmoji,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) | |
t3 = time.time() | |
self.file = b'' | |
print(fullpath) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment