private IEnumerable<Tuple<String, object>> ListToMenuItems(Erlang.List list) { Erlang.Object itemPat = Erlang.Object.Format("{Text,Code}"); Erlang.VarBind binding; foreach (Erlang.Object item in list) { if (itemPat.match(item, (binding = new Otp.Erlang.VarBind()))) { Erlang.Object text = binding.find("Text"); string textStr = text.stringValue(); Erlang.Object code = binding.find("Code"); yield return new Tuple<String, object>(textStr, code); } } }
private void GetList(OtpMbox mbox, Action<IEnumerable<Tuple<String, object>>> handler) { Otp.Erlang.Object reply = mbox.rpcCall( remote, "servant", "get_confirmations", new Otp.Erlang.List()); Erlang.Object okPat = Erlang.Object.Format("{ok, List}"); Erlang.Object itemPat = Erlang.Object.Format("{Text,Code}"); Erlang.VarBind binding; if (okPat.match(reply, (binding = new Otp.Erlang.VarBind()))) { Erlang.List list = binding.find("List") as Erlang.List; handler(ListToMenuItems(list)); } else { WriteLine("Bad reply on getList {0}", reply.ToString()); } }