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
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