Ejercicio - Aprendan los que saben menos - Ayuden los que saben mas

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Ejercicio - Aprendan los que saben menos - Ayuden los que saben mas

Edgar J. De Cleene
serviceRun
    | ma method remoteIp historia |
    ma := ModuleAssembly core.
    ma
        logTo: (KomLogger
                on: (FileStream oldFileNamed: 'server.log')).
    "authdb := KomAuthDb new.
    users := self class users.
    users keysAndValuesDo: [:k :v| authdb addUser: k withPassword: v].
    ma authenticate: authdb realm: 'REMOTE'."
    ma
        alias: '/screen'
        to: [ma
                addPlug: [:request | HttpResponse fromMIMEDocument: (Form
fromDisplay: screenBounds) asWebImage]].
    ma
        addPlug: [:request |
            | aPoint aButton |
            remoteIp := request remoteAddress asIpString.
            historia := visitors
                        at: remoteIp
                        ifAbsent: [cartel := TextMorph fancyPrototype.
                            cartel autoFit: true.
                            cartel contents: 'SqueakRos Greet ' , remoteIp.
                            cartel openInHand.
                            visitors at: remoteIp put: OrderedCollection
new].
            historia
                add: (String
                        streamContents: [:strm | (TimeStamp fromSeconds:
request timestamp)
                                printCLFFormatOn: strm]).
            Transcript show: remoteIp;
                 tab.
            Transcript show: historia last;
                 cr.
                self halt.
            "(FMSound lowMajorScaleOn: FMSound bassoon1) play."
            request fields size = 0
                ifTrue: [method := request url.
                    method := method copyFrom: 2 to: method size.
                    method = 'favicon.ico'
                        ifFalse: [method = 'robots.txt'
                                ifFalse: [method size = 0
                                        ifFalse: [self perform: method
asSymbol]]]]
                ifFalse: [aPoint := Point x: (request fields at: 'point.x')
asInteger y: (request fields at: 'point.y') asInteger.
                    aButton := request fields at: 'button'.
                    textInput := request fields at: 'textIn'.
                    self click: aPoint button: aButton].


            HttpResponse fromString: self makeScreenMap].
    ^ (HttpService startOn: port named: 'Screen')
        plug: ma rootModule;mode:#debug
==========

Aquí se desea lo siguiente:
Este servicio corre sobre el 8088 y es la "foto" de la imagen desde web.
Se puede trabajar sobre la imagen que corre, en cierta medida.

Visitors es un objeto que es un diccionario.
Las claves son Ip y los valores son OrderedCollection de los accesos.
Tambien se graba un archivo de texto server.log
Fijense que la base de datos esta desactivada y la musiquita tambien.
A ver quien envia primero una solución para:

Que la músiquita y el cartel solo salgan para
Los ip nuevos.
El primer acceso del dia para los ip ya existentes.
Envio adjunto el objeto Visitors.obj , que al tirarlo sobre 3.11 Trucho (les
gusta mas ese nombre ?) se lee y abre solo mostrando un inspector del mismo

Premio: Una coca en Smalltalks 2008 al ganador

Edgar


Visitors.obj (75K) Download Attachment