Problems Drawing Over Network

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Andrew

    #1

    Problems Drawing Over Network

    Hello Everyone

    I am receiving an error in an application I am working on. The
    application when its done will be a Dungeons and Dragons Network game. I
    am having problems with the Networked Canvas basically for drawing the
    dungeon maps

    If I initialize two of the Tkinter Canvas widgets with in the same
    window I can draw across the network, however if I open a second
    instance of the Application and initialize the canvas, on windows I recv
    a "Software has caused a connection abort error", on Linux I recv a
    broken pipe message

    I am wondering how to go about fixing this I have spent the last 4 days
    trying to figure it

    Any ideas would be appreciated

    Cheers

    ###CODE###

    #CLIENT
    import random
    import time
    from Tkinter import *
    import string
    import sys
    import Image
    import ImageTk
    import JpegImagePlugin
    from threading import *
    import socket
    import spots
    import time
    import thread
    Image.initializ ed = 1



    HOST = '24.207.81.142'
    PORT = 8080
    PORT2 = 8888


    s = socket.socket(s ocket.AF_INET, socket.SOCK_STR EAM)
    s.connect((HOST , PORT))

    PORT2 = 8888

    server = socket.socket(s ocket.AF_INET, socket.SOCK_STR EAM)
    server.connect( (HOST, PORT2))
    ZSP = spots.ZSP(serve r)


    def main():
    global hold
    hold = []
    global fill
    fill = '#000000'
    connect()
    root = Tk()
    root.title('Gra phics')
    root.resizable( False, False)
    upper = LabelFrame(root , text='Global Canvas')
    lower = LabelFrame(root , text='Their Canvas')
    global draw
    draw = Canvas(upper, bg='#ffffff', width=400, height=300,
    highlightthickn ess=0)
    global look
    #look = Canvas(lower, bg='#ffffff', width=400, height=300,
    highlightthickn ess=0)
    cursor = Button(upper, text='Cursor Color', command=change_ cursor)
    canvas = Button(upper, text='Canvas Color', command=change_ canvas)
    draw.bind('<Mot ion>', motion)
    draw.bind('<But tonPress-1>', press)
    draw.bind('<But tonRelease-1>', release)
    draw.bind('<But ton-3>', delete)
    upper.grid(padx =5, pady=5)
    lower.grid(padx =5, pady=5)
    draw.grid(row=0 , column=0, padx=5, pady=5, columnspan=2)
    #look.grid(padx =5, pady=5)
    cursor.grid(row =1, column=0, padx=5, pady=5, sticky=EW)
    canvas.grid(row =1, column=1, padx=5, pady=5, sticky=EW)
    root.mainloop()




    def connect():
    thread.start_ne w_thread(proces sor, ())


    ##def start_server():
    ## global ZSP
    ## server = socket.socket()
    ## server.bind(('' , PORT))
    ## server.listen(1 )
    ## ZSP = spots.ZSP(serve r.accept()[0])

    def processor():
    while True:
    (func, args, kwargs) = ZSP.recv()
    getattr(draw, func)(*args, **kwargs)
    time.sleep(0.1)

    def call(func, *args, **kwargs):
    ZSP.send((func, args, kwargs))

    ############### ############### ############### ############### ############### #####

    def change_cursor() :
    global fill
    color = tkColorChooser. askcolor(color= fill)[1]
    if color is not None:
    fill = color

    def change_canvas() :
    color = tkColorChooser. askcolor(color= draw['bg'])[1]
    if color is not None:
    draw['bg'] = color
    draw.config(bg= color)
    call('config', bg=color)

    ############### ############### ############### ############### ############### #####

    def motion(event):
    if hold:
    hold.extend([event.x, event.y])
    event.widget.cr eate_line(hold[-4:], fill=fill, tag='TEMP')
    call('create_li ne', hold[-4:], fill=fill, tag='TEMP')

    def press(event):
    global hold
    hold = [event.x, event.y]

    def release(event):
    global hold
    if len(hold) 2:
    event.widget.de lete('TEMP')
    event.widget.cr eate_line(hold, fill=fill, smooth=True)
    call('delete', 'TEMP')
    call('create_li ne', hold, fill=fill, smooth=True)
    hold = []

    def delete(event):
    event.widget.de lete(ALL)
    call('delete', ALL)
    ############### ############### ############### ############### ############### #####


    class App:
    def __init__(self, master):
    #initialize socket variables for theclient
    self.thread1 = Thread(target=s elf.run)
    self.thread1.st art()
    self.frameH = frameH = Frame(master, background="#ff ffff")
    self.labelH = Label(frameH, image=fri)
    self.labelH.pac k(side=TOP)
    frameH.pack()

    self.framettext = Frame(master)
    self.scrollbar = Scrollbar(self. framettext)
    self.scrollbar. pack(side=RIGHT , fill=Y, expand=TRUE)
    self.textbox = Text(self.frame ttext)
    self.textbox.pa ck(fill=BOTH, expand=True)
    self.textbox.co nfig(yscrollcom mand=self.scrol lbar.set)
    self.scrollbar. config(command= self.textbox.yv iew)
    self.framettext .pack(fill=BOTH , expand=True)

    self.frame = Frame(master)
    self.frame.pack (fill=X, expand=True)
    self.send=Butto n(self.frame, text='Send Message',
    command=self.se nd)
    self.send.pack( side=LEFT)
    self.draw=Butto n(self.frame, text='Dungeon Canvas',
    command=self.op enCanvas)
    self.draw.pack( side=LEFT)

    self.d20=Button (self.frame, text='D20', command=self.d2 0roll)
    self.d20.pack(s ide=LEFT)
    self.sendtext=E ntry(self.frame )
    self.sendtext.p ack(side=LEFT, fill=X, expand=True)



    ############### ############### ############### ############### ############### #####



    def d20roll(self):
    self.rand = random.randrang e(1, 20)
    rs = str(self.rand)
    self.d20text = "d20 Roll " + rs
    s.send(self.d20 text)
    self.textbox.in sert(END, self.d20text)

    def openCanvas(self ):
    main()

    def send(self):
    self.sendit = self.sendtext.g et()
    if self.sendit == "":
    pass
    else:
    s.send(self.sen dit)
    self.textbox.in sert(END, self.sendit + "\n")
    self.sendtext.d elete(0, END)


    def run(self):
    while 1:
    data=s.recv(102 4)
    app.textbox.ins ert(END, str(data) + "\n")
    time.sleep(0.1)
    ############### ############### ###

    root = Tk()
    root.wm_resizab le(0, 0)
    root.wm_iconbit map("shinobi.ic o")

    frmimg = Image.open("ban ner.jpg")
    fri = ImageTk.PhotoIm age(frmimg)
    classtitle="Tec h Shinobi Chat 1.0"
    root.option_rea dfile("optionDB ")
    root.title(clas stitle)
    root.geometry(' %dx%d+%d+%d' % (500,380,0,0))
    app = App(root)

    root.mainloop()
    s.close()

    ###END CODE###


    That is the client now here is the server

    ###CODE###


    #!/usr/bin/env python

    #SERVER

    import socket, traceback, os, sys
    from threading import *
    import spots
    host = '' # Bind to all interfaces
    port = 8888

    def handlechild():
    while 1:
    data = ZSP.recv()
    if not len(data):
    break
    ZSP.send((data) )

    # Set up the socket.
    s = socket.socket(s ocket.AF_INET, socket.SOCK_STR EAM)
    s.setsockopt(so cket.SOL_SOCKET , socket.SO_REUSE ADDR, 1)
    s.bind((host, port))
    s.listen(1)

    while 1:
    try:
    ZSP = spots.ZSP(s.acc ept()[0])
    except KeyboardInterru pt:
    raise
    except:
    traceback.print _exc()
    continue

    t = Thread(target=h andlechild)
    t.setDaemon(1)
    t.start()


    heres is a link to the spots module I am using


    also the original drawing application I am using


    Cheers

    I appreciate any help

    ty

    Andrew Evans
  • paul

    #2
    Re: Problems Drawing Over Network

    Andrew schrieb:
    Hello Everyone
    [snipped stuff]
    Sorry not being helpful, but I suggest you post a minimal sample of your
    code demonstrating your program.

    cheers
    Paul


    Comment

    Working...