X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/blobdiff_plain/08a04eb413e8ee58ee35affc5c4125b622ea75c4..094877b11a71011cc7af7dc1b5a6b853b4985c6d:/src/msg.sml?ds=sidebyside diff --git a/src/msg.sml b/src/msg.sml index f2c4d72..faced87 100644 --- a/src/msg.sml +++ b/src/msg.sml @@ -70,6 +70,14 @@ fun send (bio, m) = 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 @@ -128,6 +136,21 @@ fun recv bio = 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