[ create a new paste ] login | about

Link: http://codepad.org/o0ixm3Km    [ raw code | fork ]

Python, pasted on Jan 10:
import socket
import time
import threading
from Queue import Queue
import gobject
import gtk

PORT = 45454

def server():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    sock.bind(('', PORT))
    sock.listen(1)
    conn, addr = sock.accept()
    while True:
        data = conn.recv(1024)
        if not data:
            break
        conn.send(data)
    conn.close()
    sock.close()

th = threading.Thread(target=server)
th.setDaemon(True)
th.start()
time.sleep(0.5) # waiting for the server to be ready


class Client(gobject.GObject, threading.Thread):
    def __init__(self):
        self.__gobject_init__()
        threading.Thread.__init__(self)
        self.setDaemon(True)
        self.queue_send = Queue()
        self.queue_recv = Queue()

    def send(self, msg):
        self.queue_send.put(msg)

    def recv(self):
        return self.queue_recv.get()

    def run(self):
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.connect(('', PORT))
        while True:
            sock.send(self.queue_send.get())
            self.queue_recv.put(sock.recv(1024))
            self.emit("data_received")
        sock.close()

gobject.type_register(Client)
gobject.signal_new("data_received", Client,
        gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ())


class PyApp(gtk.Window):
    def __init__(self):
        gtk.Window.__init__(self)
        self.connect("destroy", gtk.main_quit)
        self.set_size_request(500, 500)
        self.label = gtk.Label("")
        self.add(self.label)
        self.show_all()

        self.c = Client()
        self.c.start()
        self.c.connect("data_received", self.received_handler)
        gobject.timeout_add(500, self.send_message)

    def send_message(self):
        self.c.send("unko unko unko unko unko unko")
        gobject.timeout_add(500, self.send_message)

    def received_handler(self, sender):
        data = self.c.recv()
        self.label.set_text(self.label.get_text() + '\n' + data)

gtk.gdk.threads_init()
PyApp()
gtk.main()


Create a new paste based on this one


Comments: