[Gd-chatter] r11096 - in trunk/libraries/network: koala/sources/examples/buddha xmpp-bot

hannes at gwydiondylan.org hannes at gwydiondylan.org
Fri Dec 22 02:03:16 CET 2006


Author: hannes
Date: Fri Dec 22 02:03:14 2006
New Revision: 11096

Modified:
   trunk/libraries/network/koala/sources/examples/buddha/buddha.dylan
   trunk/libraries/network/koala/sources/examples/buddha/zone.dylan
   trunk/libraries/network/xmpp-bot/xmpp-bot.dylan
Log:
Bug:7257
some more features to buddha:
 use zone infos in SOA
 xmpp-echo-bot

Modified: trunk/libraries/network/koala/sources/examples/buddha/buddha.dylan
==============================================================================
--- trunk/libraries/network/koala/sources/examples/buddha/buddha.dylan	(original)
+++ trunk/libraries/network/koala/sources/examples/buddha/buddha.dylan	Fri Dec 22 02:03:14 2006
@@ -1159,22 +1159,26 @@
     format-out("Sending %s\n", message);
     broadcast-message(*xmpp-bot*, message);
   exception (e :: <condition>)
-    xmpp-worker();
+    format-out("Message could not be delivered %=\n", e);
   end;
 end;
 
 define variable *xmpp-bot* = #f;
 
 define function xmpp-worker ()
-  block()
-    *xmpp-bot* := make(<xmpp-bot>, jid: "buddha at jabber.berlin.ccc.de/serva", password: "fnord");
-    sleep(3); //this is for safety reasons, xml-parser is not thread-safe!
-  exception (e :: <condition>)
-    *xmpp-bot* := #f
+  while (#t)
+    block()
+      unless (*xmpp-bot*)
+        *xmpp-bot* := make(<xmpp-bot>, jid: "buddha at jabber.berlin.ccc.de/serva", password: "fnord");
+      end;
+      sleep(23345);
+    exception (e :: <condition>)
+      *xmpp-bot* := #f
+    end;
   end;
 end;
 define function main () => ()
-  xmpp-worker();
+  make(<thread>, function: xmpp-worker);
   register-url("/buddha.css", maybe-serve-static-file);
   block()
     start-server();

Modified: trunk/libraries/network/koala/sources/examples/buddha/zone.dylan
==============================================================================
--- trunk/libraries/network/koala/sources/examples/buddha/zone.dylan	(original)
+++ trunk/libraries/network/koala/sources/examples/buddha/zone.dylan	Fri Dec 22 02:03:14 2006
@@ -88,16 +88,17 @@
   data reverse? :: <boolean> = #f;
   has-many cname :: <cname>;
   data hostmaster :: <string> = "hostmaster.congress.ccc.de";
-  data serial :: <integer> = 0;
-  data refresh :: <integer> = 180;
-  data retry :: <integer> = 300;
-  data expire :: <integer> = 600;
+  slot serial :: <integer> = 0;
+  data refresh :: <integer> = 16384;
+  data retry :: <integer> = 2048;
+  data expire :: <integer> = 1048576;
   data time-to-live :: <integer> = 1800;
-  data minimum :: <integer> = 300;
+  data minimum :: <integer> = 2560;
   has-many nameserver :: <nameserver>;
   has-many mail-exchange :: <mail-exchange>;
   has-many host-record :: <host-record>;
   //has-many text :: <string>;
+  data zone-serial :: <string>;
 end;
 
 define method initialize (zone :: <zone>,
@@ -136,13 +137,17 @@
 
 define method print-tinydns-zone-file (print-zone :: <zone>,
                                        stream :: <stream>)
+  let (year, month, days, hours, minutes, seconds) = decode-date(current-date());
+  let s2 = rcurry(integer-to-string, size: 2);
+  let ser = concatenate(integer-to-string(year, size: 4), s2(month), s2(days), s2(hours), s2(minutes));
+  print-zone.zone-serial := ser;
   //Zfqdn:mname:rname:ser:ref:ret:exp:min:ttl:timestamp:lo
-  format(stream, "Z%s:%s.:%s.\n", //:%d:%d:%d:%d:%d:%d\n",
+  format(stream, "Z%s:%s.:%s.:%s:%d:%d:%d:%d:%d\n",
          print-zone.zone-name, print-zone.nameservers[0].ns-name,
-         print-zone.hostmaster); //, print-zone.serial,
-//         print-zone.refresh, print-zone.retry,
-//         print-zone.expire, print-zone.minimum,
-//         print-zone.time-to-live);
+         print-zone.hostmaster, print-zone.zone-serial,
+         print-zone.refresh, print-zone.retry,
+         print-zone.expire, print-zone.minimum,
+         print-zone.time-to-live);
   //nameserver
   do(method(x)
          format(stream, "&%s::%s.\n", print-zone.zone-name, x.ns-name)

Modified: trunk/libraries/network/xmpp-bot/xmpp-bot.dylan
==============================================================================
--- trunk/libraries/network/xmpp-bot/xmpp-bot.dylan	(original)
+++ trunk/libraries/network/xmpp-bot/xmpp-bot.dylan	Fri Dec 22 02:03:14 2006
@@ -32,6 +32,8 @@
                           #rest rest, #key, #all-keys)
   let subscription-callback = make(<callback>, reference: #"default", priority: 3, handler: curry(auto-subscriber, xmpp-bot));
   add-callback(xmpp-bot.client, <presence>, subscription-callback);
+  let broadcast-callback = make(<callback>, reference: #"default", priority: 3, handler: curry(broadcaster, xmpp-bot));
+  add-callback(xmpp-bot.client, <message>, broadcast-callback);
   if (~ connect(xmpp-bot.client))
     exit-application(1);
   end if;
@@ -40,6 +42,11 @@
   send(xmpp-bot.client, make(<iq>, type: #"get", query: with-xml() query(xmlns => "jabber:iq:roster") end, id: "roster"));
 end;
 
+define method broadcaster (xmpp-bot, client, message)
+  if (message.body & ~(subsequence-position(as(<string>, message.body), "?OTR")))
+    broadcast-message(xmpp-bot, concatenate(as(<string>, message.from), " wrote: ", as(<string>, message.body)));
+  end;
+end;
 define method auto-subscriber (xmpp-bot, client, presence)
   if (presence.type)
     select (presence.type)
@@ -77,8 +84,9 @@
                     end;
     end select;
   else
-    unless (any?(method(a) a = as(<string>, presence.from) end, xmpp-bot.online-users))
-      xmpp-bot.online-users := add!(xmpp-bot.online-users, as(<string>, presence.from));
+    let subscriber = as(<string>, presence.from);
+    unless (any?(curry(\=, subscriber), xmpp-bot.online-users))
+      xmpp-bot.online-users := add!(xmpp-bot.online-users, subscriber);
     end;
   end;
 end;



More information about the chatter mailing list