its a P2P style Chat Application with the ability to draw on your friends white board
Code: Select all
from Tkinter import *
import socket
from threading import *
import cPickle
CMD_MSG, CMD_LINE = range(2)
def server():
port = 9000
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((socket.gethostbyname(socket.gethostname()), int(port)))
#print socket.gethostbyname(socket.gethostname())
while True:
msg, addr = s.recvfrom(2024)
cmd, msg = ord(msg[0]),msg[1:]
if cmd == CMD_LINE: #DRAW A LINE
dx,dy,ex,ey=cPickle.loads(msg)
canvas.create_line(dx,dy,ex,ey,width=2, fill="red")
elif cmd == CMD_MSG:
listb1.insert(END, str(msg) + "\n")
def saveit():
try:
output1 = listb1.get(1.0, END)
str(output1)
try:
filename = tkFileDialog.asksaveasfilename()
except:
pass
entry2.insert(END, filename)
fileit = open(filename, "w")
fileit.write(output1)
except:
listb1.insert(END, "Failed Saving Data\n")
def client(msg):
port = 9000
host = str(entryhost.get())
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.sendto(str(username.get)+" : " + msg, (host, int(port)))
def move(e):
global lastLine,mx,my
canvas.delete(lastLine)
mx, my = e.x, e.y
# draw a new temp line
lastLine = canvas.create_line(dx,dy,mx,my,width=2,fill='Black')
def bdown(e):
global lastLine,dx,dy,mx,my
canvas.bind('<Motion>', move) #start receiving move msgs
dx,dy=e.x,e.y
mx,my=e.x,e.y
# draw a temp line
lastLine = canvas.create_line(dx,dy,mx,my,width=2,fill='Black')
def bup(e):
#canvas.delete(lastLine)
canvas.unbind('<Motion>')
#send out the draw-a-line command
client(chr(CMD_LINE)+cPickle.dumps((dx,dy,e.x,e.y),1))
def sendit(foo):
client(chr(CMD_MSG) + str(textboxsend.get()))
listb1.insert(1.0, str(textboxsend.get()) + "\n")
textboxsend.delete(0, END)
root = Tk()
root.title("Simple P2P Chat App")
root.wm_resizable(0, 0)
root.minsize(550, 400)
#root.wm_iconbitmap("shinobi.ico")
#root.option_readfile("optionDB")
mythread = Thread(target=server)
mythread.start()
frame = Frame(root)
entryhost = Entry(frame)
entryhost.pack(side=LEFT, fill=X, expand=True)
entryhost.insert(0, "127.0.0.1")
label = Label(frame, text="Enter IP or Domain")
label.pack(side=LEFT)
username = Entry(frame)
username.pack(side=LEFT, fill=X, expand=True)
label = Label(frame, text="Enter Your Username")
label.pack(side=LEFT)
frame.pack(fill=X)
frame2 = Frame(root)
scrollbar2 = scrollbar2 = Scrollbar(frame2)
scrollbar2.pack(side=LEFT, fill=Y)
listb1 = Text(frame2)
listb1.pack(side=LEFT, fill=BOTH, expand=True)
scrollbar2.config(command=listb1.yview)
listb1.config(yscrollcommand=scrollbar2.set)
canvas = Canvas(frame2, background="white", width=200, height=400)
canvas.pack(side=LEFT)
canvas.bind('<ButtonPress-1>',bdown)
canvas.bind('<ButtonRelease-1>', bup)
frame2.pack(fill=BOTH, expand=True)
frame.pack(fill=BOTH, expand=True)
frame = Frame(root)
textboxsend = Entry(frame)
textboxsend.pack(side=LEFT, fill=X, expand=True)
textboxsend.bind('<Return>',sendit)
textboxsend.focus_set()
label = Label(frame, text="Enter Your Message and Press Enter")
label.pack(side=LEFT)
frame.pack(fill=X)
root.mainloop()