dayslepr Skrevet 19. mai 2006 Del Skrevet 19. mai 2006 (endret) http://swchat.nostdal.org:6123/swchat/main.html kildekode: Skjult tekst: (Marker innholdet i feltet for å se teksten): ;;;; http://nostdal.org/SWChat/ ;;;; (defpackage SWChat (:use :cl :SymbolicWeb :AmUtil)) (in-package :SWChat) (defparameter *max-length* 100000) (defclass SWChat (Application) ((username :accessor username-of :initform (concatenate 'string "anonymous-" (SW::generateID))) (messages :accessor messages-of :allocation :class :initform "") (participants :accessor participants-of :allocation :class :initform (make-instance 'AppGroup))) (:default-initargs :name "SWChat" :static-path "/home/lars/programming/lisp/swchat/static/")) (export 'SWChat) (defmethod initialize-instance :after ((app SWChat) &key) ;; TODO: Some way the instances get removed from the group. (add app (participants-of app)) ;; Set up handlers. (setf (handler-of app "say") 'say) (setf (handler-of app "redraw") 'redraw)) (defmethod scrollView ((app Ajax)) "Scroll view so one sees the last message arrived." (evalJS app "getElt('messages').scrollTop = getElt('messages').scrollHeight;")) (defmethod redraw ((app SWChat)) (setElement app "messages" (messages-of app)) (setValue app "nick" (mkstr "anonymous-" (SW::generateID))) (scrollView app)) (defmethod say ((app SWChat) (message string) (nick string)) (setf message (mkstr "<br/>" nick ": " (AmWeb:escapeHTML (AmWeb:urlDecode message)))) ;; Update server side.. (setf (messages-of app) (concatenate 'string (messages-of app) message)) ;; ..but make sure it doesn't store too much. (when (> (- (length (messages-of app)) *max-length*) 0) (setf (messages-of app) (subseq (messages-of app) (- (length (messages-of app)) *max-length*) (length (messages-of app))))) ;; Send message to `app' (the one who sent the message originally). (appendToElement app "messages" message) (scrollView app) ;; Send message to every other client. (appendToElement (participants-of app) "messages" message) (scrollView (participants-of app)) (dispatch (participants-of app) app)) edit: oh, jeg har kun bekreftet at denne fungerer under Firefox og Opera (noen småbugs i Opera fortsatt, men ok) .. en på IRC nevnte at den fungerte under Safari og Konqueror også om noen er interesserte i et samarbeid m.t.p. design eller lignende er det bare å ta kontakt (jeg har et par andre eksempler liggende også ..) Endret 23. mai 2006 av dayslepr Lenke til kommentar
dayslepr Skrevet 20. mai 2006 Forfatter Del Skrevet 20. mai 2006 (endret) nå skal denne fungere under både Firefox (1.5.0.3), Opera (9.00 beta) og Internet Explorer (6.0.2800.1106) .. edit: err .. Opera er ikke heeelt på plass ennå Endret 20. mai 2006 av dayslepr Lenke til kommentar
Klette Skrevet 20. mai 2006 Del Skrevet 20. mai 2006 \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ Yay! Konge Lars Lenke til kommentar
dayslepr Skrevet 23. mai 2006 Forfatter Del Skrevet 23. mai 2006 (endret) hm, det er ikke noen som har litt greie på AJAX/JavaScript i Opera her? denne applikasjonen http://nostdal.org:6123/hello-world/hello-world.html skal oppdatere tallet ved siden av "The time is: " hvert sekund, men under Opera så skjer ikke dette debugMsg("debug", "server-initiated: about to send new request"); window.xhr_si.onreadystatechange = siHandler; window.xhr_si.open("POST", "?type=server-initiated", true); window.xhr_si.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); window.xhr_si.setRequestHeader('User-Agent', navigator.userAgent); window.xhr_si.send(""); debugMsg("debug", "server-initiated: new request sent"); siHandler, readyState: 1server-initiated: about to send new request siHandler, readyState: 4 siHandler, readyState: 3 updateElements, response_text: '[["setElement","time",3357397454],["setElement","session-id","4677"]]' sndReq: '[["redraw"]]' queueReq: '[["redraw"]]' server-initiated: new request sent siHandler, readyState: 1 server-initiated: about to send new request siste debug-melding er øverst .. det som er snedig, er at etter jeg har kallt abort og skal resende http-requesten (ajax dette) så sender den ikke, den blokker og siste melding blir da "about to send new request" - altså den blir aldri sendt .. har noen peil på dette? IE og FF fungerer som de skal edit: rop om mer info trengs! Endret 23. mai 2006 av dayslepr Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå