[Gd-chatter] r10743 - trunk/libraries/xmpp

turbo24prg at gwydiondylan.org turbo24prg at gwydiondylan.org
Tue May 16 23:08:43 CEST 2006


Author: turbo24prg
Date: Tue May 16 23:08:42 2006
New Revision: 10743

Modified:
   trunk/libraries/xmpp/client.dylan
Log:
Bug: 7313
* parser works now
* empty elements still not added


Modified: trunk/libraries/xmpp/client.dylan
==============================================================================
--- trunk/libraries/xmpp/client.dylan	(original)
+++ trunk/libraries/xmpp/client.dylan	Tue May 16 23:08:42 2006
@@ -24,9 +24,10 @@
 
 block ()
 //  let parser-depth = 0;
-//  let stream-initiated? = #f;
+  let stream-running? = #f;
   let parsing-tag? = #f;
   let parser-buffer = "";
+  let current-element = #f;
   
   // keep watching that start tags match end tags
   let tag-queue = make(<deque>);
@@ -43,6 +44,9 @@
           elseif (size(tag-queue) = 0 & received ~= '\n')
             //!!! error: not well-formed xml: chars not contained in root element
             format-out("!!! error: not well-formed xml: chars not contained in root element\n");
+          elseif (size(tag-queue) > 0 & current-element & received ~= '\n')
+            //!!! collect chars into text of current-element!!!
+            current-element.text := add!(current-element.text, received); 
           end if;
         else
           if (received = '>')
@@ -51,19 +55,37 @@
             format-out(">>> %s\n", parser-buffer);
 
             // could be the start tag of an element
-            let (index, start-tag, opened-element?) = scan-start-tag(parser-buffer);
+            let (index, start-tag, attributes, opened-element?) = scan-start-tag(parser-buffer);
             if (start-tag & opened-element?)
-              format-out("!!! (start)  %s (%s)\n", start-tag, real-name(start-tag));
+              format-out("!!! (start)  %s\n", start-tag);
               // should be closed later
               push-last(tag-queue, start-tag);
               format-out("!!! now at depth: %d\n", size(tag-queue));
-              // dispatch();
+              // dispatch  
+              let element = make(<element>, name: as(<string>, start-tag));
+              for (attribute in attributes)
+                add-attribute(element, attribute);
+              end for;
+              if (current-element)
+                add-element(current-element, element);
+              end if;
+              current-element := element;
+              format-out("!!! (current element) %=\n", current-element);
+              if (current-element.name = #"stream:stream" & ~ stream-running?)
+                stream-running? := #t;
+                //!!! do something
+                current-element := #f;
+              end if;
+              // cleanup
               parser-buffer := "";
               parsing-tag? := #f;
               read-next();
             elseif (start-tag & ~ opened-element?)
-              format-out("!!! (empty)  %s (%s)\n", start-tag, real-name(start-tag));
-              // dispatch();
+              format-out("!!! (empty)  %s\n", start-tag);
+              // dispatch
+
+            
+              // cleanup
               parser-buffer := "";
               parsing-tag? := #f;
               read-next();
@@ -72,13 +94,27 @@
             // could be the end tag of an element
             let (index, end-tag, opened-element?) = scan-end-tag(parser-buffer);
             if (end-tag)
-              format-out("!!! (end)  %s (%s)\n", end-tag, real-name(end-tag));
+              format-out("!!! (end)  %s\n", end-tag);
               // should close the last started tag
               if (as(<symbol>, end-tag) = last(tag-queue))
-                format-out("!!! (successful end)  %s (%s)\n", end-tag, real-name(end-tag));
+                format-out("!!! (successful end)  %s\n", end-tag);
                 pop-last(tag-queue);  
                 format-out("!!! now at depth: %d\n", size(tag-queue));
-                // dispatch();
+                // dispatch
+                if (end-tag = "stream:stream" & ~ current-element)
+                  stream-running? := #f;
+                  //!!! shutdown
+                else
+                  format-out("!!! (-) %=\n", current-element);
+                  format-out("!!! (+) %=\n", current-element.element-parent);
+                  if (~ current-element.element-parent)
+                    format-out("!!! (X) %=\n", current-element);
+                    //!!! do something!!!
+                  end if;
+                  //@listener.receive wird ausgeführt wenn @current keinen parent hat
+                  current-element := current-element.element-parent;
+                end if;
+                // cleanup
                 parser-buffer := "";
                 parsing-tag? := #f;
                 read-next();



More information about the chatter mailing list