Skip to content

Instantly share code, notes, and snippets.

@ammoti
Created June 4, 2018 23:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ammoti/66245fccc4452745280cf40885223c8c to your computer and use it in GitHub Desktop.
Save ammoti/66245fccc4452745280cf40885223c8c to your computer and use it in GitHub Desktop.
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