Tok es un programa de chat escrito en Groovyen dos horas por el autor de SH*TMORES, un blog sobre ingeniería de software. El autor (no he logrado encontrar cómo se llama) se quedó sin ADSL unos días, y decidió dedicar su tiempo libre a “aprender un poco más de Groovy”. Cogió su ejemplar de Groovy in Action, y en un par de horas tenía una sencilla aplicación de chat cliente-servidor.
El cliente tiene 63 líneas de código, el servidor solo 33, y la conectividad entre ambos se realiza mediante XML-RPC.
Vía Groovy.or.ges, el post original aquí
Cada día estoy más convencido de que tengo que aprender Groovy. Ya. Ahora. Solo de pensar la de cientos de líneas que me puedo ahorrar programando lo mismo que hago en Java pero en Groovy se me hace la boca agua.
Tok client
1 import groovy.swing.SwingBuilder
2 import groovy.net.xmlrpc.XMLRPCServerProxy as Proxy
3 import groovy.net.xmlrpc.XMLRPCServer as Server
4
5 import java.net.ServerSocket
6 import java.awt.BorderLayout as BL
7 import javax.swing.WindowConstants as WC
8
9
10 def swing = new SwingBuilder()
11 def content = new StringBuffer()
12 def remote = new Proxy('http://localhost:8081/')
13
14 newMsg = swing.action( name:'newMessage', closure: {
15 msg = remote.chat( swing.inputMsg.text )
16 //content << " ${msg}"
17 //swing.msgPane.text = content
18 swing.inputMsg.text = ""
19 } )
20
21 def frame = swing.frame( title:'Tok' ) {
22 // Menu bar
23 menuBar {
24 menu('File') {
25 menuItem 'Quit'
26 }
27 menu('Edit') {
28 }
29 menu('Help') {
30 menuItem 'About'
31 }
32 }
33
34 // Panel
35 panel( layout: new BL() ) {
36 scrollPane( constraints: BL.CENTER ) {
37 editorPane( id:'msgPane', editable:false, preferredSize:[60, 100],
38 editorKit: new javax.swing.text.html.HTMLEditorKit() )
39 }
40 panel(constraints: BL.SOUTH) {
41 textField(id:'inputMsg', columns:20)
42 button( action:newMsg, 'Go' )
43 }
44 }
45 }
46 content << "Tok session started on ${new Date().toString()}"
47 swing.msgPane.text = content
48
49 // Perform client registration to the chat network
50 int ticket = remote.register()
51 println "TICKET: ${ticket}"
52 def server = new Server()
53 server.startServer( new ServerSocket(ticket) )
54
55 server.update = { msg ->
56 print msg
57 content << "${msg}"
58 swing.msgPane.text = content
59 }
60
61 frame.pack()
62 frame.setDefaultCloseOperation( WC.EXIT_ON_CLOSE )
63 frame.show()
Tok Server
1 import groovy.net.xmlrpc.XMLRPCServer as Server
2 import groovy.net.xmlrpc.XMLRPCServerProxy as Proxy
3 import java.net.ServerSocket
4
5
6 def ticket = 9991
7 def clients = []
8
9 def server = new Server()
10
11 server.chat = { msg ->
12 println msg
13 clients.each { client ->
14 //client.update( msg )
15 updateClient(client, msg)
16 }
17 }
18
19 def updateClient(client, msg) {
20 try {
21 client.update( msg )
22 } catch (Exception ex) {
23 println ex
24 }
25 }
26
27 server.register = {
28 clients << new Proxy("http://localhost:${ticket}")
29 return ticket++
30 }
31
32 def socket = new ServerSocket(8081)
33 server.startServer(socket)
Popularity: 1% [?]















HACKER, ENTRE A INEGI U OTRA BASE DE DATOS. (DE AHI U OTRO SITIO) SOLICITO CARTOGRAFIA, MAPAS CARRETEROS Y DE TODAS LAS CIDADES DE MEXICO. $$$$COMPRO$$$$$CONTACTO mapas2302@yahoo.com.mx