whohas
[hcoop/domtool2.git] / src / msg.sml
index f2c4d72..faced87 100644 (file)
@@ -70,6 +70,14 @@ fun send (bio, m) =
                                               OpenSSL.writeString (bio, value))) values;
                                      OpenSSL.writeInt (bio, 0))) classes;
                             OpenSSL.writeInt (bio, 0))
                                               OpenSSL.writeString (bio, value))) values;
                                      OpenSSL.writeInt (bio, 0))) classes;
                             OpenSSL.writeInt (bio, 0))
+      | MsgWhoHas {class, value} => (OpenSSL.writeInt (bio, 10);
+                                    OpenSSL.writeString (bio, class);
+                                    OpenSSL.writeString (bio, value))
+      | MsgWhoHasResponse users => (OpenSSL.writeInt (bio, 11);
+                                   app (fn user =>
+                                           (OpenSSL.writeInt (bio, 1);
+                                            OpenSSL.writeString (bio, user))) users;
+                                   OpenSSL.writeInt (bio, 0))
 
 fun checkIt v =
     case v of
 
 fun checkIt v =
     case v of
@@ -128,6 +136,21 @@ fun recv bio =
                     in
                         loop []
                     end
                     in
                         loop []
                     end
+                  | 10 => (case (OpenSSL.readString bio, OpenSSL.readString bio) of
+                               (SOME class, SOME value) => SOME (MsgWhoHas {class = class, value = value})
+                             | _ => NONE)
+                  | 11 => let
+                        fun loop users =
+                            case OpenSSL.readInt bio of
+                                SOME 0 => SOME (MsgWhoHasResponse (rev users))
+                              | SOME 1 =>
+                                (case OpenSSL.readString bio of
+                                     SOME user => loop (user :: users)
+                                   | NONE => NONE)
+                              | _ => NONE
+                    in
+                        loop []
+                    end
                   | _ => NONE)
         
 end
                   | _ => NONE)
         
 end