Chat usando XmlRpc e Tkinter
Nesse cookbook, eu demonstro a implementação de um Chat bem simples utilizando XmlRpc e Tkinter como interface gráfica.
Lembrando que esse é apenas um exemplo de uso do XmlRpc e que o XmlRpc não é o melhor protocolo para implementar-se um chat.
Servidor
1 import SimpleXMLRPCServer
2
3 msg = ''
4
5 class Chat(object):
6
7 def send(self, m):
8 global msg
9 msg += m
10
11 def get(self):
12 global msg
13 return msg
14
15
16 server = SimpleXMLRPCServer.SimpleXMLRPCServer(("localhost", 8888))
17 server.register_instance(Chat())
18
19 server.serve_forever()
Cliente
1 import xmlrpclib
2 from Tkinter import *
3
4 class App:
5
6 def __init__(self, master):
7
8 self.master = master
9
10 self.server = xmlrpclib.ServerProxy("http://localhost:8888")
11
12 frame = Frame(master)
13 frame.pack()
14
15 self.nick_label = Label(frame, text="Nick: ")
16 self.nick_label.grid(row=0, sticky=W)
17
18 self.nick = Entry(frame)
19 self.nick.grid(row=0, column=1, columnspan=2, sticky=W+E)
20
21 self.text = Text(frame)
22 self.text.grid(row=1, columnspan=3, sticky=W)
23
24 self.msg = Label(frame, text='Mensagem: ')
25 self.msg.grid(row=2, sticky=W)
26
27 self.entry = Entry(frame)
28 self.entry.grid(row=2, column=1, sticky=W+E)
29
30 self.enviar = Button(frame, text="Enviar", command=self.enviar_mensagem)
31 self.enviar.grid(row=2, column=2, sticky=E)
32
33 self.master.after(500, self.oi)
34
35
36 def enviar_mensagem(self):
37 print self.entry.get()
38 text = '>>%s: %s \n' % (self.nick.get(), self.entry.get())
39 self.server.send(text)
40
41
42 def oi(self):
43 self.master.after(500, self.oi)
44 self.text.delete(1.0, END)
45 self.text.insert(END, self.server.get())
46
47
48
49 root = Tk()
50
51 app = App(root)
52
53 root.mainloop()
Volta para CookBook